j1-template 2024.3.22 → 2024.3.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/assets/data/{galeries.html → gallery_app.html} +4 -4
- data/assets/theme/bla +0 -0
- data/assets/theme/j1/adapter/js/amplitude.js +144 -52
- data/assets/theme/j1/adapter/js/gallery.js +1 -1
- data/assets/theme/j1/adapter/js/themes.js +41 -69
- data/assets/theme/j1/core/css/themes/unolight/bootstrap.css +19 -52
- data/assets/theme/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.js +466 -396
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/css/lg-transitions.css +984 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/css/lg-transitions.min.css +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/css/lightgallery-bundle.css +1627 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/css/lightgallery-bundle.min.css +25 -0
- data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/uno.css +1 -1
- data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/uno.min.css +1 -1
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/fonts/lg.svg +54 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/fonts/lg.ttf +0 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/fonts/lg.woff +0 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/fonts/lg.woff2 +0 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/images/loading.gif +0 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/img/loading.gif +0 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/img/video-play.png +0 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/img/vimeo-play.png +0 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/img/youtube-play.png +0 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/lightgallery.js +2782 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/lightgallery.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/parser/webvtt/LICENSE.md +44 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/parser/webvtt/README.md +37 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/parser/webvtt/parser.js +890 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/parser/webvtt/parser.min.js +8 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/j1/lg-video.1.js +585 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-autoplay.js +275 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-autoplay.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-comment.js +230 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-comment.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-fullscreen.js +160 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-fullscreen.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-hash.js +223 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-hash.min.js +27 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-medium-zoom.js +157 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-medium-zoom.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-pager.js +164 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-pager.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-rotate.js +299 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-rotate.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-share.js +244 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-share.min.js +27 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-thumbnail.js +509 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-thumbnail.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-video.js +909 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-video.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-vimeo-thumbnail.js +207 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-vimeo-thumbnail.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-zoom.js +999 -0
- data/assets/theme/j1/modules/lightGallery/!v2.7.2/js/plugins/lg-zoom.min.js +26 -0
- data/assets/theme/j1/modules/lightGallery/css/lg-transitions.css +3 -126
- data/assets/theme/j1/modules/lightGallery/css/lg-transitions.min.css +3 -10
- data/assets/theme/j1/modules/lightGallery/css/lightgallery-bundle.css +70 -237
- data/assets/theme/j1/modules/lightGallery/css/lightgallery-bundle.min.css +4 -10
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/animation-w.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/customize-w.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/dynamic-w.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/facebook-icon.svg +10 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/googleplus-icon.svg +30 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/html5-w.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/linked-in.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/module-w.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/play-button-hover.svg +94 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/play-button.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/play-button.svg +93 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/responsive-w.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/thumb-w.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/touch-w.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/twitter-icon.svg +15 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/twitter.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/video1-w.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/zoom-w.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/icons/zoom.png +0 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/uno.css +276 -0
- data/assets/theme/j1/modules/lightGallery/css/theme/uno/uno.min.css +17 -0
- data/assets/theme/j1/modules/lightGallery/js/lightgallery.js +163 -120
- data/assets/theme/j1/modules/lightGallery/js/lightgallery.min.js +6 -6
- data/assets/theme/j1/modules/lightGallery/js/plugins/j1/lg-thumbnail.0.js +495 -0
- data/assets/theme/j1/modules/lightGallery/js/plugins/j1/lg-thumbnail.1.js +513 -0
- data/assets/theme/j1/modules/lightGallery/js/plugins/j1/lg-video.0.js +553 -0
- data/assets/theme/j1/modules/lightGallery/js/plugins/j1/lg-video.1.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/j1/lg-video.2.js +914 -0
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-autoplay.js +4 -4
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-autoplay.min.js +5 -5
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-comment.js +5 -5
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-comment.min.js +6 -6
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-fullscreen.js +4 -4
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-fullscreen.min.js +5 -5
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-hash.js +4 -4
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-hash.min.js +5 -6
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-medium-zoom.js +5 -5
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-medium-zoom.min.js +6 -6
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-pager.js +4 -4
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-pager.min.js +5 -5
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-relative-caption.js +179 -0
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-relative-caption.min.js +32 -0
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-rotate.js +4 -4
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-rotate.min.js +6 -6
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-share.js +4 -4
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-share.min.js +6 -7
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-thumbnail.js +27 -20
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-thumbnail.min.js +5 -5
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-video.js +77 -125
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-video.min.js +6 -6
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-vimeo-thumbnail.js +4 -4
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-vimeo-thumbnail.min.js +5 -5
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-zoom.js +11 -5
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-zoom.min.js +5 -5
- data/assets/theme/j1/modules/themeSwitcher/js/switcher.js +13 -12
- data/assets/theme/j1/modules/videoPlayer/tiktoc/README.md +1 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/font/README.md +151 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/font/VideoJS.svg +150 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/themes/city.css +147 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/themes/city.min.css +5 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/themes/fantasy.css +113 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/themes/fantasy.min.css +5 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/themes/forest.css +166 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/themes/forest.min.css +5 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/themes/sea.css +72 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/themes/sea.min.css +5 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/themes/uno.css +311 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/themes/uno.min.css +19 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/videojs.css +1686 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/css/videojs.min.css +13 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/js/video.js +65226 -0
- data/assets/theme/j1/modules/videojs/!v8.12.0/js/video.min.js +55 -0
- data/assets/theme/j1/modules/videojs/assets/README.md +1 -0
- data/assets/theme/j1/modules/videojs/assets/icons/speedometer-medium.svg +35 -0
- data/assets/theme/j1/modules/videojs/css/font/VideoJS.ttf +0 -0
- data/assets/theme/j1/modules/videojs/css/font/VideoJS.woff +0 -0
- data/assets/theme/j1/modules/videojs/css/themes/uno.css +157 -22
- data/assets/theme/j1/modules/videojs/css/themes/uno.min.css +1 -1
- data/assets/theme/j1/modules/videojs/css/videojs.css +674 -316
- data/assets/theme/j1/modules/videojs/css/videojs.min.css +4 -3
- data/assets/theme/j1/modules/videojs/js/video.js +15893 -12288
- data/assets/theme/j1/modules/videojs/js/video.min.js +22 -23
- data/assets/theme/j1/modules/videojs/plugins/controls/aspect-ratio-panel/!examples/index.html +31 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/aspect-ratio-panel/LICENSE +19 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/aspect-ratio-panel/README.md +69 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/aspect-ratio-panel/css/aspect-ratio-panel.css +2 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/aspect-ratio-panel/css/aspect-ratio-panel.min.css +2 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/aspect-ratio-panel/js/aspect-ratio-panel.js +339 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/aspect-ratio-panel/js/aspect-ratio-panel.min.js +2 -0
- data/assets/theme/j1/modules/videojs/{js/plugins/controls/autocaption → plugins/controls/autocaption/js}/autocaption.js +0 -5
- data/assets/theme/j1/modules/videojs/plugins/controls/persist-settings/!examples/index.html +29 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/persist-settings/LICENSE +19 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/persist-settings/README.md +90 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/persist-settings/js/videojs-persist.js +120 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/persist-settings/js/videojs-persist.min.js +2 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/playbackrate-adjuster/!examples/index.html +37 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/playbackrate-adjuster/LICENSE +19 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/playbackrate-adjuster/README.md +61 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/playbackrate-adjuster/js/playbackrate-adjuster.js +94 -0
- data/assets/theme/j1/modules/videojs/plugins/controls/playbackrate-adjuster/js/playbackrate-adjuster.min.js +20 -0
- data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/controls/skipbuttons/README.md +25 -11
- data/assets/theme/j1/modules/videojs/{css/plugins/controls → plugins/controls/zoom/css}/zoom.css +7 -6
- data/assets/theme/j1/modules/videojs/plugins/controls/zoom/css/zoom.min.css +22 -0
- data/assets/theme/j1/modules/videojs/{js/plugins/players/dm → plugins/players/dm/js}/dailymotion.js +1 -1
- data/assets/theme/j1/modules/videojs/plugins/players/vm/!unused/vimeo.0.js +521 -0
- data/assets/theme/j1/modules/videojs/plugins/players/vm/!unused/vimeo.1.js +605 -0
- data/assets/theme/j1/modules/videojs/plugins/players/vm/!unused/vimeo.3.js +643 -0
- data/assets/theme/j1/modules/videojs/plugins/players/vm/!unused/vimeo.4.js +583 -0
- data/assets/theme/j1/modules/videojs/plugins/players/vm/!unused/vimeo.5.js +665 -0
- data/assets/theme/j1/modules/videojs/plugins/players/vm/!unused/vimeo.6.js +642 -0
- data/assets/theme/j1/modules/videojs/plugins/players/vm/!unused/vimeo.7.js +673 -0
- data/assets/theme/j1/modules/videojs/{js/plugins/players/vm/api → plugins/players/vm/api/js}/vimeo.js +1 -1
- data/assets/theme/j1/modules/videojs/{js/plugins/players/vm/api → plugins/players/vm/api/js}/vimeo.min.js +1 -1
- data/assets/theme/j1/modules/videojs/{js/plugins/players/vm → plugins/players/vm/js}/vimeo.js +4 -5
- data/assets/theme/j1/modules/videojs/plugins/players/vm/js/vimeo.min.js +28 -0
- data/assets/theme/j1/modules/videojs/plugins/players/wt/!unused/wistia.0.js +395 -0
- data/assets/theme/j1/modules/videojs/plugins/players/wt/!unused/wistia.1.js +401 -0
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/README.md +5 -5
- data/lib/starter_web/_config.yml +1 -1
- data/lib/starter_web/_data/modules/amplitude_playlists.yml +16 -1
- data/lib/starter_web/_data/modules/defaults/gallery.yml +3 -3
- data/lib/starter_web/_data/modules/gallery.yml +83 -87
- data/lib/starter_web/_data/modules/navigator_menu.yml +3 -3
- data/lib/starter_web/_data/resources.yml +16 -12
- data/lib/starter_web/_data/templates/feed.xml +1 -1
- data/lib/starter_web/_plugins/asciidoctor/videojs-block.rb +50 -30
- data/lib/starter_web/_plugins/asciidoctor/youtube-block.rb +37 -23
- data/lib/starter_web/_plugins/index/lunr.rb +1 -1
- data/lib/starter_web/assets/video/poster/vimeo/fall_2011.jpg +0 -0
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/pages/public/tools/tester/videojs_macro_tester.adoc +282 -0
- data/lib/starter_web/pages/public/tour/video_data.adoc +1 -0
- metadata +221 -106
- data/assets/data/swiper_app.2.html +0 -757
- data/assets/data/swiper_app.4.html +0 -769
- data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.0.css +0 -32
- data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.1.css +0 -31
- data/assets/theme/j1/modules/videojs/css/plugins/controls/zoom.min.css +0 -21
- data/assets/theme/j1/modules/videojs/js/plugins/players/vm/vimeo.min.js +0 -16
- data/assets/theme/j1/modules/videojs/js/plugins/players/wt/api/src/WistiaPlayer.ts +0 -1617
- data/lib/starter_web/assets/video/poster/vimeo/stay_colorful.jpg +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/animation-w.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/customize-w.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/dynamic-w.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/facebook-icon.svg +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/googleplus-icon.svg +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/html5-w.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/linked-in.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/module-w.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/play-button-hover.svg +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/play-button.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/play-button.svg +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/responsive-w.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/thumb-w.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/touch-w.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/twitter-icon.svg +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/twitter.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/video1-w.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/zoom-w.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{css → !v2.7.2/css}/themes/uno/icons/zoom.png +0 -0
- /data/assets/theme/j1/modules/lightGallery/{js → !v2.7.2/js}/plugins/j1/j1-video.js +0 -0
- /data/assets/theme/j1/modules/lightGallery/{js → !v2.7.2/js}/plugins/j1/j1-video.min.js +0 -0
- /data/assets/theme/j1/modules/videoPlayer/dailymotion/js/{!readme → README.md} +0 -0
- /data/assets/theme/j1/modules/videoPlayer/tiktoc/{js/player.min.js → player.min.js} +0 -0
- /data/assets/theme/j1/modules/videoPlayer/vimeo/js/{!readme → README.md} +0 -0
- /data/assets/theme/j1/modules/videoPlayer/wistia/js/{!readme → README.md} +0 -0
- /data/assets/theme/j1/modules/videojs/{css → !v8.12.0/css}/font/video-js-cdn.css +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/controls/autocaption/LICENSE +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/controls/autocaption/README.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/autocaption → plugins/controls/autocaption/js}/autocaption.min.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/hotkeys/examples → plugins/controls/hotkeys/!examples}/example.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/controls/hotkeys/LICENSE.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/controls/hotkeys/README.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/hotkeys → plugins/controls/hotkeys/js}/hotkeys.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/hotkeys → plugins/controls/hotkeys/js}/hotkeys.min.js +0 -0
- /data/assets/theme/j1/modules/videojs/{css/plugins/controls → plugins/controls/skipbuttons/css}/skipbuttons.css +0 -0
- /data/assets/theme/j1/modules/videojs/{css/plugins/controls → plugins/controls/skipbuttons/css}/skipbuttons.min.css +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/skipbuttons → plugins/controls/skipbuttons/js}/skipbuttons.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/skipbuttons → plugins/controls/skipbuttons/js}/skipbuttons.min.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/zoom/examples → plugins/controls/zoom/!examples}/index.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/zoom/examples → plugins/controls/zoom/!examples}/index.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/zoom/examples → plugins/controls/zoom/!examples}/styles.css +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/controls/zoom/LICENSE.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/controls/zoom/README.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/zoom → plugins/controls/zoom/js}/zoom.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/controls/zoom → plugins/controls/zoom/js}/zoom.min.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm/examples → plugins/players/dm/!examples}/dailymotion-controls.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm/examples → plugins/players/dm/!examples}/dailymotion-javascript.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm/examples → plugins/players/dm/!examples}/dailymotion-playlist.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm/examples → plugins/players/dm/!examples}/global-parameters.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm/examples → plugins/players/dm/!examples}/simple.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm/examples → plugins/players/dm/!examples}/switch.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/players/dm/LICENSE +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm/doc → plugins/players/dm}/README.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/players/dm/api/LICENSE +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm/api/doc → plugins/players/dm/api}/README.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm/api → plugins/players/dm/api/js}/dailymotion.sdk.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm/api → plugins/players/dm/api/js}/dailymotion.sdk.min.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/players/dm/icon/scalable/dailymotion.svg +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/dm → plugins/players/dm/js}/dailymotion.min.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/vm/examples → plugins/players/vm/!examples}/index.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/vm/examples → plugins/players/vm/!examples}/player/index.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/players/vm/LICENSE +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/vm/doc → plugins/players/vm}/README.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/vm/api/doc → plugins/players/vm/api}/README.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/players/vm/api/css/embed.player.css +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/players/vm/api/css/embed.player.uno.css +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/players/vm/api/css/player.css +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/wt/doc → plugins/players/wt}/README.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/wt/api/doc/Readme.txt → plugins/players/wt/api/README.md} +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/wt/api → plugins/players/wt/api/js}/wistia.min.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/wt → plugins/players/wt/js}/wistia.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/wt → plugins/players/wt/js}/wistia.min.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/examples → plugins/players/yt/!examples}/global-parameters.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/examples → plugins/players/yt/!examples}/simple.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/examples → plugins/players/yt/!examples}/switch.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/examples → plugins/players/yt/!examples}/youtube-controls.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/examples → plugins/players/yt/!examples}/youtube-javascript.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/examples → plugins/players/yt/!examples}/youtube-list.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/examples → plugins/players/yt/!examples}/youtube-playlist.html +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/v3.0.0 → plugins/players/yt/!v3.0.0}/youtube.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/v3.0.0 → plugins/players/yt/!v3.0.0}/youtube.min.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins → plugins}/players/yt/LICENSE +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/doc → plugins/players/yt}/README.md +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt/api → plugins/players/yt/api/js}/youtube.min.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt → plugins/players/yt/js}/youtube.js +0 -0
- /data/assets/theme/j1/modules/videojs/{js/plugins/players/yt → plugins/players/yt/js}/youtube.min.js +0 -0
@@ -6,7 +6,7 @@ regenerate: true
|
|
6
6
|
|
7
7
|
{% comment %}
|
8
8
|
# -----------------------------------------------------------------------------
|
9
|
-
# ~/assets/theme/j1/modules/amplitudejs/js/plugins/tech/ytp.
|
9
|
+
# ~/assets/theme/j1/modules/amplitudejs/js/plugins/tech/ytp.35.js
|
10
10
|
# AmplitudeJS V5 Tech for J1 Template
|
11
11
|
#
|
12
12
|
# Product/Info:
|
@@ -60,7 +60,7 @@ regenerate: true
|
|
60
60
|
|
61
61
|
/*
|
62
62
|
# -----------------------------------------------------------------------------
|
63
|
-
# ~/assets/theme/j1/modules/amplitudejs/js/plugins/tech/ytp.
|
63
|
+
# ~/assets/theme/j1/modules/amplitudejs/js/plugins/tech/ytp.35.js
|
64
64
|
# AmplitudeJS V5 Plugin|Tech for J1 Template
|
65
65
|
#
|
66
66
|
# Product/Info:
|
@@ -74,6 +74,8 @@ regenerate: true
|
|
74
74
|
*/
|
75
75
|
"use strict";
|
76
76
|
|
77
|
+
const isDev = (j1.env === "development" || j1.env === "dev") ? true : false;
|
78
|
+
|
77
79
|
// date|time monitoring
|
78
80
|
//----------------------------------------------------------------------------
|
79
81
|
var startTime;
|
@@ -130,6 +132,7 @@ regenerate: true
|
|
130
132
|
// ---------------------------------------------------------------------------
|
131
133
|
var firstScriptTag;
|
132
134
|
var ytPlayer;
|
135
|
+
var ytPlayerErrorTest = false;
|
133
136
|
var ytPlayerReady = false;
|
134
137
|
var ytApiReady = false;
|
135
138
|
var logger = log4javascript.getLogger('j1.adapter.amplitude.tech');
|
@@ -176,10 +179,7 @@ regenerate: true
|
|
176
179
|
var playerType;
|
177
180
|
var playListTitle;
|
178
181
|
var playListName;
|
179
|
-
var amplitudePlayerState;
|
180
|
-
|
181
|
-
var ytPlayer;
|
182
|
-
|
182
|
+
var amplitudePlayerState;
|
183
183
|
|
184
184
|
var songs;
|
185
185
|
var songMetaData;
|
@@ -242,10 +242,12 @@ regenerate: true
|
|
242
242
|
// TODO:
|
243
243
|
// ---------------------------------------------------------------------------
|
244
244
|
function processOnVideoEnd(player) {
|
245
|
-
var currentVideoTime,
|
246
|
-
playlist, playerID, songIndex, songs,
|
245
|
+
var currentVideoTime, activeSong,
|
246
|
+
playlist, playerID, songIndex, songs, playlistRepeat,
|
247
247
|
trackID, activeVideoID, previousVideoID, isVideoChanged;
|
248
248
|
|
249
|
+
activeSong = getActiveSong();
|
250
|
+
|
249
251
|
playlist = activeVideoElement.playlist;
|
250
252
|
playerID = playlist + '_large';
|
251
253
|
currentVideoTime = player.getCurrentTime();
|
@@ -254,6 +256,7 @@ regenerate: true
|
|
254
256
|
songIndex = activeVideoElement.index;
|
255
257
|
trackID = songIndex + 1;
|
256
258
|
songs = activeVideoElement.songs;
|
259
|
+
playlistRepeat = (songs[songIndex].repeat === 'true') ? true : false;
|
257
260
|
|
258
261
|
// check if video is changed (to detect multiple videoIDs in playlist)
|
259
262
|
if (songIndex > 0) {
|
@@ -271,13 +274,26 @@ regenerate: true
|
|
271
274
|
});
|
272
275
|
} // END if playerFadeAudio
|
273
276
|
|
274
|
-
// if (!activeVideoElement.audio_single) {
|
275
277
|
if (isVideoChanged) {
|
276
|
-
|
277
|
-
|
278
|
-
|
278
|
+
if (songIndex === songs.length - 1) {
|
279
|
+
// LAST index reached, continue on FIRST index
|
280
|
+
songIndex = 0;
|
281
|
+
|
282
|
+
logger.debug(`LOAD first VIDEO on processOnVideoEnd at trackID|playlist: ${trackID}|${playlist}`);
|
283
|
+
loadVideo(playlist, songIndex);
|
284
|
+
|
285
|
+
// check if REPEAT is enabled on PLAYLIST
|
286
|
+
if (!playlistRepeat) {
|
287
|
+
// set FIRST song (video) paused if playing is continued
|
288
|
+
ytPlayer.pauseVideo();
|
289
|
+
}
|
290
|
+
} else {
|
291
|
+
// load next video
|
292
|
+
logger.debug(`LOAD next VIDEO on processOnVideoEnd at trackID|playlist: ${trackID}|${playlist}`);
|
293
|
+
loadVideo(playlist, songIndex + 1);
|
294
|
+
}
|
279
295
|
} else {
|
280
|
-
// skip loading next video if a
|
296
|
+
// skip loading next video if a SINGLE video is used for playlist
|
281
297
|
logger.debug(`LOAD next TRACK in video on processOnVideoEnd at trackID|playlist: ${trackID}|${playlist}`);
|
282
298
|
}
|
283
299
|
|
@@ -290,9 +306,9 @@ regenerate: true
|
|
290
306
|
// ---------------------------------------------------------------------------
|
291
307
|
function doNothingOnStateChange(state) {
|
292
308
|
if (state > 0) {
|
293
|
-
logger.warn(`DO NOTHING on StateChange for state: ${YT_PLAYER_STATE_NAMES[state]}`);
|
309
|
+
isDev && logger.warn(`DO NOTHING on StateChange for state: ${YT_PLAYER_STATE_NAMES[state]}`);
|
294
310
|
} else {
|
295
|
-
logger.warn(`DO NOTHING on StateChange for state: ${YT_PLAYER_STATE_NAMES[6]}`);
|
311
|
+
isDev && logger.warn(`DO NOTHING on StateChange for state: ${YT_PLAYER_STATE_NAMES[6]}`);
|
296
312
|
}
|
297
313
|
} // END doNothingOnStateChange
|
298
314
|
|
@@ -302,37 +318,45 @@ regenerate: true
|
|
302
318
|
// wrapper for processing players on state PLAYING
|
303
319
|
// ---------------------------------------------------------------------------
|
304
320
|
function processOnStateChangePlaying(event, playlist, songIndex) {
|
305
|
-
var activeSong, activePlaylist,
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
321
|
+
var activeSong, activePlaylist,
|
322
|
+
playerID, videoID, firstVideo,
|
323
|
+
ytPlayer, songs, songIndex, previousSongIndex,
|
324
|
+
currentPlayer, previousPlayer,
|
325
|
+
trackID, isSongIndexChanged;
|
310
326
|
|
311
|
-
|
312
|
-
|
327
|
+
ytPlayer = event.target;
|
328
|
+
firstVideo = (songIndex > 0) ? false : true;
|
313
329
|
|
314
|
-
// get active song settings (manually)
|
315
330
|
activeSong = getActiveSong();
|
316
|
-
|
317
331
|
activePlaylist = playlist;
|
318
332
|
playerID = activeSong.playerID;
|
319
333
|
videoID = activeSong.videoID;
|
320
334
|
songs = activeSong.songs;
|
321
|
-
|
335
|
+
songIndex = activeSong.index;
|
322
336
|
currentPlayer = activeSong.player;
|
323
337
|
previousPlayer = j1.adapter.amplitude.data.ytPlayers[playerID].player
|
324
338
|
trackID = songIndex + 1;
|
325
339
|
|
326
|
-
logger.debug(`PLAY audio on
|
327
|
-
// logger.debug(`PLAY video on StateChange (playing) at playlist|trackID: ${playList}|${trackID}`);
|
340
|
+
logger.debug(`PLAY audio on YT Player at playlist|trackID: ${activePlaylist}|${trackID}`);
|
328
341
|
|
329
342
|
// save YT player GLOBAL data for later use (e.g. events)
|
330
343
|
j1.adapter.amplitude.data.activePlayer = 'ytp';
|
331
344
|
j1.adapter.amplitude.data.ytpGlobals['activeIndex'] = songIndex;
|
332
345
|
j1.adapter.amplitude.data.ytpGlobals['videoID'] = videoID;
|
333
346
|
|
347
|
+
|
334
348
|
// save YT player data for later use (e.g. events)
|
335
|
-
|
349
|
+
// -------------------------------------------------------------------------
|
350
|
+
j1.modules.amplitudejs.data.activePlayer = 'ytp';
|
351
|
+
j1.modules.amplitudejs.data.activeIndex = songIndex;
|
352
|
+
j1.modules.amplitudejs.data.activePlaylist = playlist;
|
353
|
+
j1.modules.amplitudejs.data.ytp.activePlayer = ytPlayer;
|
354
|
+
j1.modules.amplitudejs.data.ytp.activeIndex = songIndex;
|
355
|
+
j1.modules.amplitudejs.data.ytp.activePlaylist = playlist;
|
356
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].activeIndex = songIndex;
|
357
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].player = ytPlayer;
|
358
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].videoID = videoID;
|
359
|
+
|
336
360
|
|
337
361
|
// update time container for the ACTIVE video
|
338
362
|
// -----------------------------------------------------------------
|
@@ -435,16 +459,44 @@ regenerate: true
|
|
435
459
|
//
|
436
460
|
// ---------------------------------------------------------------------------
|
437
461
|
function processOnStateChangeEnded(event, playlist, songIndex) {
|
438
|
-
var videoID
|
439
|
-
var trackID
|
462
|
+
var videoID = event.target.options.videoId;
|
463
|
+
var trackID = songIndex + 1;
|
464
|
+
var playerID = playlist + '_large';
|
465
|
+
var songs = j1.adapter.amplitude.data.ytPlayers[playerID].songs;
|
466
|
+
var songMetaData = songs[songIndex];
|
467
|
+
var playlistRepeat = (songMetaData.repeat === 'true') ? true : false;
|
468
|
+
|
469
|
+
if (songIndex === songs.length - 1) {
|
470
|
+
// LAST index reached, continue on FIRST index
|
471
|
+
songIndex = 0;
|
472
|
+
|
473
|
+
// save player current time data for later use
|
474
|
+
// ytPlayerCurrentTime = ytPlayer.getCurrentTime();
|
440
475
|
|
441
|
-
|
442
|
-
|
476
|
+
// save YT player data for later use (e.g. events)
|
477
|
+
// ---------------------------------------------------------------------
|
478
|
+
j1.modules.amplitudejs.data.ytp.previousIndex = songIndex;
|
479
|
+
|
480
|
+
logger.debug(`LOAD first VIDEO on processOnStateChangeEnded at trackID|playlist: ${trackID}|${playlist}`);
|
481
|
+
loadVideo(playlist, songIndex);
|
482
|
+
|
483
|
+
// check if REPEAT is enabled on PLAYLIST
|
484
|
+
if (!playlistRepeat) {
|
485
|
+
// set FIRST song (video) paused if playing is continued
|
486
|
+
ytPlayer.pauseVideo();
|
487
|
+
}
|
488
|
+
} else {
|
489
|
+
// save player current time data for later use
|
490
|
+
// ytPlayerCurrentTime = ytPlayer.getCurrentTime();
|
443
491
|
|
444
|
-
|
492
|
+
// save YT player data for later use (e.g. events)
|
493
|
+
// ---------------------------------------------------------------------
|
494
|
+
j1.modules.amplitudejs.data.ytp.previousIndex = songIndex;
|
445
495
|
|
446
|
-
|
447
|
-
|
496
|
+
// load next video
|
497
|
+
logger.debug(`LOAD next VIDEO on processOnStateChangeEnded at trackID|playlist: ${trackID}|${playlist}`);
|
498
|
+
loadVideo(playlist, songIndex + 1);
|
499
|
+
}
|
448
500
|
|
449
501
|
} // END processOnStateChangeEnded
|
450
502
|
|
@@ -547,7 +599,7 @@ regenerate: true
|
|
547
599
|
// transition will be
|
548
600
|
const iterationSteps = {
|
549
601
|
'default': 150,
|
550
|
-
'slow':
|
602
|
+
'slow': 250,
|
551
603
|
'slower': 350,
|
552
604
|
'slowest': 500
|
553
605
|
};
|
@@ -558,7 +610,7 @@ regenerate: true
|
|
558
610
|
currentStep = 1;
|
559
611
|
|
560
612
|
if (volumeSlider === undefined || volumeSlider === null) {
|
561
|
-
logger.warn('no volume slider found at playerID: ' + settings.playerID);
|
613
|
+
isDev && logger.warn('no volume slider found at playerID: ' + settings.playerID);
|
562
614
|
return;
|
563
615
|
}
|
564
616
|
|
@@ -594,7 +646,7 @@ regenerate: true
|
|
594
646
|
// number of iteration steps to DECREASE the volume
|
595
647
|
const iterationSteps = {
|
596
648
|
'default': 150,
|
597
|
-
'slow':
|
649
|
+
'slow': 250,
|
598
650
|
'slower': 350,
|
599
651
|
'slowest': 500
|
600
652
|
};
|
@@ -606,7 +658,7 @@ regenerate: true
|
|
606
658
|
currentStep = 0;
|
607
659
|
|
608
660
|
if (volumeSlider === undefined || volumeSlider === null) {
|
609
|
-
logger.warn('no volume slider found at playerID: ' + settings.playerID);
|
661
|
+
isDev && logger.warn('no volume slider found at playerID: ' + settings.playerID);
|
610
662
|
return;
|
611
663
|
}
|
612
664
|
|
@@ -642,92 +694,47 @@ regenerate: true
|
|
642
694
|
}
|
643
695
|
|
644
696
|
// ---------------------------------------------------------------------------
|
645
|
-
//
|
697
|
+
// loadVideo(list, index)
|
646
698
|
//
|
647
699
|
// load next video in playlist
|
648
700
|
// ---------------------------------------------------------------------------
|
649
|
-
function
|
650
|
-
var
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
checkActiveVideoElementYTP();
|
701
|
+
function loadVideo(currentPlaylist, currentIndex) {
|
702
|
+
var activeSong, trackID, songName,
|
703
|
+
playlist, playerID, playerIFrame,
|
704
|
+
songs, songIndex, songMetaData, songURL,
|
705
|
+
ytpVideoID, firstVideo, playlistRepeat;
|
655
706
|
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
trackID = songIndex + 1;
|
665
|
-
|
666
|
-
songIndex++;
|
667
|
-
|
668
|
-
ytpSongIndex = songIndex;
|
707
|
+
activeSong = getActiveSong();
|
708
|
+
playlist = currentPlaylist;
|
709
|
+
playerID = playlist + '_large';
|
710
|
+
songs = activeSong.songs;
|
711
|
+
playlistRepeat = (songs[currentIndex].repeat === 'true') ? true : false;
|
712
|
+
ytPlayer = activeSong.player;
|
713
|
+
songIndex = currentIndex;
|
714
|
+
trackID = songIndex + 1;
|
669
715
|
|
670
|
-
// play
|
716
|
+
// switch|play to songIndex in playlist
|
671
717
|
if (songIndex <= songs.length - 1) {
|
672
718
|
songMetaData = songs[songIndex];
|
673
719
|
songURL = songMetaData.url;
|
674
|
-
|
720
|
+
ytpVideoID = songURL.split('=')[1];
|
675
721
|
|
676
722
|
// save YT player data for later use (e.g. events)
|
677
723
|
j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex = songIndex;
|
678
|
-
j1.adapter.amplitude.data.ytPlayers[playerID].videoID =
|
679
|
-
|
680
|
-
logger.debug(`SWITCH video on loadNextVideo at trackID|VideoID: ${trackID}|${ytVideoID}`);
|
681
|
-
ytPlayer.loadVideoById(ytVideoID);
|
682
|
-
|
683
|
-
// delay after switch video
|
684
|
-
if (muteAfterVideoSwitchInterval) {
|
685
|
-
ytPlayer.mute();
|
686
|
-
setTimeout(() => {
|
687
|
-
ytPlayer.unMute();
|
688
|
-
}, muteAfterVideoSwitchInterval);
|
689
|
-
}
|
690
|
-
|
691
|
-
// update global song index
|
692
|
-
ytpSongIndex = songIndex;
|
693
|
-
|
694
|
-
// load the song cover image
|
695
|
-
loadCoverImage(songMetaData);
|
696
|
-
|
697
|
-
// update meta data
|
698
|
-
// ytpUpdatMetaContainers(songMetaData);
|
699
|
-
|
700
|
-
// set song (video) active at index in playlist
|
701
|
-
setSongActive(playlist, songIndex);
|
702
|
-
|
703
|
-
// reset progress bar settings
|
704
|
-
resetProgressBarYTP();
|
705
|
-
|
706
|
-
// scroll song active at index in player
|
707
|
-
if (playerAutoScrollSongElement) {
|
708
|
-
scrollToActiveElement(playlist);
|
709
|
-
}
|
710
|
-
} else {
|
711
|
-
// continue on FIRST track (video) in playlist
|
712
|
-
//
|
713
|
-
songIndex = 0;
|
714
|
-
var songMetaData = songs[songIndex];
|
715
|
-
var songURL = songMetaData.url;
|
716
|
-
var ytVideoID = songURL.split('=')[1];
|
717
|
-
|
718
|
-
// update global song index
|
719
|
-
ytpSongIndex = songIndex;
|
724
|
+
j1.adapter.amplitude.data.ytPlayers[playerID].videoID = ytpVideoID;
|
720
725
|
|
721
|
-
// load next video (paused)
|
722
|
-
// -----------------------------------------------------------------------
|
723
726
|
|
724
727
|
// save YT player data for later use (e.g. events)
|
725
|
-
|
726
|
-
j1.
|
728
|
+
// -----------------------------------------------------------------------
|
729
|
+
j1.modules.amplitudejs.data.ytp.previousSongIndex = songIndex;
|
730
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].activeIndex = songIndex;
|
731
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].previousIndex = songIndex - 1;
|
732
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].videoID = ytpVideoID;
|
727
733
|
|
728
|
-
logger.debug(`SWITCH video on loadNextVideo at trackID|VideoID: ${trackID}|${ytVideoID}`);
|
729
|
-
ytPlayer.loadVideoById(ytVideoID);
|
730
734
|
|
735
|
+
logger.debug(`SWITCH video on loadNextVideo at trackID|VideoID: ${trackID}|${ytpVideoID}`);
|
736
|
+
ytPlayer.loadVideoById(ytpVideoID);
|
737
|
+
|
731
738
|
// delay after switch video
|
732
739
|
if (muteAfterVideoSwitchInterval) {
|
733
740
|
ytPlayer.mute();
|
@@ -736,15 +743,17 @@ regenerate: true
|
|
736
743
|
}, muteAfterVideoSwitchInterval);
|
737
744
|
}
|
738
745
|
|
746
|
+
// save YT player data for later use (e.g. events)
|
747
|
+
// -----------------------------------------------------------------------
|
748
|
+
ytpSongIndex = songIndex;
|
749
|
+
j1.modules.amplitudejs.data.ytp.songIndex = songIndex;
|
750
|
+
|
739
751
|
// load the song cover image
|
740
752
|
loadCoverImage(songMetaData);
|
741
|
-
|
753
|
+
|
742
754
|
// update meta data
|
743
755
|
// ytpUpdatMetaContainers(songMetaData);
|
744
756
|
|
745
|
-
var playPauseButtonClass = `large-player-play-pause-${ytPlayerID}`;
|
746
|
-
togglePlayPauseButton(playPauseButtonClass);
|
747
|
-
|
748
757
|
// set song (video) active at index in playlist
|
749
758
|
setSongActive(playlist, songIndex);
|
750
759
|
|
@@ -756,12 +765,9 @@ regenerate: true
|
|
756
765
|
scrollToActiveElement(playlist);
|
757
766
|
}
|
758
767
|
|
759
|
-
|
760
|
-
// set FIRST song (video) paused
|
761
|
-
ytPlayer.pauseVideo();
|
762
|
-
}
|
768
|
+
} // END if songIndex
|
763
769
|
|
764
|
-
} // END
|
770
|
+
} // END loadNextVideo
|
765
771
|
|
766
772
|
// ---------------------------------------------------------------------------
|
767
773
|
// initUiEventsForAJS
|
@@ -833,7 +839,6 @@ regenerate: true
|
|
833
839
|
|
834
840
|
// load individual player settings (to manage multiple players in page)
|
835
841
|
//
|
836
|
-
var ytpVideoID = activeSongMetadata.url.split('=')[1];
|
837
842
|
var ytpAutoPlay = ('{{player.yt_player.autoplay}}'.length > 0) ? '{{player.yt_player.autoplay}}' : '{{amplitude_defaults.player.yt_player.autoplay}}';
|
838
843
|
var ytpLoop = ('{{player.yt_player.loop}}'.length > 0) ? '{{player.yt_player.loop}}' : '{{amplitude_defaults.player.yt_player.loop}}';
|
839
844
|
var ytpHeight = ('{{player.yt_player.height}}'.length > 0) ? '{{player.yt_player.height}}' : '{{amplitude_defaults.player.yt_player.height}}';
|
@@ -842,17 +847,17 @@ regenerate: true
|
|
842
847
|
logger.info('AJS YouTube iFrame API: ready');
|
843
848
|
logger.info('configure player on ID: #{{player.id}}');
|
844
849
|
|
845
|
-
// create a hidden
|
850
|
+
// create a (hidden) ytp iframe container
|
846
851
|
//
|
847
852
|
ytpContainer = document.getElementById('{{player.id}}_video');
|
848
853
|
ytpContainer.innerHTML = '<div id="iframe_{{player.id}}"></div>';
|
849
854
|
ytpContainer.style.cssText = 'display:none';
|
850
855
|
|
856
|
+
var ytpVideoID = (ytPlayerErrorTest) ? 'invalidVideoID' : activeSongMetadata.url.split('=')[1];
|
851
857
|
ytPlayer = new YT.Player('iframe_{{player.id}}', {
|
852
858
|
height: ytpHeight,
|
853
859
|
width: ytpWidth,
|
854
860
|
videoId: ytpVideoID,
|
855
|
-
// videoId: 'bloedsinn',
|
856
861
|
playerVars: {
|
857
862
|
autoplay: ytpAutoPlay,
|
858
863
|
loop: ytpLoop
|
@@ -885,7 +890,13 @@ regenerate: true
|
|
885
890
|
|
886
891
|
// save YT player GLOBAL data for later use (e.g. events)
|
887
892
|
j1.adapter.amplitude.data.ytpGlobals['ytApiReady'] = ytApiReady;
|
888
|
-
|
893
|
+
|
894
|
+
|
895
|
+
// save amplitudejs data for later use (e.g. events)
|
896
|
+
// -------------------------------------------------------------------
|
897
|
+
j1.modules.amplitudejs.data.ytp.apiReady = ytApiReady;
|
898
|
+
|
899
|
+
|
889
900
|
// reset current player
|
890
901
|
playerExistsInPage = false;
|
891
902
|
|
@@ -905,6 +916,12 @@ regenerate: true
|
|
905
916
|
// save YT player GLOBAL data for later use (e.g. events)
|
906
917
|
j1.adapter.amplitude.data.ytpGlobals['ytApiError'] = eventData;
|
907
918
|
|
919
|
+
|
920
|
+
// save amplitudejs data for later use (e.g. events)
|
921
|
+
// ------------------------------------------------------------------
|
922
|
+
j1.modules.amplitudejs.data.ytp.apiError = eventData;
|
923
|
+
|
924
|
+
|
908
925
|
}
|
909
926
|
|
910
927
|
// AJS YouTube Player initialization fired by the YT API
|
@@ -918,7 +935,7 @@ regenerate: true
|
|
918
935
|
ytPlayerReady = true;
|
919
936
|
playerVolumePreset = parseInt({{player.volume_slider.preset_value}});
|
920
937
|
|
921
|
-
|
938
|
+
logger.debug(`FOUND video ready at ID: {{player.id}}`);
|
922
939
|
|
923
940
|
// set video playback quality to a minimum
|
924
941
|
ytPlayer.setPlaybackQuality('small');
|
@@ -943,12 +960,20 @@ regenerate: true
|
|
943
960
|
}
|
944
961
|
}
|
945
962
|
|
946
|
-
logger.info('
|
963
|
+
logger.info('yt player on ID {{player.id}}: ready');
|
947
964
|
|
948
965
|
// save YT player GLOBAL data for later use (e.g. events)
|
949
966
|
j1.adapter.amplitude.data.ytpGlobals['ytPlayerReady'] = ytPlayerReady;
|
950
967
|
j1.adapter.amplitude.data.ytpGlobals['ytApiError'] = 0;
|
951
968
|
|
969
|
+
|
970
|
+
// save amplitudejs data for later use (e.g. events)
|
971
|
+
// -------------------------------------------------------------------
|
972
|
+
j1.modules.amplitudejs.data.ytp.apiError = 0;
|
973
|
+
j1.modules.amplitudejs.data.ytp.players.{{player.id}} = {};
|
974
|
+
j1.modules.amplitudejs.data.ytp.players.{{player.id}}.playerReady = ytPlayerReady;
|
975
|
+
|
976
|
+
|
952
977
|
// get duration hours (if configured)
|
953
978
|
if ({{player.display_hours}} ) {
|
954
979
|
hours = ytpGetDurationHours(ytPlayer);
|
@@ -984,7 +1009,7 @@ regenerate: true
|
|
984
1009
|
if (playerCounter > 0) {
|
985
1010
|
logger.info('Found players of type video (YTP) in page: ' + playerCounter);
|
986
1011
|
} else {
|
987
|
-
logger.warn('Found NO players of type video (YTP) in page');
|
1012
|
+
isDev && logger.warn('Found NO players of type video (YTP) in page');
|
988
1013
|
}
|
989
1014
|
|
990
1015
|
// update activeVideoElement data structure for the ACTIVE video
|
@@ -1034,6 +1059,19 @@ regenerate: true
|
|
1034
1059
|
j1.adapter.amplitude.data.ytPlayers.{{player.id}}.player = ytPlayer;
|
1035
1060
|
j1.adapter.amplitude.data.ytPlayers.{{player.id}}.activeIndex = songIndex;
|
1036
1061
|
|
1062
|
+
|
1063
|
+
// save amplitudejs data for later use (e.g. events)
|
1064
|
+
// -------------------------------------------------------------------
|
1065
|
+
j1.modules.amplitudejs.data.activePlayer = 'ytp';
|
1066
|
+
j1.modules.amplitudejs.data.activeIndex = songIndex;
|
1067
|
+
j1.modules.amplitudejs.data.activePlaylist = playlist;
|
1068
|
+
j1.modules.amplitudejs.data.ytp.activePlayer = ytPlayer;
|
1069
|
+
j1.modules.amplitudejs.data.ytp.activeIndex = songIndex;
|
1070
|
+
j1.modules.amplitudejs.data.ytp.activePlaylist = playlist;
|
1071
|
+
j1.modules.amplitudejs.data.ytp.players.{{player.id}}.player = ytPlayer;
|
1072
|
+
j1.modules.amplitudejs.data.ytp.players.{{player.id}}.activeIndex = songIndex;
|
1073
|
+
|
1074
|
+
|
1037
1075
|
// reset time container|progressbar for the ACTIVE song (video)
|
1038
1076
|
// -------------------------------------------------------------------
|
1039
1077
|
resetCurrentTimeContainerYTP(ytPlayer, playlist);
|
@@ -1083,6 +1121,13 @@ regenerate: true
|
|
1083
1121
|
// ---------------------------------------------------------------------------
|
1084
1122
|
initYtAPI();
|
1085
1123
|
|
1124
|
+
// save YT player data for later use (e.g. events)
|
1125
|
+
// ---------------------------------------------------------------------
|
1126
|
+
var url = '//youtube.com/iframe_api'
|
1127
|
+
if (document.querySelectorAll(`script[src="${url}"]`).length > 0) {
|
1128
|
+
j1.modules.amplitudejs.data.ytp.plugin = 'loaded';
|
1129
|
+
}
|
1130
|
+
|
1086
1131
|
// ---------------------------------------------------------------------------
|
1087
1132
|
// initUiEventsForAJS
|
1088
1133
|
//
|
@@ -1214,7 +1259,8 @@ regenerate: true
|
|
1214
1259
|
|
1215
1260
|
// toggle PlayPause buttons playing => puased
|
1216
1261
|
// ---------------------------------------------------------------------
|
1217
|
-
|
1262
|
+
var isValidPlayerState = /playing|paused/.test(ytPlayerState);
|
1263
|
+
if (isValidPlayerState) {
|
1218
1264
|
logger.debug(`STOP player at ytpStopParallelActivePlayers for id: ${ytPlayerID}`);
|
1219
1265
|
player.stopVideo();
|
1220
1266
|
var ytpButtonPlayerPlayPause = document.getElementsByClassName("large-player-play-pause-" + ytPlayerID);
|
@@ -1447,25 +1493,13 @@ regenerate: true
|
|
1447
1493
|
function updateDurationTimeContainerYTP(player, playlist) {
|
1448
1494
|
var hours, minutes, seconds;
|
1449
1495
|
var durationHours, durationMinutes, durationSeconds;
|
1450
|
-
var
|
1451
|
-
|
1452
|
-
// update active song settings (manually)
|
1453
|
-
checkActiveVideoElementYTP();
|
1454
|
-
|
1455
|
-
// get active song settings (manually)
|
1456
|
-
activeSongSettings = getActiveSong();
|
1457
|
-
if (!activeSongSettings) {
|
1458
|
-
return false;
|
1459
|
-
}
|
1460
|
-
|
1461
|
-
ytPlayer = activeSongSettings.player;
|
1462
|
-
activePlaylist = activeSongSettings.playlist;
|
1496
|
+
var activePlaylist;
|
1463
1497
|
|
1464
1498
|
// get current hours|minutes|seconds
|
1465
1499
|
// -------------------------------------------------------------------------
|
1466
|
-
hours = ytpGetDurationHours(
|
1467
|
-
minutes = ytpGetDurationMinutes(
|
1468
|
-
seconds = ytpGetDurationSeconds(
|
1500
|
+
hours = ytpGetDurationHours(player);
|
1501
|
+
minutes = ytpGetDurationMinutes(player);
|
1502
|
+
seconds = ytpGetDurationSeconds(player);
|
1469
1503
|
|
1470
1504
|
// update current duration|hours
|
1471
1505
|
// -------------------------------------------------------------------------
|
@@ -1473,7 +1507,7 @@ regenerate: true
|
|
1473
1507
|
if (durationHours.length && !isNaN(hours)) {
|
1474
1508
|
for (var i=0; i<durationHours.length; i++) {
|
1475
1509
|
var currentPlaylist = durationHours[i].dataset.amplitudePlaylist;
|
1476
|
-
if (currentPlaylist ===
|
1510
|
+
if (currentPlaylist === playlist) {
|
1477
1511
|
durationHours[i].innerHTML = hours;
|
1478
1512
|
}
|
1479
1513
|
}
|
@@ -1485,7 +1519,7 @@ regenerate: true
|
|
1485
1519
|
if (durationMinutes.length && !isNaN(minutes)) {
|
1486
1520
|
for (var i=0; i<durationMinutes.length; i++) {
|
1487
1521
|
var currentPlaylist = durationMinutes[i].dataset.amplitudePlaylist;
|
1488
|
-
if (currentPlaylist ===
|
1522
|
+
if (currentPlaylist === playlist) {
|
1489
1523
|
durationMinutes[i].innerHTML = minutes;
|
1490
1524
|
}
|
1491
1525
|
}
|
@@ -1497,7 +1531,7 @@ regenerate: true
|
|
1497
1531
|
if (durationSeconds.length && !isNaN(seconds)) {
|
1498
1532
|
for (var i=0; i<durationSeconds.length; i++) {
|
1499
1533
|
var currentPlaylist = durationSeconds[i].dataset.amplitudePlaylist;
|
1500
|
-
if (currentPlaylist ===
|
1534
|
+
if (currentPlaylist === playlist) {
|
1501
1535
|
durationSeconds[i].innerHTML = seconds;
|
1502
1536
|
}
|
1503
1537
|
}
|
@@ -1749,10 +1783,13 @@ regenerate: true
|
|
1749
1783
|
// Returns the duration of the video
|
1750
1784
|
// ---------------------------------------------------------------------------
|
1751
1785
|
function ytpGetDuration(player) {
|
1752
|
-
var
|
1786
|
+
var duration;
|
1753
1787
|
|
1754
|
-
playerState
|
1755
|
-
|
1788
|
+
var playerState = player.getPlayerState();
|
1789
|
+
var ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1790
|
+
|
1791
|
+
var isValidPlayerState = /playing|paused|buffering|cued/.test(ytPlayerState);
|
1792
|
+
if (isValidPlayerState) {
|
1756
1793
|
duration = player.getDuration();
|
1757
1794
|
|
1758
1795
|
return duration;
|
@@ -1767,18 +1804,20 @@ regenerate: true
|
|
1767
1804
|
// Returns the current time of the video played
|
1768
1805
|
// ---------------------------------------------------------------------------
|
1769
1806
|
function ytpGetCurrentTime(player) {
|
1770
|
-
var currentTime
|
1807
|
+
var currentTime;
|
1808
|
+
|
1809
|
+
var playerState = player.getPlayerState();
|
1810
|
+
var ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1771
1811
|
|
1772
|
-
|
1773
|
-
|
1774
|
-
if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED) {
|
1812
|
+
var isValidPlayerState = /playing|paused|cued|unstarted/.test(ytPlayerState);
|
1813
|
+
if (isValidPlayerState) {
|
1775
1814
|
currentTime = player.getCurrentTime();
|
1776
1815
|
|
1777
1816
|
return currentTime;
|
1778
|
-
|
1817
|
+
} else {
|
1779
1818
|
return 0;
|
1780
|
-
}
|
1781
1819
|
}
|
1820
|
+
|
1782
1821
|
} // END ytpGetCurrentTime
|
1783
1822
|
|
1784
1823
|
// ---------------------------------------------------------------------------
|
@@ -1787,21 +1826,23 @@ regenerate: true
|
|
1787
1826
|
// Returns the duration hours of the video
|
1788
1827
|
// ---------------------------------------------------------------------------
|
1789
1828
|
function ytpGetDurationHours(player) {
|
1790
|
-
var
|
1829
|
+
var duration, hours, d, h;
|
1830
|
+
|
1831
|
+
var playerState = player.getPlayerState();
|
1832
|
+
var ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1791
1833
|
|
1792
|
-
|
1793
|
-
|
1794
|
-
if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED ) {
|
1834
|
+
var isValidPlayerState = /playing|paused|cued/.test(ytPlayerState);
|
1835
|
+
if (isValidPlayerState) {
|
1795
1836
|
duration = ytpGetDuration(player);
|
1796
1837
|
d = Number(duration);
|
1797
1838
|
h = Math.floor(d / 3600);
|
1798
1839
|
hours = h.toString().padStart(2, '0');
|
1799
1840
|
|
1800
1841
|
return hours;
|
1801
|
-
|
1842
|
+
} else {
|
1802
1843
|
return '00';
|
1803
|
-
}
|
1804
1844
|
}
|
1845
|
+
|
1805
1846
|
} // END ytpGetDurationHours
|
1806
1847
|
|
1807
1848
|
// ---------------------------------------------------------------------------
|
@@ -1810,21 +1851,23 @@ regenerate: true
|
|
1810
1851
|
// Returns the duration minutes of the video
|
1811
1852
|
// ---------------------------------------------------------------------------
|
1812
1853
|
function ytpGetDurationMinutes(player) {
|
1813
|
-
var
|
1854
|
+
var duration, minutes, d, m;
|
1814
1855
|
|
1815
|
-
|
1816
|
-
|
1817
|
-
|
1856
|
+
var playerState = player.getPlayerState();
|
1857
|
+
var ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1858
|
+
|
1859
|
+
var isValidPlayerState = /playing|paused|cued/.test(ytPlayerState);
|
1860
|
+
if (isValidPlayerState) {
|
1818
1861
|
duration = ytpGetDuration(player);
|
1819
1862
|
d = Number(duration);
|
1820
1863
|
m = Math.floor(d % 3600 / 60);
|
1821
1864
|
minutes = m.toString().padStart(2, '0');
|
1822
1865
|
|
1823
1866
|
return minutes;
|
1824
|
-
|
1867
|
+
} else {
|
1825
1868
|
return '00';
|
1826
|
-
}
|
1827
1869
|
}
|
1870
|
+
|
1828
1871
|
} // END ytpGetDurationMinutes
|
1829
1872
|
|
1830
1873
|
// ---------------------------------------------------------------------------
|
@@ -1833,21 +1876,23 @@ regenerate: true
|
|
1833
1876
|
// Returns the duration seconds of the video
|
1834
1877
|
// ---------------------------------------------------------------------------
|
1835
1878
|
function ytpGetDurationSeconds(player) {
|
1836
|
-
var
|
1879
|
+
var duration, seconds, d, s;
|
1837
1880
|
|
1838
|
-
|
1839
|
-
|
1840
|
-
|
1881
|
+
var playerState = player.getPlayerState();
|
1882
|
+
var ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1883
|
+
|
1884
|
+
var isValidPlayerState = /playing|paused|cued/.test(ytPlayerState);
|
1885
|
+
if (isValidPlayerState) {
|
1841
1886
|
duration = ytpGetDuration(player);
|
1842
1887
|
d = Number(duration);
|
1843
1888
|
s = Math.floor(d % 60);
|
1844
1889
|
seconds = s.toString().padStart(2, '0');
|
1845
1890
|
|
1846
1891
|
return seconds;
|
1847
|
-
|
1892
|
+
} else {
|
1848
1893
|
return '00';
|
1849
|
-
}
|
1850
1894
|
}
|
1895
|
+
|
1851
1896
|
} // END ytpGetDurationSeconds
|
1852
1897
|
|
1853
1898
|
// ---------------------------------------------------------------------------
|
@@ -1856,21 +1901,23 @@ regenerate: true
|
|
1856
1901
|
// Returns the current hours the user is into the video
|
1857
1902
|
// ---------------------------------------------------------------------------
|
1858
1903
|
function ytpGetCurrentHours(player) {
|
1859
|
-
var
|
1904
|
+
var currentTime, hours, d, h;
|
1905
|
+
|
1906
|
+
var playerState = player.getPlayerState();
|
1907
|
+
var ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1860
1908
|
|
1861
|
-
|
1862
|
-
|
1863
|
-
if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED) {
|
1909
|
+
var isValidPlayerState = /playing|paused/.test(ytPlayerState);
|
1910
|
+
if (isValidPlayerState) {
|
1864
1911
|
currentTime = ytpGetCurrentTime(player);
|
1865
1912
|
d = Number(currentTime);
|
1866
1913
|
h = Math.floor(d / 3600);
|
1867
1914
|
hours = h.toString().padStart(2, '0');
|
1868
1915
|
|
1869
1916
|
return hours;
|
1870
|
-
|
1917
|
+
} else {
|
1871
1918
|
return '00';
|
1872
|
-
}
|
1873
1919
|
}
|
1920
|
+
|
1874
1921
|
} // END ytpGetCurrentHours
|
1875
1922
|
|
1876
1923
|
// ---------------------------------------------------------------------------
|
@@ -1879,21 +1926,23 @@ regenerate: true
|
|
1879
1926
|
// Returns the current minutes the user is into the video
|
1880
1927
|
// ---------------------------------------------------------------------------
|
1881
1928
|
function ytpGetCurrentMinutes (player) {
|
1882
|
-
var
|
1929
|
+
var currentTime, minutes, d, m;
|
1930
|
+
|
1931
|
+
var playerState = player.getPlayerState();
|
1932
|
+
var ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1883
1933
|
|
1884
|
-
|
1885
|
-
|
1886
|
-
if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED) {
|
1934
|
+
var isValidPlayerState = /playing|paused/.test(ytPlayerState);
|
1935
|
+
if (isValidPlayerState) {
|
1887
1936
|
currentTime = ytpGetCurrentTime(player);
|
1888
1937
|
d = Number(currentTime);
|
1889
1938
|
m = Math.floor(d % 3600 / 60);
|
1890
1939
|
minutes = m.toString().padStart(2, '0');
|
1891
1940
|
|
1892
1941
|
return minutes;
|
1893
|
-
|
1942
|
+
} else {
|
1894
1943
|
return '00';
|
1895
|
-
}
|
1896
1944
|
}
|
1945
|
+
|
1897
1946
|
} // END ytpGetCurrentMinutes
|
1898
1947
|
|
1899
1948
|
// ---------------------------------------------------------------------------
|
@@ -1902,21 +1951,23 @@ regenerate: true
|
|
1902
1951
|
// Returns the current seconds the user is into the video
|
1903
1952
|
// ---------------------------------------------------------------------------
|
1904
1953
|
function ytpGetCurrentSeconds(player) {
|
1905
|
-
var
|
1954
|
+
var currentTime, seconds, d, s;
|
1955
|
+
|
1956
|
+
var playerState = player.getPlayerState();
|
1957
|
+
var ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1906
1958
|
|
1907
|
-
|
1908
|
-
|
1909
|
-
if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED ) {
|
1959
|
+
var isValidPlayerState = /playing|paused/.test(ytPlayerState);
|
1960
|
+
if (isValidPlayerState) {
|
1910
1961
|
currentTime = ytpGetCurrentTime(player);
|
1911
1962
|
d = Number(currentTime);
|
1912
1963
|
s = Math.floor(d % 60);
|
1913
1964
|
seconds = s.toString().padStart(2, '0');
|
1914
1965
|
|
1915
1966
|
return seconds;
|
1916
|
-
|
1967
|
+
} else {
|
1917
1968
|
return '00';
|
1918
|
-
}
|
1919
1969
|
}
|
1970
|
+
|
1920
1971
|
} // END ytpGetCurrentSeconds
|
1921
1972
|
|
1922
1973
|
// ---------------------------------------------------------------------------
|
@@ -2031,8 +2082,7 @@ regenerate: true
|
|
2031
2082
|
});
|
2032
2083
|
}
|
2033
2084
|
|
2034
|
-
// Overload
|
2035
|
-
// TODO: Fix for multiple players in page
|
2085
|
+
// Overload ytp play_pause button for YT
|
2036
2086
|
// ---------------------------------------------------------------------
|
2037
2087
|
var largePlayerPlayPauseButton = document.getElementsByClassName(playerButton);
|
2038
2088
|
for (var i=0; i<largePlayerPlayPauseButton.length; i++) {
|
@@ -2041,36 +2091,25 @@ regenerate: true
|
|
2041
2091
|
|
2042
2092
|
if (classString.includes(ytPlayerID)) {
|
2043
2093
|
largePlayerPlayPauseButton[i].addEventListener('click', function(event) {
|
2044
|
-
var
|
2094
|
+
var activeSong, songs, songMetaData, playerData,
|
2045
2095
|
ytPlayer, playerState, ytPlayerState, playlist,
|
2046
2096
|
playerID, songIndex;
|
2047
2097
|
|
2048
|
-
playlist
|
2049
|
-
playerID
|
2098
|
+
playlist = this.getAttribute("data-amplitude-playlist");
|
2099
|
+
playerID = playlist + '_large';
|
2100
|
+
activeSong = getActiveSong();
|
2050
2101
|
|
2051
|
-
|
2052
|
-
checkActiveVideoElementYTP();
|
2053
|
-
|
2054
|
-
// get active song settings (manually)
|
2055
|
-
activeSongSettings = getActiveSong();
|
2056
|
-
if (!activeSongSettings) {
|
2102
|
+
if (!activeSong) {
|
2057
2103
|
songIndex = 0;
|
2058
2104
|
ytpSongIndex = 0;
|
2059
2105
|
} else {
|
2060
|
-
if (
|
2106
|
+
if (activeSong.playlist !== playlist) {
|
2061
2107
|
songIndex = 0;
|
2062
2108
|
ytpSongIndex = 0;
|
2063
|
-
|
2064
|
-
// reset previous player settings
|
2065
|
-
// if (activeSongSettings.player !== undefined) {
|
2066
|
-
// activeSongSettings.player.stopVideo();
|
2067
|
-
// var playPauseButtonClass = `large-player-play-pause-${activeSongSettings.playerID}`;
|
2068
|
-
// togglePlayPauseButton(playPauseButtonClass);
|
2069
|
-
// }
|
2070
2109
|
} else {
|
2071
2110
|
songIndex = ytpSongIndex;
|
2072
2111
|
}
|
2073
|
-
} // END if
|
2112
|
+
} // END if activeSong
|
2074
2113
|
|
2075
2114
|
if (j1.adapter.amplitude.data.ytpGlobals.ytApiError > 0) {
|
2076
2115
|
// do nothing on API errors
|
@@ -2080,20 +2119,10 @@ regenerate: true
|
|
2080
2119
|
return;
|
2081
2120
|
}
|
2082
2121
|
|
2083
|
-
// update activeAudio data (manually)
|
2084
|
-
checkActiveVideoElementYTP();
|
2085
|
-
|
2086
|
-
// get active song settings (manually)
|
2087
|
-
// activeSongSettings = getActiveSong();
|
2088
|
-
|
2089
2122
|
playerData = j1.adapter.amplitude.data.ytPlayers[playerID];
|
2090
2123
|
ytPlayer = playerData.player;
|
2091
2124
|
songIndex = playerData.activeIndex;
|
2092
|
-
songs = playerData.songs;
|
2093
|
-
|
2094
|
-
// update meta data
|
2095
|
-
// songMetaData = songs[songIndex];
|
2096
|
-
// ytpUpdatMetaContainers(songMetaData);
|
2125
|
+
songs = playerData.songs;
|
2097
2126
|
|
2098
2127
|
// save player GLOBAL data for later use (e.g. events)
|
2099
2128
|
j1.adapter.amplitude.data.activePlayer = 'ytp';
|
@@ -2105,44 +2134,12 @@ regenerate: true
|
|
2105
2134
|
playerState = ytPlayer.getPlayerState();
|
2106
2135
|
ytPlayerState = (playerState < 0) ? YT_PLAYER_STATE_NAMES[6] : YT_PLAYER_STATE_NAMES[playerState];
|
2107
2136
|
|
2108
|
-
//
|
2109
|
-
//
|
2110
|
-
//
|
2111
|
-
//
|
2112
|
-
// }
|
2113
|
-
|
2114
|
-
// TOGGLE state 'playing' => 'paused'
|
2115
|
-
if (ytPlayerState === 'playing') {
|
2116
|
-
ytPlayer.pauseVideo();
|
2117
|
-
|
2118
|
-
ytPlayerCurrentTime = ytPlayer.getCurrentTime();
|
2119
|
-
|
2120
|
-
var playPauseButtonClass = `large-player-play-pause-${ytPlayerID}`;
|
2121
|
-
togglePlayPauseButton(playPauseButtonClass);
|
2122
|
-
|
2123
|
-
// reset|update time settings
|
2124
|
-
resetCurrentTimeContainerYTP(ytPlayer, playlist);
|
2125
|
-
updateDurationTimeContainerYTP(ytPlayer, playlist);
|
2126
|
-
}
|
2127
|
-
|
2128
|
-
// TOGGLE state 'paused' => 'playing'
|
2129
|
-
if (ytPlayerState === 'paused') {
|
2130
|
-
ytPlayer.playVideo();
|
2131
|
-
ytpSeekTo(ytPlayer, ytPlayerCurrentTime, true);
|
2132
|
-
|
2133
|
-
var trackID = songIndex + 1;
|
2134
|
-
logger.debug(`PLAY video for PlayPauseButton on playlist|trackID: ${playlist}|${trackID} at: ${ytPlayerCurrentTime}`);
|
2135
|
-
|
2136
|
-
var playPauseButtonClass = `large-player-play-pause-${ytPlayerID}`;
|
2137
|
-
togglePlayPauseButton(playPauseButtonClass);
|
2138
|
-
|
2139
|
-
// reset|update time settings
|
2140
|
-
resetCurrentTimeContainerYTP(ytPlayer, playlist);
|
2141
|
-
updateDurationTimeContainerYTP(ytPlayer, playlist);
|
2142
|
-
} // if ytPlayerState === 'paused'
|
2143
|
-
|
2137
|
+
// NOTE:
|
2138
|
+
// ---------------------------------------------------------------
|
2139
|
+
// unclear why player state 'cued' occurs
|
2140
|
+
// ---------------------------------------------------------------
|
2144
2141
|
// load (cued) video
|
2145
|
-
if (ytPlayerState === 'cued') {
|
2142
|
+
if (ytPlayerState === 'cued' || ytPlayerState === 'unstarted' ) {
|
2146
2143
|
ytPlayer.playVideo();
|
2147
2144
|
|
2148
2145
|
// wait for API error state
|
@@ -2174,21 +2171,45 @@ regenerate: true
|
|
2174
2171
|
updateDurationTimeContainerYTP(ytPlayer, playlist);
|
2175
2172
|
|
2176
2173
|
}, 100);
|
2177
|
-
|
2178
|
-
|
2179
|
-
//
|
2180
|
-
|
2181
|
-
//
|
2182
|
-
//
|
2183
|
-
//
|
2184
|
-
//
|
2185
|
-
//
|
2186
|
-
//
|
2187
|
-
|
2188
|
-
|
2189
|
-
|
2190
|
-
|
2191
|
-
|
2174
|
+
|
2175
|
+
return;
|
2176
|
+
} // END if ytPlayerState === 'cued'
|
2177
|
+
|
2178
|
+
// NOTE:
|
2179
|
+
// ---------------------------------------------------------------
|
2180
|
+
// unclear why player state 'cued'
|
2181
|
+
// is folloed by 'unstarted'|'buffering' on playing
|
2182
|
+
// ---------------------------------------------------------------
|
2183
|
+
// TOGGLE state 'playing' => 'paused'
|
2184
|
+
var isValidPlayerState = /playing|unstarted|buffering/.test(ytPlayerState);
|
2185
|
+
if (isValidPlayerState) {
|
2186
|
+
ytPlayer.pauseVideo();
|
2187
|
+
|
2188
|
+
ytPlayerCurrentTime = ytPlayer.getCurrentTime();
|
2189
|
+
|
2190
|
+
var playPauseButtonClass = `large-player-play-pause-${ytPlayerID}`;
|
2191
|
+
togglePlayPauseButton(playPauseButtonClass);
|
2192
|
+
|
2193
|
+
// reset|update time settings
|
2194
|
+
resetCurrentTimeContainerYTP(ytPlayer, playlist);
|
2195
|
+
updateDurationTimeContainerYTP(ytPlayer, playlist);
|
2196
|
+
}
|
2197
|
+
|
2198
|
+
// TOGGLE state 'paused' => 'playing'
|
2199
|
+
if (ytPlayerState === 'paused') {
|
2200
|
+
ytPlayer.playVideo();
|
2201
|
+
ytpSeekTo(ytPlayer, ytPlayerCurrentTime, true);
|
2202
|
+
|
2203
|
+
var trackID = songIndex + 1;
|
2204
|
+
logger.debug(`PLAY video for PlayPauseButton on playlist|trackID: ${playlist}|${trackID} at: ${ytPlayerCurrentTime}`);
|
2205
|
+
|
2206
|
+
var playPauseButtonClass = `large-player-play-pause-${ytPlayerID}`;
|
2207
|
+
togglePlayPauseButton(playPauseButtonClass);
|
2208
|
+
|
2209
|
+
// reset|update time settings
|
2210
|
+
resetCurrentTimeContainerYTP(ytPlayer, playlist);
|
2211
|
+
updateDurationTimeContainerYTP(ytPlayer, playlist);
|
2212
|
+
} // if ytPlayerState === 'paused'
|
2192
2213
|
|
2193
2214
|
// deactivate AJS events (if any)
|
2194
2215
|
event.stopImmediatePropagation();
|
@@ -2198,7 +2219,6 @@ regenerate: true
|
|
2198
2219
|
} // END for largePlayerPlayPauseButton
|
2199
2220
|
|
2200
2221
|
// Overload AJS largePlayerSkipBackward button for YT
|
2201
|
-
// TODO: Fix for multiple players in page
|
2202
2222
|
// ---------------------------------------------------------------------
|
2203
2223
|
var largePlayerSkipForwardButtons = document.getElementsByClassName("large-player-skip-forward");
|
2204
2224
|
for (var i=0; i<largePlayerSkipForwardButtons.length; i++) {
|
@@ -2220,17 +2240,15 @@ regenerate: true
|
|
2220
2240
|
if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED) {
|
2221
2241
|
logger.debug(`SKIP forward on Button skipForward for ${skipOffset} seconds`);
|
2222
2242
|
ytpSeekTo(ytPlayer, currentVideoTime + skipOffset, true);
|
2223
|
-
|
2224
2243
|
}
|
2225
2244
|
|
2226
2245
|
// deactivate AJS events (if any)
|
2227
2246
|
event.stopImmediatePropagation();
|
2228
|
-
}); // END
|
2229
|
-
} // END if
|
2230
|
-
} // END for
|
2247
|
+
}); // END eventListener
|
2248
|
+
} // END if classString.includes(ytPlayerID
|
2249
|
+
} // END for largePlayerSkipForwardButtons
|
2231
2250
|
|
2232
2251
|
// Overload AJS largePlayerSkipBackward button for YT
|
2233
|
-
// TODO: Fix for multiple players in page
|
2234
2252
|
// ---------------------------------------------------------------------
|
2235
2253
|
var largePlayerSkipBackwardButtons = document.getElementsByClassName("large-player-skip-backward");
|
2236
2254
|
for (var i=0; i<largePlayerSkipBackwardButtons.length; i++) {
|
@@ -2261,8 +2279,6 @@ regenerate: true
|
|
2261
2279
|
} // END for
|
2262
2280
|
|
2263
2281
|
// Overload AJS largePlayerNext button for YT
|
2264
|
-
// click on (player) next button
|
2265
|
-
// TODO: Fix for multiple players in page
|
2266
2282
|
// ---------------------------------------------------------------------
|
2267
2283
|
var largePlayerNextButton = document.getElementsByClassName("large-player-next");
|
2268
2284
|
for (var i=0; i<largePlayerNextButton.length; i++) {
|
@@ -2321,6 +2337,14 @@ regenerate: true
|
|
2321
2337
|
j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex = songIndex;
|
2322
2338
|
j1.adapter.amplitude.data.ytPlayers[playerID].videoID = ytpVideoID;
|
2323
2339
|
|
2340
|
+
// save amplitudejs data for later use (e.g. events)
|
2341
|
+
// ---------------------------------------------------------------
|
2342
|
+
j1.modules.amplitudejs.data.ytp.activeIndex = songIndex;
|
2343
|
+
j1.modules.amplitudejs.data.ytp.activePlaylist = playlist;
|
2344
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].player = ytPlayer;
|
2345
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].activeIndex = songIndex;
|
2346
|
+
|
2347
|
+
|
2324
2348
|
trackID = songIndex + 1;
|
2325
2349
|
logger.debug(`SWITCH video for PlayerNextButton at trackID|VideoID: ${trackID}|${ytpVideoID}`);
|
2326
2350
|
ytPlayer.loadVideoById(ytpVideoID);
|
@@ -2376,13 +2400,11 @@ regenerate: true
|
|
2376
2400
|
event.stopImmediatePropagation();
|
2377
2401
|
|
2378
2402
|
}); // END EventListener 'click' next button
|
2379
|
-
} // END if
|
2403
|
+
} // END if classString.includes(ytPlayerID)
|
2380
2404
|
|
2381
2405
|
} // END for largePlayerNextButton
|
2382
2406
|
|
2383
2407
|
// Overload AJS largePlayerPrevious button for YT
|
2384
|
-
// click on (player) previous button
|
2385
|
-
// TODO: Fix for multiple players in page
|
2386
2408
|
// -----------------------------------------------------------------------
|
2387
2409
|
var largePlayePreviousButton = document.getElementsByClassName("large-player-previous");
|
2388
2410
|
for (var i=0; i<largePlayePreviousButton.length; i++) {
|
@@ -2434,6 +2456,19 @@ regenerate: true
|
|
2434
2456
|
j1.adapter.amplitude.data.ytpGlobals['activeIndex'] = songIndex;
|
2435
2457
|
j1.adapter.amplitude.data.ytpGlobals['activePlaylist'] = playlist;
|
2436
2458
|
|
2459
|
+
|
2460
|
+
// save amplitudejs data for later use (e.g. events)
|
2461
|
+
// -----------------------------------------------------------------
|
2462
|
+
j1.modules.amplitudejs.data.activePlayer = songIndex;
|
2463
|
+
j1.modules.amplitudejs.data.activeIndex = songIndex;
|
2464
|
+
j1.modules.amplitudejs.data.activePlaylist = songIndex;
|
2465
|
+
j1.modules.amplitudejs.data.ytp.activeIndex = songIndex;
|
2466
|
+
j1.modules.amplitudejs.data.ytp.activePlaylist = playlist;
|
2467
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].player = ytPlayer;
|
2468
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].activeIndex = songIndex;
|
2469
|
+
|
2470
|
+
|
2471
|
+
|
2437
2472
|
// load previous video
|
2438
2473
|
// -----------------------------------------------------------------
|
2439
2474
|
|
@@ -2497,12 +2532,11 @@ regenerate: true
|
|
2497
2532
|
event.stopImmediatePropagation();
|
2498
2533
|
|
2499
2534
|
}); // END EventListener 'click' next button
|
2500
|
-
} // END if
|
2535
|
+
} // END if classString.includes(ytPlayerID)
|
2501
2536
|
|
2502
2537
|
} // END for largePlayerNextButton
|
2503
2538
|
|
2504
2539
|
// click on song container
|
2505
|
-
// TODO: Fix for multiple players in page
|
2506
2540
|
// -------------------------------------------------------------------------
|
2507
2541
|
var largePlayerSongContainer = document.getElementsByClassName("amplitude-song-container");
|
2508
2542
|
for (var i=0; i<largePlayerSongContainer.length; i++) {
|
@@ -2511,11 +2545,13 @@ regenerate: true
|
|
2511
2545
|
|
2512
2546
|
if (classString.includes(ytPlayerID)) {
|
2513
2547
|
largePlayerSongContainer[i].addEventListener('click', function(event) {
|
2514
|
-
var
|
2548
|
+
var activeSong, playlist, playerID,
|
2549
|
+
playerState, ytPlayerState,
|
2515
2550
|
songs, songIndex, songName, singleAudio, trackID,
|
2516
2551
|
ytPlayer, ytpVideoID, activeSongIndex, isSongIndexChanged;
|
2517
2552
|
|
2518
2553
|
// set (current) playlist|song data
|
2554
|
+
// -------------------------------------------------------------------
|
2519
2555
|
playlist = this.getAttribute("data-amplitude-playlist");
|
2520
2556
|
playerID = playlist + '_large';
|
2521
2557
|
songIndex = parseInt(this.getAttribute("data-amplitude-song-index"));
|
@@ -2523,37 +2559,69 @@ regenerate: true
|
|
2523
2559
|
activeSongIndex = j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex;
|
2524
2560
|
isSongIndexChanged = (activeSongIndex !== songIndex) ? true : false;
|
2525
2561
|
|
2526
|
-
// update active song settings (manually)
|
2527
|
-
checkActiveVideoElementYTP();
|
2528
|
-
|
2529
2562
|
// set (current) song meta data
|
2530
|
-
|
2531
|
-
|
2532
|
-
|
2533
|
-
|
2534
|
-
|
2535
|
-
ytPlayer
|
2536
|
-
playerState
|
2563
|
+
// -------------------------------------------------------------------
|
2564
|
+
songs = j1.adapter.amplitude.data.ytPlayers[playerID].songs;
|
2565
|
+
songMetaData = songs[songIndex];
|
2566
|
+
songURL = songMetaData.url;
|
2567
|
+
ytpVideoID = (ytPlayerErrorTest) ? 'invalidVideoID' : songURL.split('=')[1];
|
2568
|
+
ytPlayer = j1.adapter.amplitude.data.ytPlayers[playerID].player;
|
2569
|
+
playerState = ytPlayer.getPlayerState();
|
2570
|
+
ytPlayerState = (playerState < 0) ? YT_PLAYER_STATE_NAMES[6] : YT_PLAYER_STATE_NAMES[playerState];
|
2571
|
+
|
2572
|
+
// NOTE:
|
2573
|
+
// -------------------------------------------------------------------
|
2574
|
+
// unclear why player state 'cued' occurs
|
2575
|
+
// -------------------------------------------------------------------
|
2576
|
+
// load (cued) video
|
2577
|
+
if (ytPlayerState === 'cued') {
|
2578
|
+
ytPlayer.playVideo();
|
2579
|
+
|
2580
|
+
// wait for API error state
|
2581
|
+
setTimeout(() => {
|
2582
|
+
if (j1.adapter.amplitude.data.ytpGlobals.ytApiError > 0) {
|
2583
|
+
var trackID = songIndex + 1;
|
2584
|
+
logger.error(`DISABLED player for playlist|trackID: ${playlist}|${trackID} on API error '${YT_PLAYER_ERROR_NAMES[j1.adapter.amplitude.data.ytpGlobals.ytApiError]}'`);
|
2585
|
+
|
2586
|
+
// do nothing on API errors
|
2587
|
+
return;
|
2588
|
+
}
|
2589
|
+
|
2590
|
+
// reset progress bar settings
|
2591
|
+
resetProgressBarYTP();
|
2592
|
+
|
2593
|
+
var playPauseButtonClass = `large-player-play-pause-${ytPlayerID}`;
|
2594
|
+
togglePlayPauseButton(playPauseButtonClass);
|
2595
|
+
|
2596
|
+
// set song at songIndex active in playlist
|
2597
|
+
setSongActive(playlist, songIndex);
|
2598
|
+
|
2599
|
+
// scroll song active at index in player
|
2600
|
+
if (playerAutoScrollSongElement) {
|
2601
|
+
scrollToActiveElement(playlist);
|
2602
|
+
}
|
2603
|
+
|
2604
|
+
// reset|update time settings
|
2605
|
+
resetCurrentTimeContainerYTP(ytPlayer, playlist);
|
2606
|
+
updateDurationTimeContainerYTP(ytPlayer, playlist);
|
2607
|
+
|
2608
|
+
}, 100);
|
2609
|
+
|
2610
|
+
return;
|
2611
|
+
} // END if ytPlayerState === 'cued'
|
2537
2612
|
|
2538
2613
|
// TOGGLE state 'playing' => 'paused' if video (audio) NOT changed
|
2539
|
-
if (
|
2614
|
+
if (!isSongIndexChanged && ytPlayerState === 'playing') {
|
2540
2615
|
ytPlayer.pauseVideo();
|
2541
2616
|
// get active song settings (manually)
|
2542
|
-
|
2617
|
+
activeSong = getActiveSong();
|
2543
2618
|
|
2544
|
-
if (
|
2545
|
-
// ytpCurrentTime =
|
2546
|
-
if (
|
2619
|
+
if (activeSong) {
|
2620
|
+
// ytpCurrentTime = activeSong.currentTime;
|
2621
|
+
if (activeSong.playlist !== playlist) {
|
2547
2622
|
// set current player settings
|
2548
2623
|
songs = j1.adapter.amplitude.data.ytPlayers[playerID].songs;
|
2549
2624
|
ytPlayer = j1.adapter.amplitude.data.ytPlayers[playerID].player;
|
2550
|
-
|
2551
|
-
// reset previous player settings
|
2552
|
-
// if (activeSongSettings.player !== undefined) {
|
2553
|
-
// activeSongSettings.player.stopVideo();
|
2554
|
-
// var playPauseButtonClass = `large-player-play-pause-${activeSongSettings.playerID}`;
|
2555
|
-
// togglePlayPauseButton(playPauseButtonClass);
|
2556
|
-
// }
|
2557
2625
|
} else {
|
2558
2626
|
// set current player settings
|
2559
2627
|
songs = j1.adapter.amplitude.data.ytPlayers[playerID].songs;
|
@@ -2577,8 +2645,10 @@ regenerate: true
|
|
2577
2645
|
resetCurrentTimeContainerYTP(ytPlayer, playlist);
|
2578
2646
|
updateDurationTimeContainerYTP(ytPlayer, playlist);
|
2579
2647
|
|
2580
|
-
//
|
2581
|
-
|
2648
|
+
// save YT player data for later use (e.g. events)
|
2649
|
+
// ---------------------------------------------------------------
|
2650
|
+
ytpSongIndex = songIndex;
|
2651
|
+
j1.modules.amplitudejs.data.ytp.songIndex = songIndex;
|
2582
2652
|
|
2583
2653
|
// save YT player GLOBAL data for later use (e.g. events)
|
2584
2654
|
j1.adapter.amplitude.data.activePlayer = 'ytp';
|
@@ -2589,6 +2659,19 @@ regenerate: true
|
|
2589
2659
|
j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex = songIndex;
|
2590
2660
|
j1.adapter.amplitude.data.ytPlayers[playerID].videoID = ytpVideoID;
|
2591
2661
|
|
2662
|
+
|
2663
|
+
// save amplitudejs data for later use (e.g. events)
|
2664
|
+
// -----------------------------------------------------------------
|
2665
|
+
j1.modules.amplitudejs.data.activePlayer = ytPlayer;
|
2666
|
+
j1.modules.amplitudejs.data.activeIndex = songIndex;
|
2667
|
+
j1.modules.amplitudejs.data.activePlaylist = playlist;
|
2668
|
+
j1.modules.amplitudejs.data.ytp.activeIndex = songIndex;
|
2669
|
+
j1.modules.amplitudejs.data.ytp.activePlaylist = playlist;
|
2670
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].player = ytPlayer;
|
2671
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].activeIndex = songIndex;
|
2672
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].ytpVideoID = ytpVideoID;
|
2673
|
+
|
2674
|
+
|
2592
2675
|
// reset|update current time settings
|
2593
2676
|
resetCurrentTimeContainerYTP(ytPlayer, playlist);
|
2594
2677
|
updateDurationTimeContainerYTP(ytPlayer, playlist);
|
@@ -2616,26 +2699,17 @@ regenerate: true
|
|
2616
2699
|
} // END if playerState === PLAYING
|
2617
2700
|
|
2618
2701
|
// TOGGLE state 'paused' => 'playing' if video (audio) NOT changed
|
2619
|
-
if (
|
2702
|
+
if (!isSongIndexChanged && ytPlayerState === 'paused') {
|
2620
2703
|
ytPlayer.playVideo();
|
2621
2704
|
ytpSeekTo(ytPlayer, ytPlayerCurrentTime, true);
|
2622
2705
|
|
2623
|
-
|
2624
|
-
|
2625
|
-
|
2626
|
-
|
2627
|
-
// ytpCurrentTime = activeSongSettings.currentTime;
|
2628
|
-
if (activeSongSettings.playlist !== playlist) {
|
2706
|
+
activeSong = getActiveSong();
|
2707
|
+
if (activeSong) {
|
2708
|
+
// ytpCurrentTime = activeSong.currentTime;
|
2709
|
+
if (activeSong.playlist !== playlist) {
|
2629
2710
|
// set current player settings
|
2630
2711
|
songs = j1.adapter.amplitude.data.ytPlayers[playerID].songs;
|
2631
2712
|
ytPlayer = j1.adapter.amplitude.data.ytPlayers[playerID].player;
|
2632
|
-
|
2633
|
-
// reset previous player settings
|
2634
|
-
// if (activeSongSettings.player !== undefined) {
|
2635
|
-
// activeSongSettings.player.stopVideo();
|
2636
|
-
// var playPauseButtonClass = `large-player-play-pause-${activeSongSettings.playerID}`;
|
2637
|
-
// togglePlayPauseButton(playPauseButtonClass);
|
2638
|
-
// }
|
2639
2713
|
} else {
|
2640
2714
|
// set current player settings
|
2641
2715
|
songs = j1.adapter.amplitude.data.ytPlayers[playerID].songs;
|
@@ -2671,7 +2745,7 @@ regenerate: true
|
|
2671
2745
|
// -------------------------------------------------------------------
|
2672
2746
|
trackID = songIndex + 1;
|
2673
2747
|
logger.debug(`SWITCH video for PlayerSongContainer at trackID|VideoID: ${trackID}|${ytpVideoID}`);
|
2674
|
-
|
2748
|
+
loadVideo(playlist, songIndex)
|
2675
2749
|
|
2676
2750
|
// wait for API error state
|
2677
2751
|
setTimeout(() => {
|
@@ -2683,18 +2757,34 @@ regenerate: true
|
|
2683
2757
|
return;
|
2684
2758
|
}
|
2685
2759
|
|
2686
|
-
//
|
2687
|
-
|
2760
|
+
// save YT player data for later use (e.g. events)
|
2761
|
+
// -------------------------------------------------------------
|
2762
|
+
ytpSongIndex = songIndex;
|
2763
|
+
j1.modules.amplitudejs.data.ytp.songIndex = songIndex;
|
2688
2764
|
|
2689
2765
|
// save YT player GLOBAL data for later use (e.g. events)
|
2690
|
-
j1.adapter.amplitude.data.activePlayer
|
2691
|
-
j1.adapter.amplitude.data.ytpGlobals['activeIndex']
|
2766
|
+
j1.adapter.amplitude.data.activePlayer = 'ytp';
|
2767
|
+
j1.adapter.amplitude.data.ytpGlobals['activeIndex'] = songIndex;
|
2692
2768
|
j1.adapter.amplitude.data.ytpGlobals['activePlaylist'] = playlist;
|
2693
2769
|
|
2694
2770
|
// save YT player data for later use (e.g. events)
|
2695
2771
|
j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex = songIndex;
|
2696
2772
|
j1.adapter.amplitude.data.ytPlayers[playerID].videoID = ytpVideoID;
|
2697
2773
|
|
2774
|
+
|
2775
|
+
// save amplitudejs data for later use (e.g. events)
|
2776
|
+
// -------------------------------------------------------------
|
2777
|
+
j1.modules.amplitudejs.data.activePlayer = 'ytp';
|
2778
|
+
j1.modules.amplitudejs.data.activeIndex = songIndex;
|
2779
|
+
j1.modules.amplitudejs.data.activePlaylist = playlist;
|
2780
|
+
j1.modules.amplitudejs.data.ytp.songIndex = songIndex;
|
2781
|
+
j1.modules.amplitudejs.data.ytp.activeIndex = songIndex;
|
2782
|
+
j1.modules.amplitudejs.data.ytp.activePlaylist = playlist;
|
2783
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].player = ytPlayer;
|
2784
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].activeIndex = songIndex;
|
2785
|
+
j1.modules.amplitudejs.data.ytp.players[playerID].ytpVideoID = ytpVideoID;
|
2786
|
+
|
2787
|
+
|
2698
2788
|
// reset|update current time settings
|
2699
2789
|
resetCurrentTimeContainerYTP(ytPlayer, playlist);
|
2700
2790
|
updateDurationTimeContainerYTP(ytPlayer, playlist);
|
@@ -2718,8 +2808,8 @@ regenerate: true
|
|
2718
2808
|
}
|
2719
2809
|
|
2720
2810
|
// save YT player data for later use (e.g. events)
|
2721
|
-
j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex = songIndex;
|
2722
|
-
j1.adapter.amplitude.data.ytPlayers[playerID].videoID = ytpVideoID;
|
2811
|
+
// j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex = songIndex;
|
2812
|
+
// j1.adapter.amplitude.data.ytPlayers[playerID].videoID = ytpVideoID;
|
2723
2813
|
|
2724
2814
|
// mute sound after next video load
|
2725
2815
|
// -------------------------------------------------------------------
|
@@ -2729,7 +2819,7 @@ regenerate: true
|
|
2729
2819
|
ytPlayer.unMute();
|
2730
2820
|
}, muteAfterVideoSwitchInterval);
|
2731
2821
|
}
|
2732
|
-
}, 100);
|
2822
|
+
}, 100); // END timeout
|
2733
2823
|
} // END if isSongIndexChanged
|
2734
2824
|
|
2735
2825
|
// deactivate AJS events (if any)
|
@@ -2739,7 +2829,6 @@ regenerate: true
|
|
2739
2829
|
} // END for largePlayerSongContainer
|
2740
2830
|
|
2741
2831
|
// add listeners to all progress bars found
|
2742
|
-
// TODO: Fix for multiple players in page
|
2743
2832
|
// -------------------------------------------------------------------------
|
2744
2833
|
var progressBars = document.getElementsByClassName("large-player-progress");
|
2745
2834
|
if (progressBars.length) {
|
@@ -2759,30 +2848,24 @@ regenerate: true
|
|
2759
2848
|
j1.adapter.amplitude.data.ytPlayers[playerID].progressBar = progressBar;
|
2760
2849
|
|
2761
2850
|
progressBars[i].addEventListener('click', function(event) {
|
2762
|
-
var
|
2763
|
-
playerState, progressBar, percentage, time;
|
2764
|
-
|
2765
|
-
// update active song settings (manually)
|
2766
|
-
checkActiveVideoElementYTP();
|
2767
|
-
|
2768
|
-
// get active song settings (manually)
|
2769
|
-
activeSongSettings = getActiveSong();
|
2851
|
+
var activeSong, playlist, ytPlayer,
|
2852
|
+
playerState, progressBar, percentage, time;
|
2770
2853
|
|
2771
|
-
|
2772
|
-
|
2854
|
+
activeSong = getActiveSong();
|
2855
|
+
if (!activeSong) {
|
2856
|
+
// do nothing if activeSong data is missing (failsafe)
|
2773
2857
|
return;
|
2774
2858
|
}
|
2775
2859
|
|
2776
2860
|
playlist = this.getAttribute("data-amplitude-playlist");
|
2777
|
-
if (
|
2778
|
-
// do nothing on PREVIOUS playlist
|
2861
|
+
if (activeSong.playlist !== playlist) {
|
2862
|
+
// do nothing on PREVIOUS playlist
|
2779
2863
|
return;
|
2780
2864
|
}
|
2781
2865
|
|
2782
|
-
ytPlayer =
|
2866
|
+
ytPlayer = activeSong.player;
|
2783
2867
|
playerState = ytPlayer.getPlayerState();
|
2784
2868
|
|
2785
|
-
//if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.BUFFERING) {
|
2786
2869
|
if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.BUFFERING) {
|
2787
2870
|
progressBar = this;
|
2788
2871
|
percentage = getProgressBarSelectedPositionPercentage(event, progressBar);
|
@@ -2807,69 +2890,58 @@ regenerate: true
|
|
2807
2890
|
} // END if progressBars
|
2808
2891
|
|
2809
2892
|
// add listeners to all volume sliders found
|
2810
|
-
// TODO: Fix for multiple players in page
|
2811
2893
|
// -------------------------------------------------------------------------
|
2812
2894
|
var volumeSliders = document.getElementsByClassName("amplitude-volume-slider");
|
2813
2895
|
for (var i=0; i<volumeSliders.length; i++) {
|
2814
2896
|
if (volumeSliders[i].dataset.amplitudeSource === 'audio') {
|
2815
2897
|
// do nothing (managed by adapter)
|
2816
|
-
var bla = 1;
|
2817
2898
|
} else {
|
2818
2899
|
if (volumeSliders[i]) {
|
2819
|
-
|
2820
|
-
|
2821
|
-
|
2822
|
-
var playerID = sliderID.split('volume_slider_')[1];
|
2900
|
+
var volumeSlider = volumeSliders[i];
|
2901
|
+
var sliderID = volumeSliders[i].id;
|
2902
|
+
var playerID = sliderID.split('volume_slider_')[1];
|
2823
2903
|
|
2824
|
-
|
2825
|
-
|
2826
|
-
|
2827
|
-
|
2904
|
+
// save YT player data for later use (e.g. events)
|
2905
|
+
if (volumeSlider.dataset.amplitudeSource === 'youtube') {
|
2906
|
+
j1.adapter.amplitude.data.ytPlayers[playerID].volumeSlider = volumeSlider;
|
2907
|
+
}
|
2828
2908
|
|
2829
|
-
|
2909
|
+
volumeSliders[i].addEventListener('click', function(event) {
|
2910
|
+
var activeSong = getActiveSong();
|
2830
2911
|
|
2831
|
-
|
2832
|
-
|
2833
|
-
|
2834
|
-
|
2835
|
-
var activeSongSettings = getActiveSong();
|
2912
|
+
if (!activeSong) {
|
2913
|
+
// do nothing if activeSong data is missing (failsafe)
|
2914
|
+
return;
|
2915
|
+
}
|
2836
2916
|
|
2837
|
-
|
2838
|
-
|
2839
|
-
return;
|
2840
|
-
}
|
2841
|
-
|
2842
|
-
var ytPlayer = activeSongSettings.player;
|
2843
|
-
var playerState = ytPlayer.getPlayerState();
|
2917
|
+
var ytPlayer = activeSong.player;
|
2918
|
+
var playerState = ytPlayer.getPlayerState();
|
2844
2919
|
|
2845
|
-
|
2846
|
-
|
2847
|
-
|
2920
|
+
if ((playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED) && ytPlayer !== undefined) {
|
2921
|
+
var volumeSlider, volumeValue;
|
2922
|
+
var currenVolume = ytPlayer.getVolume();
|
2848
2923
|
|
2849
|
-
|
2850
|
-
|
2924
|
+
volumeSlider = this;
|
2925
|
+
volumeValue = 50; // default
|
2851
2926
|
|
2852
|
-
|
2853
|
-
|
2854
|
-
|
2927
|
+
if (volumeSlider !== null) {
|
2928
|
+
volumeValue = parseInt(volumeSlider.value);
|
2929
|
+
}
|
2855
2930
|
|
2856
|
-
|
2857
|
-
|
2931
|
+
ytPlayer.setVolume(volumeValue);
|
2932
|
+
} // END if ytPlayer
|
2858
2933
|
|
2859
|
-
|
2860
|
-
// } // END for
|
2934
|
+
}); // END EventListener 'click'
|
2861
2935
|
} // END if volumeSliders
|
2862
2936
|
} // END if volumeSliders
|
2863
2937
|
} // END for volumeSliders
|
2864
2938
|
|
2865
2939
|
// add listeners to all mute buttons found
|
2866
|
-
// TODO: Fix for multiple buttons in page
|
2867
2940
|
// -------------------------------------------------------------------------
|
2868
2941
|
var volumeMutes = document.getElementsByClassName("amplitude-mute");
|
2869
2942
|
for (var i=0; i<volumeMutes.length; i++) {
|
2870
2943
|
if (volumeMutes[i].dataset.amplitudeSource === 'audio') {
|
2871
2944
|
// do nothing (managed by adapter)
|
2872
|
-
var bla = 1;
|
2873
2945
|
} else {
|
2874
2946
|
if (volumeMutes[i]) {
|
2875
2947
|
var volumMute = volumeMutes[i];
|
@@ -2877,25 +2949,23 @@ regenerate: true
|
|
2877
2949
|
var playerID = sliderID.split('amplitude-mute_')[1];
|
2878
2950
|
|
2879
2951
|
volumeMutes[i].addEventListener('click', function(event) {
|
2952
|
+
var activeSong = getActiveSong();
|
2880
2953
|
|
2881
|
-
|
2882
|
-
|
2883
|
-
|
2884
|
-
// get active song settings (manually)
|
2885
|
-
var activeSongSettings = getActiveSong();
|
2886
|
-
|
2887
|
-
if (!activeSongSettings) {
|
2888
|
-
// do nothing if current video (audio) item is NOT selected|active
|
2954
|
+
if (!activeSong) {
|
2955
|
+
// do nothing if activeSong data is missing (failsafe)
|
2889
2956
|
return;
|
2890
2957
|
}
|
2891
2958
|
|
2892
|
-
var ytPlayer =
|
2959
|
+
var ytPlayer = activeSong.player;
|
2893
2960
|
var playerState = ytPlayer.getPlayerState();
|
2894
2961
|
var volumeSlider = j1.adapter.amplitude.data.ytPlayers[playerID].volumeSlider;
|
2895
2962
|
var currenVolume = ytPlayer.getVolume();
|
2896
2963
|
var playerVolumePreset = parseInt(j1.adapter.amplitude.data.ytPlayers[playerID].playerSettings.volume_slider.preset_value);
|
2897
|
-
|
2898
|
-
|
2964
|
+
var playerState = (ytPlayer.getPlayerState() > 0) ? ytPlayer.getPlayerState() : 6;
|
2965
|
+
var ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
2966
|
+
|
2967
|
+
var isValidPlayerState = /playing|paused/.test(ytPlayerState);
|
2968
|
+
if (isValidPlayerState && ytPlayer !== undefined) {
|
2899
2969
|
if (currenVolume > 0) {
|
2900
2970
|
volumeSlider.value = 0;
|
2901
2971
|
ytPlayer.setVolume(0);
|