j1-template 2024.3.21 → 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/amplitude_app.html +60 -51
- data/assets/data/{galeries.html → gallery_app.html} +4 -4
- data/assets/theme/bla +0 -0
- data/assets/theme/j1/adapter/js/advertising.js +40 -38
- data/assets/theme/j1/adapter/js/algolia.js +13 -11
- data/assets/theme/j1/adapter/js/amplitude.js +628 -380
- data/assets/theme/j1/adapter/js/analytics.js +19 -17
- data/assets/theme/j1/adapter/js/asciidoctor.js +10 -8
- data/assets/theme/j1/adapter/js/attic.js +24 -22
- data/assets/theme/j1/adapter/js/bmd.js +10 -8
- data/assets/theme/j1/adapter/js/carousel.js +12 -9
- data/assets/theme/j1/adapter/js/chatbot.js +106 -104
- data/assets/theme/j1/adapter/js/clipboard.js +16 -14
- data/assets/theme/j1/adapter/js/comments.js +24 -22
- data/assets/theme/j1/adapter/js/cookieConsent.js +5 -1
- data/assets/theme/j1/adapter/js/customFunctions.js +12 -10
- data/assets/theme/j1/adapter/js/customModule.js +10 -8
- data/assets/theme/j1/adapter/js/docsearch.js +33 -31
- data/assets/theme/j1/adapter/js/dropdowns.js +16 -14
- data/assets/theme/j1/adapter/js/fab.js +34 -32
- data/assets/theme/j1/adapter/js/gallery.js +22 -20
- data/assets/theme/j1/adapter/js/gemini.js +66 -64
- data/assets/theme/j1/adapter/js/iconPicker.js +31 -29
- data/assets/theme/j1/adapter/js/iconPickerPage.js +11 -9
- data/assets/theme/j1/adapter/js/iframer.js +17 -15
- data/assets/theme/j1/adapter/js/j1.js +146 -143
- data/assets/theme/j1/adapter/js/lazyLoader.js +33 -31
- data/assets/theme/j1/adapter/js/lightbox.js +9 -7
- data/assets/theme/j1/adapter/js/logger.js +11 -9
- data/assets/theme/j1/adapter/js/lunr.js +37 -35
- data/assets/theme/j1/adapter/js/masonry.js +23 -21
- data/assets/theme/j1/adapter/js/masterslider.js +31 -29
- data/assets/theme/j1/adapter/js/mmenu.js +25 -23
- data/assets/theme/j1/adapter/js/navigator.js +43 -41
- data/assets/theme/j1/adapter/js/particles.js +12 -10
- data/assets/theme/j1/adapter/js/rangeSlider.js +21 -19
- data/assets/theme/j1/adapter/js/rouge.js +10 -8
- data/assets/theme/j1/adapter/js/rtable.js +14 -12
- data/assets/theme/j1/adapter/js/rtextResizer.js +10 -8
- data/assets/theme/j1/adapter/js/scroller.js +15 -13
- data/assets/theme/j1/adapter/js/slick.js +18 -16
- data/assets/theme/j1/adapter/js/slimSelect.js +30 -28
- data/assets/theme/j1/adapter/js/speak2me.js +25 -23
- data/assets/theme/j1/adapter/js/swiper.js +13 -11
- data/assets/theme/j1/adapter/js/themeToggler.js +11 -9
- data/assets/theme/j1/adapter/js/themes.js +60 -86
- data/assets/theme/j1/adapter/js/toccer.js +13 -11
- data/assets/theme/j1/adapter/js/translator.js +19 -16
- data/assets/theme/j1/adapter/js/videojs.js +9 -7
- data/assets/theme/j1/adapter/js/waves.js +18 -16
- 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/core/js/template.js +11180 -10968
- data/assets/theme/j1/core/js/template.min.js +13 -18
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.css +10 -4
- 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 +15 -8
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.min.css +2 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.css +35 -14
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.min.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.js +817 -695
- data/assets/theme/j1/modules/backstretch/js/backstretch.js +2 -2
- data/assets/theme/j1/modules/backstretch/js/backstretch.min.js +1 -1
- data/assets/theme/j1/modules/cookieConsent/js/cookieConsent.js +11 -11
- data/assets/theme/j1/modules/cookieConsent/js/cookieConsent.min.js +2 -1
- data/assets/theme/j1/modules/dropdowns/js/dropdowns.js +2 -2
- data/assets/theme/j1/modules/dropdowns/js/dropdowns.min.js +1 -1
- data/assets/theme/j1/modules/fab/js/fab.js +2 -2
- data/assets/theme/j1/modules/fab/js/fab.min.js +1 -1
- 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/lunr/js/j1.js +1 -1
- data/assets/theme/j1/modules/lunr/js/j1.min.js +2 -1
- data/assets/theme/j1/modules/rtable/js/rtable.js +2 -2
- data/assets/theme/j1/modules/rtable/js/rtable.min.js +2 -1
- data/assets/theme/j1/modules/scroller/js/scroller.js +31 -29
- data/assets/theme/j1/modules/scroller/js/scroller.min.js +2 -1
- data/assets/theme/j1/modules/themeSwitcher/js/switcher.js +38 -37
- data/assets/theme/j1/modules/themeSwitcher/js/switcher.min.js +2 -1
- data/assets/theme/j1/modules/translator/js/translator.js +17 -17
- data/assets/theme/j1/modules/translator/js/translator.min.js +1 -1
- 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 +11 -9
- data/assets/theme/j1/modules/videojs/plugins/players/dm/js/dailymotion.min.js +19 -0
- 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 +13 -12
- 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/assets/theme/j1/modules/videojs/{js/plugins/players/wt → plugins/players/wt/js}/wistia.js +13 -11
- data/assets/theme/j1/modules/videojs/plugins/players/wt/js/wistia.min.js +21 -0
- data/assets/theme/j1/modules/videojs/{js/plugins/players/yt → plugins/players/yt/js}/youtube.js +10 -8
- data/assets/theme/j1/modules/videojs/plugins/players/yt/js/youtube.min.js +21 -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 +140 -80
- data/lib/starter_web/_data/modules/defaults/amplitude.yml +5 -3
- 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 -22
- data/lib/starter_web/_plugins/asciidoctor/youtube-block.rb +37 -16
- data/lib/starter_web/_plugins/index/lunr.rb +1 -1
- data/lib/starter_web/assets/audio/album/emancipator/Alligator.mp3 +0 -0
- data/lib/starter_web/assets/audio/album/emancipator/DabCity.mp3 +0 -0
- data/lib/starter_web/assets/audio/album/emancipator/SeaToSky.mp3 +0 -0
- data/lib/starter_web/assets/audio/album/emancipator/TimeForSpace.mp3 +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/alligator.jpg +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/anthem.jpg +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/dab-city.jpg +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/from-dusk-to-dawn.jpg +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/safe-in-the-steep-cliffs.jpg +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/sea-to-sky.jpg +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/soon-it-will-be-cold-enough.jpg +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/tine-for-space.jpg +0 -0
- 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/audio_data.adoc +11 -6
- data/lib/starter_web/pages/public/tour/video_data.adoc +1 -0
- metadata +238 -115
- 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/dm/dailymotion.min.js +0 -19
- 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/assets/theme/j1/modules/videojs/js/plugins/players/wt/wistia.min.js +0 -21
- data/assets/theme/j1/modules/videojs/js/plugins/players/yt/youtube.min.js +0 -21
- data/lib/starter_web/assets/audio/cover/emancipator/from-dusk-to-dawn/anthem.jpg +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/from-dusk-to-dawn/from-dusk-to-dawn.jpg +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/from-dusk-to-dawn/safe-in-the-steep-cliffs.jpg +0 -0
- data/lib/starter_web/assets/audio/cover/emancipator/from-dusk-to-dawn/soon-it-will-be-cold-enough.jpg +0 -0
- 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/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/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/lib/starter_web/assets/audio/album/emancipator/{from-dusk-to-dawn → !info}/!sound.links.txt +0 -0
- /data/lib/starter_web/assets/audio/album/emancipator/{from-dusk-to-dawn/Anthem.mp3 → Anthem.mp3} +0 -0
- /data/lib/starter_web/assets/audio/album/emancipator/{from-dusk-to-dawn/DuskToDawn.mp3 → DuskToDawn.mp3} +0 -0
- /data/lib/starter_web/assets/audio/album/emancipator/{from-dusk-to-dawn/FirstSnow.mp3 → FirstSnow.mp3} +0 -0
- /data/lib/starter_web/assets/audio/album/emancipator/{from-dusk-to-dawn/SafeInTheSteepCliffs.mp3 → SafeInTheSteepCliffs.mp3} +0 -0
@@ -6,7 +6,7 @@ regenerate: true
|
|
6
6
|
|
7
7
|
{% comment %}
|
8
8
|
# -----------------------------------------------------------------------------
|
9
|
-
# ~/assets/theme/j1/adapter/js/amplitude.
|
9
|
+
# ~/assets/theme/j1/adapter/js/amplitude.41.js
|
10
10
|
# Liquid template to adapt J1 AmplitudeJS Apps
|
11
11
|
#
|
12
12
|
# Product/Info:
|
@@ -63,7 +63,7 @@ regenerate: true
|
|
63
63
|
|
64
64
|
/*
|
65
65
|
# -----------------------------------------------------------------------------
|
66
|
-
# ~/assets/theme/j1/adapter/js/amplitude.
|
66
|
+
# ~/assets/theme/j1/adapter/js/amplitude.41.js
|
67
67
|
# J1 Adapter for the amplitude module
|
68
68
|
#
|
69
69
|
# Product/Info:
|
@@ -87,34 +87,57 @@ regenerate: true
|
|
87
87
|
|
88
88
|
j1.adapter.amplitude = ((j1, window) => {
|
89
89
|
|
90
|
-
|
90
|
+
const isDev = (j1.env === "development" || j1.env === "dev") ? true : false;
|
91
|
+
|
92
|
+
// Adapter GLOBAL settings
|
91
93
|
// ---------------------------------------------------------------------------
|
92
94
|
var environment = '{{environment}}';
|
93
95
|
var cookie_names = j1.getCookieNames();
|
94
96
|
var user_state = j1.readCookie(cookie_names.user_state);
|
95
97
|
var state = 'not_started';
|
96
98
|
|
97
|
-
// module settings
|
98
99
|
// ---------------------------------------------------------------------------
|
99
|
-
|
100
100
|
// control|logging
|
101
|
-
//
|
101
|
+
// ------------------------------------
|
102
|
+
var consoleFilterSettings = {};
|
102
103
|
var _this;
|
103
104
|
var logger;
|
104
105
|
var logText;
|
105
106
|
var toJSON;
|
106
107
|
var toText;
|
107
108
|
|
109
|
+
// --------------------------------------------------------------------------
|
108
110
|
// date|time monitoring
|
109
|
-
|
111
|
+
// ------------------------------------
|
110
112
|
var startTime;
|
111
113
|
var endTime;
|
112
114
|
var startTimeModule;
|
113
115
|
var endTimeModule;
|
114
116
|
var timeSeconds;
|
115
117
|
|
116
|
-
//
|
117
|
-
//
|
118
|
+
// --------------------------------------------------------------------------
|
119
|
+
// AmplitudeJS GLOBAL settings
|
120
|
+
// ----------------------------------
|
121
|
+
const requiredForATP = false;
|
122
|
+
|
123
|
+
var AUDIO_ERROR = {
|
124
|
+
SUCCESSFUL: 0,
|
125
|
+
ABORTED: 1,
|
126
|
+
NETWORK_ERROR: 2,
|
127
|
+
DECODE_ERROR: 3,
|
128
|
+
SRC_NOT_SUPPORTED: 4,
|
129
|
+
GENERIC_ERROR: 5
|
130
|
+
};
|
131
|
+
|
132
|
+
var AUDIO_ERROR_NAMES = {
|
133
|
+
0: "successful",
|
134
|
+
1: "aborted",
|
135
|
+
2: "network error",
|
136
|
+
3: "decode error",
|
137
|
+
4: "not supported",
|
138
|
+
5: "generic error",
|
139
|
+
};
|
140
|
+
|
118
141
|
const AT_PLAYER_STATE = {
|
119
142
|
ENDED: 0,
|
120
143
|
PLAYING: 1,
|
@@ -135,18 +158,20 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
135
158
|
6: "changed",
|
136
159
|
};
|
137
160
|
|
138
|
-
var playLists
|
139
|
-
var playersUILoaded
|
140
|
-
var apiInitialized
|
141
|
-
|
142
|
-
var
|
143
|
-
var
|
161
|
+
// var playLists = {};
|
162
|
+
var playersUILoaded = { state: false };
|
163
|
+
var apiInitialized = { state: false };
|
164
|
+
var playerCounter = 0;
|
165
|
+
var load_dependencies = {};
|
166
|
+
var playersProcessed = [];
|
167
|
+
var playersHtmlLoaded = false;
|
168
|
+
var processingPlayersFinished = false;
|
169
|
+
var isFadingIn = false;
|
170
|
+
var isFadingOut = false;
|
144
171
|
|
145
172
|
var amplitudePlayerState;
|
146
173
|
var amplitudeDefaults;
|
147
174
|
var amplitudePlayers
|
148
|
-
var amplitudePlaylists
|
149
|
-
var amplitudeOptions;
|
150
175
|
|
151
176
|
var ytPlayer;
|
152
177
|
var ytpPlaybackRate
|
@@ -156,42 +181,49 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
156
181
|
var pluginManagerEnabled;
|
157
182
|
var playerExistsInPage;
|
158
183
|
|
159
|
-
|
184
|
+
|
185
|
+
// AmplitudeJS DEFAULT settings
|
160
186
|
// ---------------------------------------------------------------------------
|
161
|
-
var playerCounter = 0;
|
162
|
-
var load_dependencies = {};
|
163
|
-
var playersProcessed = [];
|
164
|
-
var playersHtmlLoaded = false;
|
165
|
-
var processingPlayersFinished = false;
|
166
187
|
|
167
|
-
|
168
|
-
|
188
|
+
// PLAYER settings
|
189
|
+
// ------------------------------------
|
190
|
+
var playerDefaultPluginManager = {{amplitude_defaults.player.plugin_manager.enabled}};
|
169
191
|
var playerDefaultType = '{{amplitude_defaults.player.type}}';
|
170
192
|
var playerDefaultVolume = {{amplitude_defaults.player.volume_slider.preset_value}};
|
171
193
|
var playerVolumeSliderStep = {{amplitude_defaults.player.volume_slider.slider_step}};
|
172
|
-
var playerRepeat =
|
173
|
-
var playerShuffle =
|
174
|
-
var playerPlayNextTitle =
|
175
|
-
var playerPauseNextTitle =
|
194
|
+
var playerRepeat = {{amplitude_defaults.player.player_repeat}};
|
195
|
+
var playerShuffle = {{amplitude_defaults.player.player_shuffle}};
|
196
|
+
var playerPlayNextTitle = {{amplitude_defaults.player.play_next_title}};
|
197
|
+
var playerPauseNextTitle = {{amplitude_defaults.player.pause_next_title}};
|
176
198
|
var playerDelayNextTitle = {{amplitude_defaults.player.delay_next_title}};
|
177
199
|
var playerForwardBackwardSkipSeconds = {{amplitude_defaults.player.forward_backward_skip_seconds}};
|
200
|
+
var playerHoverPageScrollDisabled = {{amplitude_defaults.player.player_hover_page_scroll_disabled}};
|
178
201
|
|
179
|
-
var playerSongElementHeigthMobile = {{amplitude_defaults.player.
|
180
|
-
var playerSongElementHeigthDesktop = {{amplitude_defaults.player.
|
202
|
+
var playerSongElementHeigthMobile = {{amplitude_defaults.player.player_song_element_heigth_mobile}};
|
203
|
+
var playerSongElementHeigthDesktop = {{amplitude_defaults.player.player_song_element_heigt_desktop}};
|
181
204
|
var playerScrollerSongElementMin = {{amplitude_defaults.player.player_scroller_song_element_min}};
|
182
205
|
var playerScrollControl = {{amplitude_defaults.player.player_scroll_control}};
|
183
206
|
var playerAutoScrollSongElement = {{amplitude_defaults.player.player_auto_scroll_song_element}};
|
184
207
|
|
185
|
-
// AmplitudeJS settings curently NOT used
|
186
208
|
// ---------------------------------------------------------------------------
|
187
|
-
|
188
|
-
|
189
|
-
var
|
190
|
-
|
209
|
+
// PLAYLIST settings
|
210
|
+
// ------------------------------------
|
211
|
+
var playlistAudioInfo = {{amplitude_defaults.playlist.audio_info}};
|
212
|
+
|
213
|
+
// ---------------------------------------------------------------------------
|
214
|
+
// UNUSED settings
|
215
|
+
// ------------------------------------
|
216
|
+
var playerWaveformsEnabled = {{amplitude_defaults.player.waveforms.enabled}};
|
217
|
+
var playerWaveformsSampleRate = {{amplitude_defaults.player.waveforms.sample_rate}};
|
218
|
+
var playerVisualizationEnabled = {{amplitude_defaults.player.visualization.enabled}};
|
219
|
+
var playerVisualizationName = '{{amplitude_defaults.player.visualization.name}}';
|
191
220
|
|
192
221
|
// ---------------------------------------------------------------------------
|
193
222
|
// helper functions
|
194
223
|
// ---------------------------------------------------------------------------
|
224
|
+
function forceJsError() {
|
225
|
+
throw new Error("GENERATED JavaScript error!");
|
226
|
+
}
|
195
227
|
|
196
228
|
// ---------------------------------------------------------------------------
|
197
229
|
// main
|
@@ -203,6 +235,20 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
203
235
|
// -------------------------------------------------------------------------
|
204
236
|
init: (options) => {
|
205
237
|
|
238
|
+
// -----------------------------------------------------------------------
|
239
|
+
// set console log filters (early)
|
240
|
+
// -----------------------------------------------------------------------
|
241
|
+
// consoleFilterSettings = {
|
242
|
+
// debug: false,
|
243
|
+
// };
|
244
|
+
// j1.api.consoleFilters.filter(consoleFilterSettings);
|
245
|
+
j1.api.consoleFilters.filter();
|
246
|
+
|
247
|
+
// -----------------------------------------------------------------------
|
248
|
+
// set error log filters (JS early)
|
249
|
+
// -----------------------------------------------------------------------
|
250
|
+
// j1.api.errorFilters.filter();
|
251
|
+
|
206
252
|
// -----------------------------------------------------------------------
|
207
253
|
// default module settings
|
208
254
|
// -----------------------------------------------------------------------
|
@@ -214,15 +260,33 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
214
260
|
// -----------------------------------------------------------------------
|
215
261
|
// global variable settings
|
216
262
|
// -----------------------------------------------------------------------
|
217
|
-
amplitudeDefaults
|
218
|
-
amplitudePlayers
|
219
|
-
amplitudePlaylists = $.extend({}, {{amplitude_playlists | replace: 'nil', 'null' | replace: '=>', ':' }});
|
220
|
-
amplitudeOptions = $.extend(true, {}, amplitudeDefaults, amplitudePlayers, amplitudePlaylists);
|
263
|
+
amplitudeDefaults = $.extend({}, {{amplitude_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
|
264
|
+
amplitudePlayers = $.extend({}, {{amplitude_players | replace: 'nil', 'null' | replace: '=>', ':' }});
|
221
265
|
|
222
|
-
//
|
223
|
-
//
|
224
|
-
|
225
|
-
|
266
|
+
// set AmplitudeJS data for later use (e.g events)
|
267
|
+
// -----------------------------------------------------------------------
|
268
|
+
j1.modules.amplitudejs = {};
|
269
|
+
j1.modules.amplitudejs.songIndex = false;
|
270
|
+
j1.modules.amplitudejs.defaults = amplitudeDefaults;
|
271
|
+
j1.modules.amplitudejs.players = amplitudePlayers || {};
|
272
|
+
j1.modules.amplitudejs.data = {};
|
273
|
+
j1.modules.amplitudejs.data.activePlayer = 'not_set';
|
274
|
+
j1.modules.amplitudejs.data.playerSongElementHeigth = playerSongElementHeigthDesktop;
|
275
|
+
j1.modules.amplitudejs.data.atp = {};
|
276
|
+
j1.modules.amplitudejs.data.ytp = {};
|
277
|
+
|
278
|
+
// set INITIAL AmplitudeJS data
|
279
|
+
// -----------------------------------------------------------------------
|
280
|
+
j1.modules.amplitudejs.data.atp.activeIndex = false;
|
281
|
+
j1.modules.amplitudejs.data.atp.playlist = false
|
282
|
+
j1.modules.amplitudejs.data.atp.apiError = false;
|
283
|
+
j1.modules.amplitudejs.data.atp.apiReady = false ;
|
284
|
+
j1.modules.amplitudejs.data.atp.playlist = false;
|
285
|
+
j1.modules.amplitudejs.data.atp.players = {};
|
286
|
+
j1.modules.amplitudejs.data.ytp.apiError = false;
|
287
|
+
j1.modules.amplitudejs.data.ytp.apiReady = false;
|
288
|
+
j1.modules.amplitudejs.data.ytp.players = {};
|
289
|
+
j1.modules.amplitudejs.data.ytp.plugin = false;
|
226
290
|
|
227
291
|
// -----------------------------------------------------------------------
|
228
292
|
// control|logging settings
|
@@ -230,13 +294,15 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
230
294
|
_this = j1.adapter.amplitude;
|
231
295
|
logger = log4javascript.getLogger('j1.adapter.amplitude');
|
232
296
|
|
233
|
-
//
|
297
|
+
// save amplitudejs data for later use (e.g. events)
|
298
|
+
// -----------------------------------------------------------------------
|
234
299
|
j1.adapter.amplitude.data = {};
|
235
300
|
j1.adapter.amplitude.data.atpGlobals = {};
|
236
301
|
j1.adapter.amplitude.data.ytpGlobals = {};
|
237
302
|
j1.adapter.amplitude.data.ytPlayers = {};
|
238
303
|
|
239
|
-
//
|
304
|
+
// initial amplitudejs data
|
305
|
+
// -----------------------------------------------------------------------
|
240
306
|
j1.adapter.amplitude.data.playerSongElementHeigth = playerSongElementHeigthDesktop;
|
241
307
|
j1.adapter.amplitude.data.activePlayer = 'not_set';
|
242
308
|
j1.adapter.amplitude.data.atpGlobals.activePlayerType = 'not_set';
|
@@ -256,13 +322,19 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
256
322
|
startTimeModule = Date.now();
|
257
323
|
|
258
324
|
_this.setState('started');
|
259
|
-
logger.debug('
|
260
|
-
logger.info('
|
325
|
+
logger.debug('module state: ' + _this.getState());
|
326
|
+
logger.info('module is being initialized');
|
327
|
+
|
328
|
+
// test data for console filters
|
329
|
+
// -------------------------------------------------------------------
|
330
|
+
// console.warn("consoleFilters: Diese WARNUNG wird gefiltert.");
|
331
|
+
// isDev && logger.warn("consoleFilters: Diese WARNUNG wird gefiltert.");
|
332
|
+
// console.warn("consoleFilters: Diese Meldung wird nicht gefiltert.");
|
333
|
+
// isDev && logger.warn("consoleFilters: Diese Meldung wird nicht gefiltert.");
|
261
334
|
|
262
|
-
//
|
263
|
-
//
|
264
|
-
//
|
265
|
-
// });
|
335
|
+
// test data for error filters
|
336
|
+
// -------------------------------------------------------------------
|
337
|
+
// forceJsError();
|
266
338
|
|
267
339
|
// -------------------------------------------------------------------
|
268
340
|
// create global playlist (songs)
|
@@ -327,7 +399,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
327
399
|
// -------------------------------------------------------------------------
|
328
400
|
songLoader: (songs) => {
|
329
401
|
|
330
|
-
logger.info('
|
402
|
+
logger.info('creating global playlist (API): started');
|
331
403
|
|
332
404
|
// -----------------------------------------------------------------------
|
333
405
|
// initialize amplitude songs
|
@@ -363,12 +435,21 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
363
435
|
continue;
|
364
436
|
} else if (key === 'rating') {
|
365
437
|
song.rating = item[key];
|
366
|
-
continue;
|
367
|
-
} else if (key === '
|
368
|
-
song.
|
369
|
-
continue;
|
438
|
+
continue;
|
439
|
+
} else if (key === 'playlist') {
|
440
|
+
song.playlist = item[key];
|
441
|
+
continue;
|
370
442
|
} else if (key === 'shuffle') {
|
371
|
-
song.shuffle = item[key];
|
443
|
+
song.shuffle = ((!!item[key]) === false) ? playerShuffle : item[key];
|
444
|
+
continue;
|
445
|
+
} else if (key === 'repeat') {
|
446
|
+
song.repeat = ((!!item[key]) === false) ? playerRepeat : item[key];
|
447
|
+
continue;
|
448
|
+
} else if (key === 'start') {
|
449
|
+
song.start = ((!!item[key]) === false) ? '00:00:00' : item[key];
|
450
|
+
continue;
|
451
|
+
} else if (key === 'end') {
|
452
|
+
song.end = ((!!item[key]) === false) ? '00:00:00' : item[key];
|
372
453
|
continue;
|
373
454
|
} else {
|
374
455
|
song[key] = item[key];
|
@@ -381,7 +462,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
381
462
|
|
382
463
|
{% endif %} {% endfor %}
|
383
464
|
|
384
|
-
logger.info('
|
465
|
+
logger.info('creating global playlist (API): finished');
|
385
466
|
}, // END songLoader
|
386
467
|
|
387
468
|
// -------------------------------------------------------------------------
|
@@ -393,7 +474,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
393
474
|
// -----------------------------------------------------------------------
|
394
475
|
// initialize HTML portion (UI) for all players configured|enabled
|
395
476
|
// -----------------------------------------------------------------------
|
396
|
-
logger.info('
|
477
|
+
logger.info('loading player HTML components (UI): started');
|
397
478
|
|
398
479
|
{% for player in amplitude_options.players %} {% if player.enabled %}
|
399
480
|
{% assign xhr_data_path = amplitude_options.xhr_data_path %}
|
@@ -404,7 +485,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
404
485
|
playerExistsInPage = ($('#' + '{{xhr_container_id}}')[0] !== undefined) ? true : false;
|
405
486
|
if (playerExistsInPage) {
|
406
487
|
playerCounter++;
|
407
|
-
logger.debug('
|
488
|
+
logger.debug('load player UI on ID #{{player.id}}: started');
|
408
489
|
|
409
490
|
j1.loadHTML({
|
410
491
|
xhr_container_id: '{{xhr_container_id}}',
|
@@ -428,7 +509,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
428
509
|
|
429
510
|
if (xhrLoadState === 'success') {
|
430
511
|
playersProcessed.push('{{xhr_container_id}}');
|
431
|
-
logger.debug('
|
512
|
+
logger.debug('load player UI on ID #{{player.id}}: finished');
|
432
513
|
|
433
514
|
clearInterval(load_dependencies['dependencies_met_html_loaded_{{player.id}}']);
|
434
515
|
}
|
@@ -444,7 +525,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
444
525
|
}
|
445
526
|
|
446
527
|
if (processingPlayersFinished) {
|
447
|
-
logger.info('
|
528
|
+
logger.info('loading player HTML components (UI): finished');
|
448
529
|
|
449
530
|
clearInterval(load_dependencies['dependencies_met_players_loaded']);
|
450
531
|
playersLoaded.state = true;
|
@@ -458,7 +539,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
458
539
|
// -------------------------------------------------------------------------
|
459
540
|
initApi: (songlist) => {
|
460
541
|
|
461
|
-
logger.info('
|
542
|
+
logger.info('initialze API: started');
|
462
543
|
|
463
544
|
{% comment %} collect playlists
|
464
545
|
-------------------------------------------------------------------------- {% endcomment %}
|
@@ -480,7 +561,6 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
480
561
|
{% capture song_item %}
|
481
562
|
{
|
482
563
|
"name": "{{item.title}}",
|
483
|
-
// "track": "{{item.track}}",
|
484
564
|
"artist": "{{item.artist}}",
|
485
565
|
"playlist": "{{item.playlist}}",
|
486
566
|
"album": "{{item.name}}",
|
@@ -490,8 +570,8 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
490
570
|
"start": "{{item.start}}",
|
491
571
|
"end": "{{item.end}}",
|
492
572
|
"shuffle": "{{item.shuffle}}",
|
573
|
+
"repeat": "{{item.repeat}}",
|
493
574
|
"duration": "{{item.duration}}",
|
494
|
-
"audio_single": "{{item.audio_single}}",
|
495
575
|
// "audio_fade_in": "{{item.audio_fade_in}}",
|
496
576
|
// "audio_fade_out": "{{item.audio_fade_out}}",
|
497
577
|
"cover_art_url": "{{item.cover_image}}"
|
@@ -541,15 +621,14 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
541
621
|
},
|
542
622
|
callbacks: {
|
543
623
|
initialized: function() {
|
544
|
-
|
545
|
-
logger.info('\n' + 'initialze API: finished');
|
546
|
-
// indicate api successfully initialized
|
547
|
-
apiInitialized.state = true;
|
624
|
+
onInitialized();
|
548
625
|
},
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
626
|
+
error: function(event) {
|
627
|
+
if (event === undefined) {
|
628
|
+
onAudioError(0);
|
629
|
+
} else {
|
630
|
+
onAudioError(event);
|
631
|
+
}
|
553
632
|
},
|
554
633
|
play: function() {
|
555
634
|
// make sure the player is playing
|
@@ -585,7 +664,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
585
664
|
var currentState = Amplitude.getPlayerState();
|
586
665
|
onPlayerStateChange(4);
|
587
666
|
if (playerDelayNextTitle) {
|
588
|
-
logger.debug('
|
667
|
+
logger.debug('delay on previous title: ' + songMetaData.name + ' with titleIndex ' + songMetaData.index);
|
589
668
|
}
|
590
669
|
|
591
670
|
if (playerPauseNextTitle) {
|
@@ -593,7 +672,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
593
672
|
if (amplitudePlayerState === 'playing' || amplitudePlayerState === 'stopped' ) {
|
594
673
|
setTimeout(() => {
|
595
674
|
// pause playback of next title
|
596
|
-
logger.debug('
|
675
|
+
logger.debug('paused on next title: ' + songMetaData.name);
|
597
676
|
Amplitude.pause();
|
598
677
|
}, 150);
|
599
678
|
} // END if playing
|
@@ -604,7 +683,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
604
683
|
next: function() {
|
605
684
|
onPlayerStateChange(5);
|
606
685
|
if (playerDelayNextTitle) {
|
607
|
-
logger.debug('
|
686
|
+
logger.debug('delay on next title: ' + songMetaData.name + ' with titleIndex ' + songMetaData.index);
|
608
687
|
}
|
609
688
|
|
610
689
|
if (playerPauseNextTitle) {
|
@@ -612,7 +691,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
612
691
|
if (amplitudePlayerState === 'playing' || amplitudePlayerState === 'stopped' ) {
|
613
692
|
setTimeout(() => {
|
614
693
|
// pause playback of next title
|
615
|
-
logger.debug('
|
694
|
+
logger.debug('paused on next title: ' + songMetaData.name);
|
616
695
|
Amplitude.pause();
|
617
696
|
}, 150);
|
618
697
|
} // END if playing
|
@@ -637,58 +716,6 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
637
716
|
|
638
717
|
}); // END Amplitude init
|
639
718
|
|
640
|
-
// -----------------------------------------------------------------------
|
641
|
-
// timestamp2seconds
|
642
|
-
//
|
643
|
-
// TODO: Add support for timestamp w/o hours like mm:ss
|
644
|
-
// -----------------------------------------------------------------------
|
645
|
-
function timestamp2seconds(timestamp) {
|
646
|
-
// split timestamp
|
647
|
-
const parts = timestamp.split(':');
|
648
|
-
|
649
|
-
// check timestamp format
|
650
|
-
if (parts.length !== 3) {
|
651
|
-
// return "invalid timestamp";
|
652
|
-
return false;
|
653
|
-
}
|
654
|
-
|
655
|
-
// convert parts to integers
|
656
|
-
const hours = parseInt(parts[0], 10);
|
657
|
-
const minutes = parseInt(parts[1], 10);
|
658
|
-
const seconds = parseInt(parts[2], 10);
|
659
|
-
|
660
|
-
// check valid timestamp values
|
661
|
-
if (isNaN(hours) || isNaN(minutes) || isNaN(seconds) ||
|
662
|
-
hours < 0 || hours > 23 ||
|
663
|
-
minutes < 0 || minutes > 59 ||
|
664
|
-
seconds < 0 || seconds > 59) {
|
665
|
-
return "invalid timestamp";
|
666
|
-
}
|
667
|
-
|
668
|
-
const totalSeconds = (hours * 3600) + (minutes * 60) + seconds;
|
669
|
-
|
670
|
-
return totalSeconds;
|
671
|
-
} // END timestamp2seconds
|
672
|
-
|
673
|
-
// -----------------------------------------------------------------------
|
674
|
-
// seconds2timestamp
|
675
|
-
// -----------------------------------------------------------------------
|
676
|
-
function seconds2timestamp(seconds) {
|
677
|
-
|
678
|
-
if (isNaN(seconds)) {
|
679
|
-
return false;
|
680
|
-
}
|
681
|
-
|
682
|
-
const hours = Math.floor(seconds / 3600);
|
683
|
-
const minutes = Math.floor((seconds % 3600) / 60);
|
684
|
-
const remainSeconds = seconds % 60;
|
685
|
-
const tsHours = hours.toString().padStart(2, '0');
|
686
|
-
const tsMinutes = minutes.toString().padStart(2, '0');
|
687
|
-
const tsSeconds = remainSeconds.toString().padStart(2, '0');
|
688
|
-
|
689
|
-
return `${tsHours}:${tsMinutes}:${tsSeconds}`;
|
690
|
-
} // END seconds2timestamp
|
691
|
-
|
692
719
|
// -----------------------------------------------------------------------
|
693
720
|
// atpFadeInAudio
|
694
721
|
// -----------------------------------------------------------------------
|
@@ -710,7 +737,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
710
737
|
// transition will be
|
711
738
|
const iterationSteps = {
|
712
739
|
'default': 150,
|
713
|
-
'slow':
|
740
|
+
'slow': 250,
|
714
741
|
'slower': 350,
|
715
742
|
'slowest': 500
|
716
743
|
};
|
@@ -721,7 +748,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
721
748
|
currentStep = 1;
|
722
749
|
|
723
750
|
if (volumeSlider === undefined || volumeSlider === null) {
|
724
|
-
logger.warn('
|
751
|
+
isDev && logger.warn('no volume slider found at playerID: ' + settings.playerID);
|
725
752
|
return;
|
726
753
|
}
|
727
754
|
|
@@ -767,7 +794,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
767
794
|
// transition will be
|
768
795
|
const iterationSteps = {
|
769
796
|
'default': 150,
|
770
|
-
'slow':
|
797
|
+
'slow': 250,
|
771
798
|
'slower': 350,
|
772
799
|
'slowest': 500
|
773
800
|
};
|
@@ -783,7 +810,12 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
783
810
|
var songEndTS = songMetaData.end;
|
784
811
|
var playlist = songMetaData.playlist;
|
785
812
|
var songIndex = songMetaData.index;
|
786
|
-
var trackID = songIndex + 1;
|
813
|
+
var trackID = songIndex + 1;
|
814
|
+
|
815
|
+
// save AT player data for later use (e.g. events)
|
816
|
+
// ---------------------------------------------------------------------
|
817
|
+
j1.modules.amplitudejs.data.atp.activeIndex = songIndex;
|
818
|
+
j1.modules.amplitudejs.data.atp.playlist = playlist;
|
787
819
|
|
788
820
|
if (volumeSlider !== null) {
|
789
821
|
const fadeOutInterval = setInterval(() => {
|
@@ -798,7 +830,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
798
830
|
songs = Amplitude.getSongsInPlaylist(playlist);
|
799
831
|
|
800
832
|
if (songIndex === songs.length-1) {
|
801
|
-
logger.debug('
|
833
|
+
logger.debug('restore player volume on last trackID|volume at: ' + trackID + '|' + defaultVolume);
|
802
834
|
volumeSlider.value = defaultVolume;
|
803
835
|
}
|
804
836
|
|
@@ -816,131 +848,69 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
816
848
|
// wrraper for states that are not processed
|
817
849
|
// -----------------------------------------------------------------------
|
818
850
|
function doNothingOnStateChange(state) {
|
819
|
-
var playlist,
|
851
|
+
var playlist, playerID, songMetaData,
|
852
|
+
songIndex, trackID;
|
820
853
|
|
821
854
|
playlist = Amplitude.getActivePlaylist();
|
855
|
+
playerID = playlist + '_large';
|
822
856
|
songMetaData = Amplitude.getActiveSongMetadata();
|
823
857
|
songIndex = songMetaData.index;
|
824
858
|
trackID = songIndex + 1;
|
825
859
|
|
826
|
-
|
860
|
+
// save AT player data for later use (e.g. events)
|
861
|
+
// ---------------------------------------------------------------------
|
862
|
+
j1.modules.amplitudejs.data.atp.activeIndex = songIndex;
|
863
|
+
j1.modules.amplitudejs.data.atp.playlist = playlist;
|
864
|
+
|
865
|
+
isDev && logger.warn(`DO NOTHING on StateChange for playlist: ${playlist} at trackID|state: ${trackID}|${AT_PLAYER_STATE_NAMES[state]}`);
|
827
866
|
|
828
867
|
} // END doNothingOnStateChange
|
829
868
|
|
830
869
|
// -----------------------------------------------------------------------
|
831
870
|
// processOnStateChangePlaying()
|
832
871
|
//
|
833
|
-
// wrraper to
|
872
|
+
// wrraper to process the ACTIVE player on state PLAYING
|
834
873
|
// -----------------------------------------------------------------------
|
835
874
|
function processOnStateChangePlaying(state) {
|
836
|
-
var
|
837
|
-
activePlayerType, startVolume, songIndex, trackID,
|
838
|
-
ratingIndex, rating, ratingElement, songMetaData,
|
839
|
-
songStartTS, songEndTS, songStartSec, songEndSec,
|
840
|
-
screenControlRatingElements, screenControlRating;
|
875
|
+
var songMetaData, songIndex, playlist, trackID;
|
841
876
|
|
842
877
|
songMetaData = Amplitude.getActiveSongMetadata();
|
843
878
|
songIndex = songMetaData.index;
|
844
|
-
|
879
|
+
playlist = Amplitude.getActivePlaylist();
|
845
880
|
trackID = songIndex + 1;
|
846
|
-
songStartTS = songMetaData.start;
|
847
|
-
songEndTS = songMetaData.end;
|
848
|
-
songStartSec = timestamp2seconds(songStartTS);
|
849
|
-
songEndSec = timestamp2seconds(songEndTS);
|
850
|
-
startVolume = Amplitude.getVolume();
|
851
881
|
|
852
|
-
|
882
|
+
// save AT player data for later use (e.g. events)
|
883
|
+
// ---------------------------------------------------------------------
|
884
|
+
j1.modules.amplitudejs.data.atp.activeIndex = songIndex;
|
885
|
+
j1.modules.amplitudejs.data.atp.playlist = playlist;
|
853
886
|
|
854
|
-
|
855
|
-
// -------------------------------------------------------------------
|
856
|
-
j1.adapter.amplitude.atUpdateSongRating(Amplitude.getActiveSongMetadata());
|
887
|
+
logger.debug(`PLAY audio on AT Player at playlist|trackID: ${playlist}|${trackID}`);
|
857
888
|
|
858
|
-
//
|
859
|
-
|
860
|
-
|
889
|
+
// save player GLOBAL data for later use (e.g. events)
|
890
|
+
j1.adapter.amplitude.data.activePlayer = 'atp';
|
891
|
+
|
892
|
+
// set song (manually) active at index in playlist
|
893
|
+
_this.setSongActive(playlist, songIndex);
|
861
894
|
|
862
895
|
// stop active YT players
|
863
|
-
//
|
864
|
-
|
865
|
-
for (let i=0; i<ytPlayers.length; i++) {
|
866
|
-
const playerID = ytPlayers[i];
|
867
|
-
const playerProperties = j1.adapter.amplitude.data.ytPlayers[playerID];
|
868
|
-
logger.debug('\n' + 'process player id: ' + playerID);
|
869
|
-
var ytpPlayer = j1.adapter.amplitude.data.ytPlayers[playerID].player;
|
870
|
-
var playerState = ytpPlayer.getPlayerState();
|
871
|
-
var ytpPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
872
|
-
|
873
|
-
if (ytpPlayerState === 'playing' || ytpPlayerState === 'paused' || ytpPlayerState === 'buffering') {
|
874
|
-
logger.debug('\n' + 'process player id: ' + playerID + ' stopped');
|
875
|
-
ytpPlayer.stopVideo();
|
876
|
-
}
|
877
|
-
}
|
896
|
+
// ---------------------------------------------------------------------
|
897
|
+
_this.atpStopParallelActivePlayers(j1.adapter.amplitude.data.ytPlayers);
|
878
898
|
|
879
|
-
//
|
880
|
-
//
|
881
|
-
|
882
|
-
if (!isFadingIn) {
|
883
|
-
var currentAudioTime = Amplitude.getSongPlayedSeconds();
|
884
|
-
if (songStartSec && currentAudioTime <= songStartSec) {
|
885
|
-
var songDurationSec = timestamp2seconds(songMetaData.duration);
|
886
|
-
|
887
|
-
// seek audio to configured START position
|
888
|
-
// NOTE: use setSongPlayedPercentage for seeking to NOT
|
889
|
-
// generation any addition state changes like stopped
|
890
|
-
// or playing
|
891
|
-
logger.debug('\n' + 'seek audio in on playlist: ' + playList + ' at|to trackID|timestamp: ' + trackID + '|' + songStartTS);
|
892
|
-
Amplitude.setSongPlayedPercentage((songStartSec / songDurationSec) * 100);
|
893
|
-
|
894
|
-
// fade-in audio (if enabled)
|
895
|
-
var fadeAudioIn = (songMetaData.audio_fade_in === 'true') ? true : false;
|
896
|
-
if (fadeAudioIn) {
|
897
|
-
logger.debug('\n' + 'faden audio in on playlist: ' + playList + ' at|to trackID|timestamp: ' + trackID + '|' + songStartTS);
|
898
|
-
atpFadeInAudio({ playerID: playerID });
|
899
|
-
} // END if fadeAudio
|
899
|
+
// update song rating in playlist-screen|meta-container
|
900
|
+
// ---------------------------------------------------------------------
|
901
|
+
_this.atpUpdatMetaContainers(songMetaData);
|
900
902
|
|
901
|
-
|
903
|
+
// scroll active song in players playlist
|
904
|
+
// ---------------------------------------------------------------------
|
905
|
+
_this.atPlayerScrollToActiveElement(songMetaData);
|
902
906
|
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
//
|
908
|
-
//
|
909
|
-
|
910
|
-
var checkIsOnVideoEnd = setInterval(() => {
|
911
|
-
|
912
|
-
if (!isFadingOut) {
|
913
|
-
var currentAudioTime = Amplitude.getSongPlayedSeconds();
|
914
|
-
var songMetaData = Amplitude.getActiveSongMetadata();
|
915
|
-
var songEndTS = songMetaData.end;
|
916
|
-
var songEndSec = timestamp2seconds(songEndTS);
|
917
|
-
|
918
|
-
if (currentAudioTime > songEndSec) {
|
919
|
-
songMetaData = Amplitude.getActiveSongMetadata();
|
920
|
-
songIndex = songMetaData.index;
|
921
|
-
trackID = songIndex + 1;
|
922
|
-
|
923
|
-
// seek audio out to total end END position
|
924
|
-
// NOTE: use setSongPlayedPercentage for seeking to NOT
|
925
|
-
// generation any addition state changes like stopped
|
926
|
-
// or playing
|
927
|
-
logger.debug('\n' + 'seek audio out to end on playlist: ' + playList + ' at trackID|timestamp: ' + trackID + '|' + songEndTS);
|
928
|
-
Amplitude.setSongPlayedPercentage(99.99);
|
929
|
-
|
930
|
-
// fade-out audio (if enabled)
|
931
|
-
var fadeAudioOut = (songMetaData.audio_fade_out === 'true') ? true : false;
|
932
|
-
if (fadeAudioOut) {
|
933
|
-
logger.debug('\n' + 'fade audio out on playlist: ' + playList + ' at|to trackID|timestamp: ' + trackID + '|' + songEndTS);
|
934
|
-
atpFadeAudioOut({ playerID: playerID });
|
935
|
-
} // END if fadeAudio
|
936
|
-
|
937
|
-
clearInterval(checkIsOnVideoEnd);
|
938
|
-
} // END if currentAudioTime
|
939
|
-
|
940
|
-
} // END if !isFading
|
941
|
-
|
942
|
-
}, 100); // END checkIsOnVideoEnd
|
943
|
-
} // END if songEndSec
|
907
|
+
// process audio for AT players at configured START position
|
908
|
+
// ---------------------------------------------------------------------
|
909
|
+
_this.atpProcessAudioStartPosition();
|
910
|
+
|
911
|
+
// process audio for AT players at configured END position
|
912
|
+
// ---------------------------------------------------------------------
|
913
|
+
_this.atpProcessAudioEndPosition();
|
944
914
|
|
945
915
|
// save YT player data for later use (e.g. events)
|
946
916
|
// ---------------------------------------------------------------------
|
@@ -949,6 +919,28 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
949
919
|
|
950
920
|
}; // END processOnStateChangePlaying
|
951
921
|
|
922
|
+
// -----------------------------------------------------------------------
|
923
|
+
// onInitialized
|
924
|
+
//
|
925
|
+
// Errors fired by the YT API
|
926
|
+
// -----------------------------------------------------------------------
|
927
|
+
function onInitialized() {
|
928
|
+
// indicate api failed on initialization
|
929
|
+
apiInitialized.state = true;
|
930
|
+
j1.modules.amplitudejs.data.atp.apiReady = apiInitialized.state;
|
931
|
+
} // END onInitialized
|
932
|
+
|
933
|
+
// -----------------------------------------------------------------------
|
934
|
+
// onAudioError
|
935
|
+
//
|
936
|
+
// Errors fired by the YT API
|
937
|
+
// -----------------------------------------------------------------------
|
938
|
+
function onAudioError(event) {
|
939
|
+
if (event > 0) {
|
940
|
+
logger.warn(`Audio API error occured: ${AUDIO_ERROR_NAMES[event]}`);
|
941
|
+
}
|
942
|
+
} // END onAudioError
|
943
|
+
|
952
944
|
// -----------------------------------------------------------------------
|
953
945
|
// onPlayerStateChange
|
954
946
|
//
|
@@ -989,7 +981,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
989
981
|
doNothingOnStateChange(AT_PLAYER_STATE.ENDED);
|
990
982
|
break;
|
991
983
|
default:
|
992
|
-
logger.error(
|
984
|
+
logger.error(`UNKNOWN state on StateChange fired: ${state}`);
|
993
985
|
} // END switch state
|
994
986
|
} // END onPlayerStateChange
|
995
987
|
|
@@ -1034,7 +1026,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1034
1026
|
var parentContainer = (document.getElementById('{{xhr_container_id}}') !== null) ? true : false;
|
1035
1027
|
var parentContainerExist = ($('#' + '{{xhr_container_id}}')[0] !== undefined) ? true : false;
|
1036
1028
|
|
1037
|
-
logger.info('
|
1029
|
+
logger.info('initialize player specific UI events: started');
|
1038
1030
|
|
1039
1031
|
{% for player in amplitude_options.players %} {% if player.enabled %}
|
1040
1032
|
{% assign xhr_data_path = amplitude_options.xhr_data_path %}
|
@@ -1055,22 +1047,22 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1055
1047
|
if (xhrDataLoaded && playerExistsInPage) {
|
1056
1048
|
var playerID = '{{player.id}}';
|
1057
1049
|
var playerType = '{{player.type}}';
|
1058
|
-
var
|
1059
|
-
var
|
1060
|
-
var
|
1050
|
+
var playlist = '{{player.playlist}}';
|
1051
|
+
var playlistName = '{{player.playlist.name}}';
|
1052
|
+
var playlistTitle = '{{player.playlist.title}}';
|
1061
1053
|
|
1062
|
-
logger.debug('
|
1054
|
+
logger.debug('initialize audio player instance on id: {{player.id}}');
|
1063
1055
|
|
1064
1056
|
// set song (title) specific audio info links
|
1065
1057
|
// -------------------------------------------------------------
|
1066
|
-
if (
|
1058
|
+
if (playlistAudioInfo) {
|
1067
1059
|
var infoLinks = document.getElementsByClassName('audio-info-link');
|
1068
1060
|
_this.setAudioInfo(infoLinks);
|
1069
1061
|
}
|
1070
1062
|
|
1071
1063
|
// set player specific UI events
|
1072
1064
|
// -------------------------------------------------------------
|
1073
|
-
logger.debug('
|
1065
|
+
logger.debug('setup audio player specific UI events on ID #{{player.id}}: started');
|
1074
1066
|
|
1075
1067
|
var dependencies_met_api_initialized = setInterval (() => {
|
1076
1068
|
if (apiInitialized.state) {
|
@@ -1090,7 +1082,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1090
1082
|
// do nothing (managed by plugin)
|
1091
1083
|
} else {
|
1092
1084
|
// var currentPlaylist = compactPlayerPlayPauseButton[i].dataset.amplitudePlaylist;
|
1093
|
-
// if (currentPlaylist ===
|
1085
|
+
// if (currentPlaylist === playlistName) {
|
1094
1086
|
if (miniPlayerPlayPauseButton[i].id === 'mini_player_play_pause_{{player.id}}') {
|
1095
1087
|
miniPlayerPlayPauseButton[i].addEventListener('click', function(event) {
|
1096
1088
|
var ytpPlayer;
|
@@ -1135,9 +1127,9 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1135
1127
|
|
1136
1128
|
// show|hide scrollbar in playlist (compact player)
|
1137
1129
|
// -------------------------------------------------------
|
1138
|
-
const songsInPlaylist = Amplitude.getSongsInPlaylist(
|
1130
|
+
const songsInPlaylist = Amplitude.getSongsInPlaylist(playlistName);
|
1139
1131
|
if (songsInPlaylist.length <= playerScrollerSongElementMin) {
|
1140
|
-
const titleListCompactPlayer = document.getElementById('compact_player_title_list_' +
|
1132
|
+
const titleListCompactPlayer = document.getElementById('compact_player_title_list_' + playlistName);
|
1141
1133
|
if (titleListCompactPlayer !== null) {
|
1142
1134
|
titleListCompactPlayer.classList.add('hide-scrollbar');
|
1143
1135
|
}
|
@@ -1268,7 +1260,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1268
1260
|
// do nothing (managed by plugin)
|
1269
1261
|
} else {
|
1270
1262
|
// var currentPlaylist = compactPlayerPlayPauseButton[i].dataset.amplitudePlaylist;
|
1271
|
-
// if (currentPlaylist ===
|
1263
|
+
// if (currentPlaylist === playlistName) {
|
1272
1264
|
if (compactPlayerPlayPauseButton[i].id === 'compact_player_play_pause_{{player.id}}' || compactPlayerPlayPauseButton[i].id === 'compact_player_list_play_pause_{{player.id}}') {
|
1273
1265
|
compactPlayerPlayPauseButton[i].addEventListener('click', function(event) {
|
1274
1266
|
var ytpPlayer;
|
@@ -1280,13 +1272,13 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1280
1272
|
for (let i=0; i<ytPlayers.length; i++) {
|
1281
1273
|
const playerID = ytPlayers[i];
|
1282
1274
|
const playerProperties = j1.adapter.amplitude.data.ytPlayers[playerID];
|
1283
|
-
logger.debug('
|
1275
|
+
logger.debug('process player id: ' + playerID);
|
1284
1276
|
ytpPlayer = j1.adapter.amplitude.data.ytPlayers[playerID].player;
|
1285
1277
|
playerState = ytpPlayer.getPlayerState();
|
1286
1278
|
ytpPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1287
1279
|
|
1288
1280
|
if (ytpPlayerState === 'playing' || ytpPlayerState === 'paused' || ytpPlayerState === 'buffering') {
|
1289
|
-
logger.debug('
|
1281
|
+
logger.debug('process player id: ' + playerID + ' stopped');
|
1290
1282
|
ytpPlayer.stopVideo();
|
1291
1283
|
}
|
1292
1284
|
}
|
@@ -1391,17 +1383,19 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1391
1383
|
if (document.getElementById('{{player.id}}') !== null) {
|
1392
1384
|
// var playlist = '{{player.id}}_yt';
|
1393
1385
|
var playlistInfo = {{player.playlist | replace: 'nil', 'null' | replace: '=>', ':'}};
|
1394
|
-
var
|
1386
|
+
var playlist = playlistInfo.name;
|
1395
1387
|
|
1388
|
+
{% comment %} PREPARED event listener for LATER use
|
1389
|
+
----------------------------------------------------------
|
1396
1390
|
// add listeners to all SongContainers found (LARGE player)
|
1397
|
-
// -------------------------------------------------------
|
1391
|
+
// -------------------------------------------------------
|
1398
1392
|
var largePlayerSongContainer = document.getElementsByClassName("amplitude-song-container");
|
1399
1393
|
for (var i=0; i<largePlayerSongContainer.length; i++) {
|
1400
1394
|
if (largePlayerSongContainer[i].dataset.amplitudeSource === 'youtube') {
|
1401
1395
|
// do nothing for YTP (managed by plugin)
|
1402
1396
|
} else {
|
1403
1397
|
var currentPlaylist = largePlayerSongContainer[i].dataset.amplitudePlaylist;
|
1404
|
-
if (currentPlaylist ===
|
1398
|
+
if (currentPlaylist === playlist) {
|
1405
1399
|
// if (largePlayerSongContainer[i].id === 'large-player-play-pause_{{player.id}}' || largePlayerSongContainer[i].id === 'large-player-play-pause_{{player.id}}') {
|
1406
1400
|
largePlayerSongContainer[i].addEventListener('click', function(event) {
|
1407
1401
|
var ytpPlayer, ytpPlayerState, ytpPlayerState, atpPlayerState,
|
@@ -1415,55 +1409,19 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1415
1409
|
metaData = Amplitude.getActiveSongMetadata();
|
1416
1410
|
atpPlayerState = Amplitude.getPlayerState();
|
1417
1411
|
|
1418
|
-
// update song rating in screen controls
|
1419
|
-
// -----------------------------------------------
|
1420
|
-
// updateSongRating(playlist, metaData.index, metaData.rating);
|
1421
|
-
|
1422
|
-
// var largePlayerSongAudioRating = document.getElementsByClassName("audio-rating-screen-controls");
|
1423
|
-
// if (largePlayerSongAudioRating.length) {
|
1424
|
-
// for (var i=0; i<largePlayerSongAudioRating.length; i++) {
|
1425
|
-
// var currentPlaylist = largePlayerSongAudioRating[i].dataset.amplitudePlaylist;
|
1426
|
-
// if (currentPlaylist === playlist) {
|
1427
|
-
// if (metaData.rating) {
|
1428
|
-
// var trackID = metaData.index + 1;
|
1429
|
-
// logger.debug('\n' + `UPDATE song rating on updatMetaContainers for trackID|playlist at: ${trackID}|${playlist} with a value of: ${metaData.rating}`);
|
1430
|
-
// largePlayerSongAudioRating[i].innerHTML = '<img src="/assets/image/pattern/rating/scalable/' + metaData.rating + '-star.svg"' + 'alt="song rating">';
|
1431
|
-
// } else {
|
1432
|
-
// largePlayerSongAudioRating[i].innerHTML = '';
|
1433
|
-
// }
|
1434
|
-
// }
|
1435
|
-
// }
|
1436
|
-
// } // END if largePlayerSongAudioRating
|
1437
|
-
|
1438
|
-
// scroll song active at index in player
|
1439
|
-
// -----------------------------------------------
|
1440
|
-
// if (playerAutoScrollSongElement) {
|
1441
|
-
// j1.adapter.amplitude.atPlayerScrollToActiveElement(playlist);
|
1442
|
-
// }
|
1443
|
-
|
1444
|
-
// toggle active AT players
|
1445
|
-
// -----------------------------------------------
|
1446
|
-
// if (atpPlayerState === 'playing') {
|
1447
|
-
// // start|pause active player
|
1448
|
-
// // logger.debug('\n' + 'process player id: ' + atpPlayerActive[0] + ' stopped');
|
1449
|
-
// Amplitude.pause();
|
1450
|
-
// } else {
|
1451
|
-
// Amplitude.playPlaylistSongAtIndex(playlistIndex, playlist);
|
1452
|
-
// }
|
1453
|
-
|
1454
1412
|
// stop active YT players
|
1455
1413
|
// -----------------------------------------------
|
1456
1414
|
const ytPlayers = Object.keys(j1.adapter.amplitude.data.ytPlayers);
|
1457
1415
|
for (let i=0; i<ytPlayers.length; i++) {
|
1458
1416
|
const playerID = ytPlayers[i];
|
1459
1417
|
const playerProperties = j1.adapter.amplitude.data.ytPlayers[playerID];
|
1460
|
-
logger.debug('
|
1418
|
+
logger.debug('process player id: ' + playerID);
|
1461
1419
|
ytpPlayer = j1.adapter.amplitude.data.ytPlayers[playerID].player;
|
1462
1420
|
playerState = ytpPlayer.getPlayerState();
|
1463
1421
|
ytpPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1464
1422
|
|
1465
1423
|
if (ytpPlayerState === 'playing' || ytpPlayerState === 'paused' || ytpPlayerState === 'buffering') {
|
1466
|
-
logger.debug('
|
1424
|
+
logger.debug('process player id: ' + playerID + ' stopped');
|
1467
1425
|
ytpPlayer.stopVideo();
|
1468
1426
|
}
|
1469
1427
|
}
|
@@ -1477,6 +1435,8 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1477
1435
|
} // END if currentPlaylist
|
1478
1436
|
} // ENF if largePlayerSongContainer
|
1479
1437
|
} // END for largePlayerSongContainer
|
1438
|
+
----------------------------------------------------------
|
1439
|
+
{% endcomment %}
|
1480
1440
|
|
1481
1441
|
// click on prev button
|
1482
1442
|
var largePlayerPreviousButton = document.getElementById('large_player_previous');
|
@@ -1484,18 +1444,17 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1484
1444
|
// do nothing for YTP (managed by plugin)
|
1485
1445
|
}
|
1486
1446
|
|
1487
|
-
// add listeners to all PlayPause Buttons found (LARGE player)
|
1488
|
-
// -------------------------------------------------------
|
1489
|
-
|
1490
1447
|
{% comment %} PREPARED event listener for LATER use
|
1491
|
-
----------------------------------------------------------
|
1448
|
+
----------------------------------------------------------
|
1449
|
+
// add listeners to all PlayPause Buttons found (LARGE player)
|
1450
|
+
// -------------------------------------------------------
|
1492
1451
|
var largePlayerPlayPauseButton = document.getElementsByClassName('large-player-play-pause');
|
1493
1452
|
for (var i=0; i<largePlayerPlayPauseButton.length; i++) {
|
1494
1453
|
if (largePlayerPlayPauseButton[i].dataset.amplitudeSource === 'youtube') {
|
1495
1454
|
// do nothing for YTP (managed by plugin)
|
1496
1455
|
} else {
|
1497
1456
|
var currentPlaylist = largePlayerPlayPauseButton[i].dataset.amplitudePlaylist;
|
1498
|
-
if (currentPlaylist ===
|
1457
|
+
if (currentPlaylist === playlist) {
|
1499
1458
|
largePlayerPlayPauseButton[i].addEventListener('click', function(event) {
|
1500
1459
|
var ytpPlayer, ytpPlayerState, playlist, metaData, playerState;
|
1501
1460
|
|
@@ -1528,8 +1487,10 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1528
1487
|
}
|
1529
1488
|
} // END for
|
1530
1489
|
|
1490
|
+
{% comment %} PREPARED event listener for LATER use
|
1491
|
+
----------------------------------------------------------
|
1531
1492
|
// add listeners to all Next Buttons found (LARGE player)
|
1532
|
-
// -------------------------------------------------------
|
1493
|
+
// -------------------------------------------------------
|
1533
1494
|
var largeNextButtons = document.getElementsByClassName("large-player-next");
|
1534
1495
|
for (var i=0; i<largeNextButtons.length; i++) {
|
1535
1496
|
if (largeNextButtons[i].dataset.amplitudeSource === 'youtube') {
|
@@ -1544,39 +1505,15 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1544
1505
|
playlist = this.getAttribute("data-amplitude-playlist");
|
1545
1506
|
metaData = Amplitude.getActiveSongMetadata();
|
1546
1507
|
|
1547
|
-
// update song rating in screen controls
|
1548
|
-
var largePlayerSongAudioRating = document.getElementsByClassName("audio-rating-screen-controls");
|
1549
|
-
if (largePlayerSongAudioRating.length) {
|
1550
|
-
for (var i=0; i<largePlayerSongAudioRating.length; i++) {
|
1551
|
-
var currentPlaylist = largePlayerSongAudioRating[i].dataset.amplitudePlaylist;
|
1552
|
-
if (currentPlaylist === playlist) {
|
1553
|
-
if (metaData.rating) {
|
1554
|
-
var trackID = metaData.index + 1;
|
1555
|
-
logger.debug('\n' + `UPDATE song rating on updatMetaContainers for trackID|playlist at: ${trackID}|${playlist} with a value of: ${metaData.rating}`);
|
1556
|
-
largePlayerSongAudioRating[i].innerHTML = '<img src="/assets/image/pattern/rating/scalable/' + metaData.rating + '-star.svg"' + 'alt="song rating">';
|
1557
|
-
} else {
|
1558
|
-
largePlayerSongAudioRating[i].innerHTML = '';
|
1559
|
-
}
|
1560
|
-
}
|
1561
|
-
}
|
1562
|
-
} // END if largePlayerSongAudioRating
|
1563
|
-
|
1564
|
-
// scroll song active at index in player
|
1565
|
-
// -----------------------------------------------
|
1566
|
-
if (playerAutoScrollSongElement) {
|
1567
|
-
j1.adapter.amplitude.atPlayerScrollToActiveElement(playlist);
|
1568
|
-
}
|
1569
|
-
|
1570
|
-
// save YT player data for later use (e.g. events)
|
1571
|
-
// -----------------------------------------------
|
1572
|
-
j1.adapter.amplitude.data.activePlayer = 'atp';
|
1573
|
-
j1.adapter.amplitude.data.atpGlobals.activePlayerType = atpPlayerActive[0];
|
1574
|
-
|
1575
1508
|
}); // END EventListener 'click'
|
1576
1509
|
} // END addEventListener
|
1577
1510
|
} // END if largeNextButtons
|
1578
1511
|
} // END for Next Buttons
|
1512
|
+
----------------------------------------------------------
|
1513
|
+
{% endcomment %}
|
1579
1514
|
|
1515
|
+
{% comment %} PREPARED event listener for LATER use
|
1516
|
+
----------------------------------------------------------
|
1580
1517
|
// add listeners to all Previous Buttons found
|
1581
1518
|
// -------------------------------------------------------
|
1582
1519
|
var largePreviousButtons = document.getElementsByClassName("large-player-previous");
|
@@ -1601,7 +1538,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1601
1538
|
if (currentPlaylist === playlist) {
|
1602
1539
|
if (metaData.rating) {
|
1603
1540
|
var trackID = metaData.index + 1;
|
1604
|
-
logger.debug(
|
1541
|
+
logger.debug(`UPDATE song rating on updatMetaContainers for trackID|playlist at: ${trackID}|${playlist} with a value of: ${metaData.rating}`);
|
1605
1542
|
largePlayerSongAudioRating[i].innerHTML = '<img src="/assets/image/pattern/rating/scalable/' + metaData.rating + '-star.svg"' + 'alt="song rating">';
|
1606
1543
|
} else {
|
1607
1544
|
largePlayerSongAudioRating[i].innerHTML = '';
|
@@ -1612,12 +1549,12 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1612
1549
|
|
1613
1550
|
// scroll song active at index in player
|
1614
1551
|
if (playerAutoScrollSongElement) {
|
1615
|
-
j1.adapter.amplitude.atPlayerScrollToActiveElement(
|
1552
|
+
j1.adapter.amplitude.atPlayerScrollToActiveElement(Amplitude.getActiveSongMetadata());
|
1616
1553
|
}
|
1617
1554
|
|
1618
1555
|
// scroll song active at index in player
|
1619
1556
|
if (playerAutoScrollSongElement) {
|
1620
|
-
j1.adapter.amplitude.atPlayerScrollToActiveElement(
|
1557
|
+
j1.adapter.amplitude.atPlayerScrollToActiveElement(Amplitude.getActiveSongMetadata());
|
1621
1558
|
}
|
1622
1559
|
|
1623
1560
|
// save YT player data for later use (e.g. events)
|
@@ -1628,6 +1565,8 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1628
1565
|
} // END if largePreviousButtons
|
1629
1566
|
} // END if largePreviousButtons
|
1630
1567
|
} // END for Previous Buttons
|
1568
|
+
----------------------------------------------------------
|
1569
|
+
{% endcomment %}
|
1631
1570
|
|
1632
1571
|
// add listeners to all SkipForward Buttons found
|
1633
1572
|
// See: https://github.com/serversideup/amplitudejs/issues/384
|
@@ -1645,7 +1584,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1645
1584
|
const targetTime = parseFloat(currentTime + skipOffset);
|
1646
1585
|
|
1647
1586
|
if (currentTime > 0) {
|
1648
|
-
logger.debug(
|
1587
|
+
logger.debug(`SKIP forward on Button skipForward for ${skipOffset} seconds`);
|
1649
1588
|
Amplitude.setSongPlayedPercentage((targetTime / duration) * 100);
|
1650
1589
|
}
|
1651
1590
|
}); // END addEventListener
|
@@ -1668,7 +1607,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1668
1607
|
const targetTime = parseFloat(currentTime - skipOffset);
|
1669
1608
|
|
1670
1609
|
if (currentTime > 0) {
|
1671
|
-
logger.debug(
|
1610
|
+
logger.debug(`SKIP backward on Button skipForward for ${skipOffset} seconds`);
|
1672
1611
|
Amplitude.setSongPlayedPercentage((targetTime / duration) * 100);
|
1673
1612
|
}
|
1674
1613
|
}); // END addEventListener
|
@@ -1681,7 +1620,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1681
1620
|
if (largePlayerShuffleButton) {
|
1682
1621
|
largePlayerShuffleButton.addEventListener('click', function(event) {
|
1683
1622
|
var shuffleState = (document.getElementById('large_player_shuffle').className.includes('amplitude-shuffle-on')) ? true : false;
|
1684
|
-
logger.debug(
|
1623
|
+
logger.debug(`Set shuffle state to: ${shuffleState}`);
|
1685
1624
|
Amplitude.setShuffle(shuffleState)
|
1686
1625
|
}); // END addEventListener
|
1687
1626
|
} // END if largePlayerShuffleButton
|
@@ -1691,20 +1630,21 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1691
1630
|
if (largePlayerRepeatButton) {
|
1692
1631
|
largePlayerRepeatButton.addEventListener('click', function(event) {
|
1693
1632
|
var repeatState = (document.getElementById('large_player_repeat').className.includes('amplitude-repeat-on')) ? true : false;
|
1694
|
-
logger.debug(
|
1633
|
+
logger.debug(`Set repeat state to: ${repeatState}`);
|
1695
1634
|
Amplitude.setRepeat(repeatState)
|
1696
1635
|
}); // END addEventListener
|
1697
1636
|
} // END if largePlayerRepeatButton
|
1698
1637
|
|
1699
|
-
// enable|disable scrolling on playlist (LARGE player)
|
1638
|
+
// enable|disable PAGE scrolling on players playlist (LARGE player)
|
1700
1639
|
// -------------------------------------------------------
|
1701
|
-
if (document.getElementById('large_player_right') !== null) {
|
1640
|
+
// if (playerHoverPageScrollDisabled && document.getElementById('large_player_right') !== null) {
|
1641
|
+
if (playerHoverPageScrollDisabled) {
|
1702
1642
|
|
1703
1643
|
// show|hide scrollbar in playlist
|
1704
1644
|
// -----------------------------------------------------
|
1705
|
-
|
1645
|
+
const songsInPlaylist = Amplitude.getSongsInPlaylist(playlistName);
|
1706
1646
|
if (songsInPlaylist.length <= playerScrollerSongElementMin) {
|
1707
|
-
const titleListLargePlayer = document.getElementById('large_player_title_list_' +
|
1647
|
+
const titleListLargePlayer = document.getElementById('large_player_title_list_' + playlistName);
|
1708
1648
|
if (titleListLargePlayer !== null) {
|
1709
1649
|
titleListLargePlayer.classList.add('hide-scrollbar');
|
1710
1650
|
}
|
@@ -1783,7 +1723,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1783
1723
|
}
|
1784
1724
|
}); // END addEventListener
|
1785
1725
|
|
1786
|
-
} // END enable|disable scrolling on playlist
|
1726
|
+
} // END enable|disable PAGE scrolling on players playlist
|
1787
1727
|
|
1788
1728
|
// set volume slider presets (for the player when exists|enabled)
|
1789
1729
|
//
|
@@ -1804,14 +1744,16 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1804
1744
|
|
1805
1745
|
} // END large player UI events
|
1806
1746
|
{% endif %}
|
1747
|
+
{% comment %} END process UI events for all LARGE Players
|
1748
|
+
============================================================ {% endcomment %}
|
1807
1749
|
|
1808
1750
|
// ---------------------------------------------------------
|
1809
1751
|
// START configured player features
|
1810
1752
|
|
1811
|
-
logger.debug('
|
1812
|
-
logger.debug('
|
1813
|
-
logger.debug('
|
1814
|
-
logger.debug('
|
1753
|
+
logger.debug('set play next title: ' + playerPlayNextTitle);
|
1754
|
+
logger.debug('set delay between titles: ' + playerDelayNextTitle + 'ms');
|
1755
|
+
logger.debug('set repeat (album): ' + playerRepeat);
|
1756
|
+
logger.debug('set shuffle (album): ' + playerShuffle);
|
1815
1757
|
|
1816
1758
|
// set delay between titles (songs)
|
1817
1759
|
Amplitude.setDelay(playerDelayNextTitle);
|
@@ -1825,8 +1767,8 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1825
1767
|
|
1826
1768
|
// finished messages
|
1827
1769
|
// ---------------------------------------------------------
|
1828
|
-
logger.debug('
|
1829
|
-
logger.debug('
|
1770
|
+
logger.debug('current player state: ' + amplitudePlayerState);
|
1771
|
+
logger.debug('setup player specific UI events on ID #{{player.id}}: finished');
|
1830
1772
|
|
1831
1773
|
clearInterval(dependencies_met_api_initialized);
|
1832
1774
|
} // END if apiInitialized
|
@@ -1846,14 +1788,14 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1846
1788
|
|
1847
1789
|
{% endif %} {% endfor %}
|
1848
1790
|
|
1849
|
-
logger.info('
|
1791
|
+
logger.info('initialize player specific UI events: finished');
|
1850
1792
|
|
1851
1793
|
_this.setState('finished');
|
1852
|
-
logger.debug('
|
1853
|
-
logger.info('
|
1794
|
+
logger.debug('module state: ' + _this.getState());
|
1795
|
+
logger.info('module initialized successfully');
|
1854
1796
|
|
1855
1797
|
endTimeModule = Date.now();
|
1856
|
-
logger.info('
|
1798
|
+
logger.info('module initializing time: ' + (endTimeModule-startTimeModule) + 'ms');
|
1857
1799
|
|
1858
1800
|
clearInterval(dependencies_met_player_instances_initialized);
|
1859
1801
|
} // END if apiInitialized
|
@@ -1877,7 +1819,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1877
1819
|
// songEvents
|
1878
1820
|
// -------------------------------------------------------------------------
|
1879
1821
|
songEvents: (songs) => {
|
1880
|
-
logger.debug('
|
1822
|
+
logger.debug('initializing title events for player on ID ' + '#' + playerID + ': started');
|
1881
1823
|
|
1882
1824
|
for (var i = 0; i < songs.length; i++) {
|
1883
1825
|
// ensure that on mouseover, CSS styles don't get messed up for active songs
|
@@ -1905,7 +1847,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1905
1847
|
}); // END EventListener 'click' (songlist)
|
1906
1848
|
}
|
1907
1849
|
|
1908
|
-
logger.debug('
|
1850
|
+
logger.debug('initializing title events for player on ID ' + '#' + playerID + ': finished');
|
1909
1851
|
}, // END songEvents
|
1910
1852
|
|
1911
1853
|
// -------------------------------------------------------------------------
|
@@ -1939,7 +1881,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1939
1881
|
}
|
1940
1882
|
|
1941
1883
|
if (plugin !== '' && isPluginLoaded(plugin)) {
|
1942
|
-
logger.debug('
|
1884
|
+
logger.debug('plugin loaded: ' + plugin);
|
1943
1885
|
|
1944
1886
|
// make sure the plugin installed only ONCE
|
1945
1887
|
j1.adapter.amplitude.data.atpGlobals.ytpInstalled = true;
|
@@ -1950,9 +1892,9 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1950
1892
|
// atPlayerScrollToActiveElement(metaData)
|
1951
1893
|
// -------------------------------------------------------------------------
|
1952
1894
|
atPlayerScrollToActiveElement: (metaData) => {
|
1953
|
-
var scrollableList, songIndex,
|
1954
|
-
activeElement, activeElementOffsetTop,
|
1955
|
-
songElementMin,
|
1895
|
+
var scrollableList, songIndex, playlist,
|
1896
|
+
activeElement, activeElementOffsetTop, numSongs,
|
1897
|
+
songElementMin, playerSongElementHeigthCompact;
|
1956
1898
|
|
1957
1899
|
if (!playerAutoScrollSongElement) {
|
1958
1900
|
// do nothing if playerAutoScrollSongElement is false
|
@@ -1961,18 +1903,19 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1961
1903
|
|
1962
1904
|
songIndex = metaData.index;
|
1963
1905
|
songElementMin = playerScrollerSongElementMin;
|
1964
|
-
|
1965
|
-
scrollableList = document.getElementById('large_player_title_list_' +
|
1906
|
+
playlist = metaData.playlist;
|
1907
|
+
scrollableList = document.getElementById('large_player_title_list_' + playlist);
|
1966
1908
|
activeElement = scrollableList.querySelector('.amplitude-active-song-container');
|
1909
|
+
numSongs = Amplitude.getSongsInPlaylist(playlist).length;
|
1967
1910
|
|
1968
1911
|
if (activeElement === null || scrollableList === null) {
|
1969
1912
|
// do nothing if NO scrollableList or ACTIVE element found (failsafe)
|
1970
1913
|
return;
|
1971
1914
|
}
|
1972
1915
|
|
1916
|
+
// LARGE players
|
1917
|
+
// -----------------------------------------------------------------------
|
1973
1918
|
if (songIndex > 0 && numSongs >= songElementMin) {
|
1974
|
-
scrollableList = document.getElementById('large_player_title_list_' + metaData.playlist);
|
1975
|
-
activeElement = scrollableList.querySelector('.amplitude-active-song-container');
|
1976
1919
|
activeElementOffsetTop = songIndex * j1.adapter.amplitude.data.playerSongElementHeigth;
|
1977
1920
|
scrollableList.scrollTop = activeElementOffsetTop;
|
1978
1921
|
} else {
|
@@ -1980,44 +1923,349 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1980
1923
|
return;
|
1981
1924
|
}
|
1982
1925
|
|
1926
|
+
// save AT player data for later use (e.g. events)
|
1927
|
+
// -----------------------------------------------------------------------
|
1928
|
+
j1.modules.amplitudejs.data.atp.activeIndex = songIndex;
|
1929
|
+
j1.modules.amplitudejs.data.atp.playlist = playlist;
|
1930
|
+
|
1931
|
+
// COMPACT players (WIP)
|
1932
|
+
// -----------------------------------------------------------------------
|
1933
|
+
// playerSongElementHeigthCompact = 74.00;
|
1934
|
+
// if (songIndex > 0 && numSongs >= songElementMin) {
|
1935
|
+
// // scrollableList = document.getElementById('compact_player_title_list_' + metaData.playlist);
|
1936
|
+
// // activeElement = scrollableList.querySelector('.amplitude-active-song-container');
|
1937
|
+
// activeElementOffsetTop = (songIndex * playerSongElementHeigthCompact);
|
1938
|
+
// scrollableList.scrollTop = activeElementOffsetTop;
|
1939
|
+
// } else {
|
1940
|
+
// // do nothing if songIndex is 0 or less than songElementMin
|
1941
|
+
// return;
|
1942
|
+
// }
|
1943
|
+
|
1983
1944
|
}, // END atPlayerScrollToActiveElement
|
1984
1945
|
|
1985
1946
|
// -------------------------------------------------------------------------
|
1986
|
-
//
|
1947
|
+
// atpUpdatMetaContainers(playlist, rating)
|
1987
1948
|
//
|
1988
1949
|
// update song rating in playlist-screen|meta-container
|
1950
|
+
// for all (compact|large) players
|
1989
1951
|
// -------------------------------------------------------------------------
|
1990
|
-
|
1991
|
-
var
|
1952
|
+
atpUpdatMetaContainers: (metaData) => {
|
1953
|
+
var activePlayist = metaData.playlist;
|
1954
|
+
var rating = parseInt(metaData.rating);
|
1955
|
+
var trackID = metaData.index + 1;
|
1956
|
+
const notRequiredForATP = true
|
1957
|
+
|
1958
|
+
logger.debug(`UPDATE metadata on atpUpdatMetaContainers for trackID|playlist at: ${trackID}|${activePlayist}`);
|
1959
|
+
|
1960
|
+
// properties automatically set by AT API
|
1961
|
+
if (requiredForATP) {
|
1962
|
+
// update SONG NAME in meta-containers
|
1963
|
+
var songName = document.getElementsByClassName("song-name");
|
1964
|
+
if (songName.length) {
|
1965
|
+
for (var i=0; i<songName.length; i++) {
|
1966
|
+
var currentPlaylist = songName[i].dataset.amplitudePlaylist;
|
1967
|
+
if (currentPlaylist === activePlayist) {
|
1968
|
+
songName[i].innerHTML = metaData.name;
|
1969
|
+
}
|
1970
|
+
}
|
1971
|
+
}
|
1972
|
+
}
|
1973
|
+
|
1974
|
+
// properties automatically set by AT API
|
1975
|
+
if (requiredForATP) {
|
1976
|
+
// update SONG ARTIST name in meta-containers
|
1977
|
+
var artistName = document.getElementsByClassName("artist");
|
1978
|
+
if (artistName.length) {
|
1979
|
+
for (var i=0; i<artistName.length; i++) {
|
1980
|
+
var currentPlaylist = songName[i].dataset.amplitudePlaylist;
|
1981
|
+
if (currentPlaylist === activePlayist) {
|
1982
|
+
artistName[i].innerHTML = metaData.artist;
|
1983
|
+
}
|
1984
|
+
}
|
1985
|
+
}
|
1986
|
+
}
|
1987
|
+
|
1988
|
+
// properties automatically set by AT API
|
1989
|
+
if (requiredForATP) {
|
1990
|
+
// update SONG ALBUM name in meta-containers
|
1991
|
+
var albumName = document.getElementsByClassName("album");
|
1992
|
+
if (albumName.length) {
|
1993
|
+
for (var i=0; i<albumName.length; i++) {
|
1994
|
+
var currentPlaylist = albumName[i].dataset.amplitudePlaylist;
|
1995
|
+
if (currentPlaylist === activePlayist) {
|
1996
|
+
albumName[i].innerHTML = metaData.album;
|
1997
|
+
}
|
1998
|
+
}
|
1999
|
+
}
|
2000
|
+
}
|
2001
|
+
|
2002
|
+
// update SONG RATING in screen controls
|
1992
2003
|
var screenControlRatingElements = document.getElementsByClassName('audio-rating-screen-controls');
|
1993
|
-
|
1994
|
-
|
1995
|
-
|
1996
|
-
|
1997
|
-
|
1998
|
-
|
1999
|
-
|
2000
|
-
|
2001
|
-
|
2002
|
-
|
2003
|
-
|
2004
|
-
|
2005
|
-
|
2004
|
+
if (rating) {
|
2005
|
+
for (let i=0; i<screenControlRatingElements.length; i++) {
|
2006
|
+
var ratingElement = screenControlRatingElements[i];
|
2007
|
+
if (ratingElement.dataset.amplitudePlaylist === activePlayist && ratingElement.classList.contains('audio-rating-screen-controls')) {
|
2008
|
+
ratingElement.innerHTML = '<img src="/assets/image/pattern/rating/scalable/' + rating + '-star.svg"' + 'alt="song rating">';
|
2009
|
+
}
|
2010
|
+
}
|
2011
|
+
}
|
2012
|
+
|
2013
|
+
// update SONG INFO in screen controls
|
2014
|
+
var songAudioInfo = document.getElementsByClassName("audio-info-link-screen-controls");
|
2015
|
+
if (songAudioInfo.length) {
|
2016
|
+
for (var i=0; i<songAudioInfo.length; i++) {
|
2017
|
+
var currentPlaylist = songAudioInfo[i].dataset.amplitudePlaylist;
|
2018
|
+
if (currentPlaylist === activePlayist) {
|
2019
|
+
if (metaData.audio_info) {
|
2020
|
+
songAudioInfo[i].setAttribute("href", metaData.audio_info);
|
2021
|
+
}
|
2022
|
+
}
|
2006
2023
|
}
|
2024
|
+
} // END if songAudioInfo
|
2025
|
+
|
2026
|
+
}, // END atpUpdatMetaContainers
|
2007
2027
|
|
2028
|
+
// -------------------------------------------------------------------------
|
2029
|
+
// atpStopParallelActivePlayers(players)
|
2030
|
+
//
|
2031
|
+
// stop active YT players (running in parallel to AT players)
|
2032
|
+
// -------------------------------------------------------------------------
|
2033
|
+
atpStopParallelActivePlayers: (players) => {
|
2034
|
+
var ytPlayer, playerState, ytPlayerState;
|
2035
|
+
|
2036
|
+
const ytPlayers = Object.keys(players);
|
2037
|
+
for (var i=0; i<ytPlayers.length; i++) {
|
2038
|
+
const ytPlayerID = ytPlayers[i];
|
2039
|
+
|
2040
|
+
ytPlayer = players[ytPlayerID].player;
|
2041
|
+
playerState = ytPlayer.getPlayerState();
|
2042
|
+
ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
2043
|
+
|
2044
|
+
// stop YT players running in parallel
|
2045
|
+
// ---------------------------------------------------------------------
|
2046
|
+
var isValidPlayerState = /playing|paused|buffering/.test(ytPlayerState);
|
2047
|
+
if (isValidPlayerState) {
|
2048
|
+
logger.debug(`STOP YT player on id: ${playerID}`);
|
2049
|
+
ytPlayer.stopVideo();
|
2050
|
+
}
|
2051
|
+
|
2052
|
+
// toggle PlayPause buttons playing => puased
|
2053
|
+
// ---------------------------------------------------------------------
|
2054
|
+
var ytpButtonPlayerPlayPause = document.getElementsByClassName("large-player-play-pause-" + ytPlayerID);
|
2055
|
+
for (var j=0; j<ytpButtonPlayerPlayPause.length; j++) {
|
2056
|
+
|
2057
|
+
var htmlElement = ytpButtonPlayerPlayPause[j];
|
2058
|
+
if (htmlElement.dataset.amplitudeSource === 'youtube') {
|
2059
|
+
if (htmlElement.classList.contains('amplitude-playing')) {
|
2060
|
+
htmlElement.classList.remove('amplitude-playing');
|
2061
|
+
htmlElement.classList.add('amplitude-paused');
|
2062
|
+
}
|
2063
|
+
}
|
2064
|
+
} // END for ytpButtonPlayerPlayPause
|
2065
|
+
|
2066
|
+
} // END for ytPlayers
|
2067
|
+
}, // END atpStopParallelActivePlayers
|
2068
|
+
|
2069
|
+
// -------------------------------------------------------------------------
|
2070
|
+
// atpProcessAudioStartPosition()
|
2071
|
+
//
|
2072
|
+
// process audio for configured START position
|
2073
|
+
// -------------------------------------------------------------------------
|
2074
|
+
atpProcessAudioStartPosition: () => {
|
2075
|
+
var songMetaData, songIndex, playlist,
|
2076
|
+
songStartSec, songStartTS, trackID;
|
2077
|
+
|
2078
|
+
songMetaData = Amplitude.getActiveSongMetadata();
|
2079
|
+
songIndex = songMetaData.index;
|
2080
|
+
songStartTS = songMetaData.start;
|
2081
|
+
songStartSec = _this.timestamp2seconds(songStartTS);
|
2082
|
+
playlist = Amplitude.getActivePlaylist();
|
2083
|
+
trackID = songIndex + 1;
|
2084
|
+
|
2085
|
+
if (!songStartSec) {
|
2086
|
+
return;
|
2008
2087
|
}
|
2009
2088
|
|
2010
|
-
//
|
2089
|
+
// save AT player data for later use (e.g. events)
|
2011
2090
|
// -----------------------------------------------------------------------
|
2012
|
-
|
2013
|
-
|
2014
|
-
|
2015
|
-
|
2016
|
-
|
2091
|
+
j1.modules.amplitudejs.data.atp.activeIndex = songIndex;
|
2092
|
+
j1.modules.amplitudejs.data.atp.playlist = playlist;
|
2093
|
+
|
2094
|
+
var checkIsFading = setInterval (() => {
|
2095
|
+
if (!isFadingIn) {
|
2096
|
+
var currentAudioTime = Amplitude.getSongPlayedSeconds();
|
2097
|
+
if (songStartSec && currentAudioTime <= songStartSec) {
|
2098
|
+
var songDurationSec = _this.timestamp2seconds(songMetaData.duration);
|
2099
|
+
|
2100
|
+
// seek audio to configured START position
|
2101
|
+
// NOTE: use setSongPlayedPercentage for seeking to NOT
|
2102
|
+
// generation any addition state changes like stopped
|
2103
|
+
// or playing
|
2104
|
+
logger.debug('seek audio in on playlist: ' + playlist + ' at|to trackID|timestamp: ' + trackID + '|' + songStartTS);
|
2105
|
+
Amplitude.setSongPlayedPercentage((songStartSec / songDurationSec) * 100);
|
2106
|
+
|
2107
|
+
// fade-in audio (if enabled)
|
2108
|
+
var fadeAudioIn = (songMetaData.audio_fade_in === 'true') ? true : false;
|
2109
|
+
if (fadeAudioIn) {
|
2110
|
+
logger.debug('faden audio in on playlist: ' + playlist + ' at|to trackID|timestamp: ' + trackID + '|' + songStartTS);
|
2111
|
+
atpFadeInAudio({ playerID: playerID });
|
2112
|
+
} // END if fadeAudio
|
2113
|
+
|
2114
|
+
} // END if songStartSec
|
2115
|
+
|
2116
|
+
clearInterval(checkIsFading);
|
2017
2117
|
}
|
2118
|
+
}, 100); // END checkIsFading
|
2119
|
+
}, // END atpProcessAudioStartPosition
|
2120
|
+
|
2121
|
+
// -------------------------------------------------------------------------
|
2122
|
+
// atpProcessAudioEndPosition()
|
2123
|
+
//
|
2124
|
+
// process audio for configured END position
|
2125
|
+
// -------------------------------------------------------------------------
|
2126
|
+
atpProcessAudioEndPosition: () => {
|
2127
|
+
var songMetaData, songIndex, playlist,
|
2128
|
+
songStartSec, songStartTS, songEndSec, songEndTS,
|
2129
|
+
trackID;
|
2130
|
+
|
2131
|
+
songMetaData = Amplitude.getActiveSongMetadata();
|
2132
|
+
songIndex = songMetaData.index;
|
2133
|
+
songStartTS = songMetaData.start;
|
2134
|
+
songStartSec = _this.timestamp2seconds(songStartTS);
|
2135
|
+
songEndTS = songMetaData.end;
|
2136
|
+
songEndSec = _this.timestamp2seconds(songEndTS);
|
2137
|
+
playlist = Amplitude.getActivePlaylist();
|
2138
|
+
trackID = songIndex + 1;
|
2139
|
+
|
2140
|
+
// save AT player data for later use (e.g. events)
|
2141
|
+
// -----------------------------------------------------------------------
|
2142
|
+
j1.modules.amplitudejs.data.atp.activeIndex = songIndex;
|
2143
|
+
j1.modules.amplitudejs.data.atp.playlist = playlist;
|
2144
|
+
|
2145
|
+
if (songEndSec > songStartSec) {
|
2146
|
+
var checkIsOnVideoEnd = setInterval(() => {
|
2147
|
+
if (!isFadingOut) {
|
2148
|
+
var currentAudioTime = Amplitude.getSongPlayedSeconds();
|
2149
|
+
if (currentAudioTime >= songEndSec) {
|
2150
|
+
songMetaData = Amplitude.getActiveSongMetadata();
|
2151
|
+
songIndex = songMetaData.index;
|
2152
|
+
trackID = songIndex + 1;
|
2153
|
+
|
2154
|
+
// seek audio out to END position
|
2155
|
+
// NOTE:
|
2156
|
+
// ---------------------------------------------------------------
|
2157
|
+
// use setSongPlayedPercentage for seeking to NOT
|
2158
|
+
// generation any addition state changes like stopped
|
2159
|
+
// or playing
|
2160
|
+
logger.debug('seek audio to end on playlist: ' + playlist + ' at trackID|timestamp: ' + trackID + '|' + songEndTS);
|
2161
|
+
Amplitude.setSongPlayedPercentage(99.99);
|
2162
|
+
|
2163
|
+
// fade-out audio (if enabled)
|
2164
|
+
var fadeAudioOut = (songMetaData.audio_fade_out === 'true') ? true : false;
|
2165
|
+
if (fadeAudioOut) {
|
2166
|
+
logger.debug('fade audio out on playlist: ' + playlist + ' at|to trackID|timestamp: ' + trackID + '|' + songEndTS);
|
2167
|
+
atpFadeAudioOut({ playerID: playerID });
|
2168
|
+
} // END if fadeAudio
|
2169
|
+
|
2170
|
+
clearInterval(checkIsOnVideoEnd);
|
2171
|
+
} // END if currentAudioTime
|
2172
|
+
} // END if !isFading
|
2173
|
+
}, 100); // END checkIsOnVideoEnd
|
2174
|
+
} // END if songEndSec
|
2175
|
+
|
2176
|
+
}, // END atpProcessAudioEndPosition
|
2177
|
+
|
2178
|
+
// -------------------------------------------------------------------------
|
2179
|
+
// setSongActive(currentPlayList, currentIndex)
|
2180
|
+
//
|
2181
|
+
// set song active at index in playlist
|
2182
|
+
// -------------------------------------------------------------------------
|
2183
|
+
setSongActive: (currentPlayList, currentIndex) => {
|
2184
|
+
var playlist, songContainers, songIndex;
|
2185
|
+
|
2186
|
+
songIndex = currentIndex;
|
2187
|
+
|
2188
|
+
// clear ALL active song containers
|
2189
|
+
// -----------------------------------------------------------------------
|
2190
|
+
songContainers = document.getElementsByClassName("amplitude-song-container");
|
2191
|
+
for (var i=0; i<songContainers.length; i++) {
|
2192
|
+
songContainers[i].classList.remove("amplitude-active-song-container");
|
2193
|
+
}
|
2194
|
+
|
2195
|
+
// find current song container and activate the element
|
2196
|
+
// -------------------------------------------------------------------------
|
2197
|
+
songContainers = document.querySelectorAll('.amplitude-song-container[data-amplitude-song-index="' + songIndex + '"]');
|
2198
|
+
for (var i=0; i<songContainers.length; i++) {
|
2199
|
+
if (songContainers[i].hasAttribute("data-amplitude-playlist")) {
|
2200
|
+
playlist = songContainers[i].getAttribute("data-amplitude-playlist");
|
2201
|
+
if (playlist === currentPlayList) {
|
2202
|
+
songContainers[i].classList.add("amplitude-active-song-container");
|
2203
|
+
|
2204
|
+
// save AT player data for later use (e.g. events)
|
2205
|
+
// -----------------------------------------------------------------
|
2206
|
+
j1.modules.amplitudejs.data.atp.activeIndex = songIndex;
|
2207
|
+
j1.modules.amplitudejs.data.atp.playlist = playlist;
|
2208
|
+
}
|
2209
|
+
}
|
2210
|
+
}
|
2211
|
+
|
2212
|
+
}, // END setSongActive
|
2213
|
+
|
2214
|
+
// -------------------------------------------------------------------------
|
2215
|
+
// timestamp2seconds(timestamp)
|
2216
|
+
//
|
2217
|
+
// converts a timestamp of hh:mm:ss into seconds
|
2218
|
+
// -------------------------------------------------------------------------
|
2219
|
+
// TODO:
|
2220
|
+
// Add support for timestamp w/o hours like mm:ss
|
2221
|
+
// -------------------------------------------------------------------------
|
2222
|
+
timestamp2seconds: (timestamp) => {
|
2223
|
+
// split timestamp
|
2224
|
+
const parts = timestamp.split(':');
|
2225
|
+
|
2226
|
+
// check timestamp format
|
2227
|
+
if (parts.length !== 3) {
|
2228
|
+
// return "invalid timestamp";
|
2229
|
+
return false;
|
2230
|
+
}
|
2231
|
+
|
2232
|
+
// convert parts to integers
|
2233
|
+
const hours = parseInt(parts[0], 10);
|
2234
|
+
const minutes = parseInt(parts[1], 10);
|
2235
|
+
const seconds = parseInt(parts[2], 10);
|
2236
|
+
|
2237
|
+
// check valid timestamp values
|
2238
|
+
if (isNaN(hours) || isNaN(minutes) || isNaN(seconds) ||
|
2239
|
+
hours < 0 || hours > 23 ||
|
2240
|
+
minutes < 0 || minutes > 59 ||
|
2241
|
+
seconds < 0 || seconds > 59) {
|
2242
|
+
return "invalid timestamp";
|
2243
|
+
}
|
2244
|
+
|
2245
|
+
const totalSeconds = (hours * 3600) + (minutes * 60) + seconds;
|
2246
|
+
|
2247
|
+
return totalSeconds;
|
2248
|
+
}, // END timestamp2seconds
|
2249
|
+
|
2250
|
+
// -------------------------------------------------------------------------
|
2251
|
+
// seconds2timestamp(seconds)
|
2252
|
+
//
|
2253
|
+
// converts seconds into a timestamp of hh:mm:ss
|
2254
|
+
// -------------------------------------------------------------------------
|
2255
|
+
seconds2timestamp: (seconds) => {
|
2256
|
+
if (isNaN(seconds)) {
|
2257
|
+
return false;
|
2018
2258
|
}
|
2019
2259
|
|
2020
|
-
|
2260
|
+
const hours = Math.floor(seconds / 3600);
|
2261
|
+
const minutes = Math.floor((seconds % 3600) / 60);
|
2262
|
+
const remainSeconds = seconds % 60;
|
2263
|
+
const tsHours = hours.toString().padStart(2, '0');
|
2264
|
+
const tsMinutes = minutes.toString().padStart(2, '0');
|
2265
|
+
const tsSeconds = remainSeconds.toString().padStart(2, '0');
|
2266
|
+
|
2267
|
+
return `${tsHours}:${tsMinutes}:${tsSeconds}`;
|
2268
|
+
}, // END seconds2timestamp
|
2021
2269
|
|
2022
2270
|
// -------------------------------------------------------------------------
|
2023
2271
|
// messageHandler()
|
@@ -2026,7 +2274,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
2026
2274
|
messageHandler: (sender, message) => {
|
2027
2275
|
var json_message = JSON.stringify(message, undefined, 2);
|
2028
2276
|
|
2029
|
-
logText = '
|
2277
|
+
logText = 'received message from ' + sender + ': ' + json_message;
|
2030
2278
|
logger.debug(logText);
|
2031
2279
|
|
2032
2280
|
// -----------------------------------------------------------------------
|
@@ -2038,7 +2286,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
2038
2286
|
// place handling of command|action here
|
2039
2287
|
//
|
2040
2288
|
|
2041
|
-
logger.info(
|
2289
|
+
logger.info(message.text);
|
2042
2290
|
}
|
2043
2291
|
|
2044
2292
|
//
|