j1-template 2024.3.20 → 2024.3.21
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/_layouts/page.html +1 -0
- data/assets/data/amplitude_app.html +28 -23
- data/assets/theme/j1/adapter/js/amplitude.js +590 -354
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.css +41 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.min.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.css +190 -403
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.min.css +1 -2
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.css +36 -33
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.min.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/mini.css +72 -9
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/mini.min.css +2 -1
- data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.js +36 -24
- 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_app.yml +4 -4
- data/lib/starter_web/_data/modules/amplitude_playlists.yml +44 -44
- data/lib/starter_web/_data/modules/defaults/amplitude.yml +7 -4
- data/lib/starter_web/_data/modules/swiper_app.yml +67 -0
- data/lib/starter_web/_data/modules/swiper_playlists.yml +26 -0
- data/lib/starter_web/_data/templates/feed.xml +1 -1
- data/lib/starter_web/_includes/attributes.asciidoc +5 -4
- data/lib/starter_web/_plugins/index/lunr.rb +1 -1
- data/lib/starter_web/assets/image/icon/bokeh/bokeh-32x32.ico +0 -0
- data/lib/starter_web/assets/image/icon/bokeh/bokeh.ico +0 -0
- data/lib/starter_web/assets/image/icon/bokeh/logo-160x160.png +0 -0
- data/lib/starter_web/assets/image/icon/hyvor-talk/hyvore-talk.ico +0 -0
- data/lib/starter_web/assets/image/icon/hyvor-talk/jpg/hyvor-logo.512x512.jpg +0 -0
- data/lib/starter_web/assets/image/icon/hyvor-talk/png/hyvor-logo.24x24.jpg +0 -0
- data/lib/starter_web/assets/image/icon/hyvor-talk/png/hyvor-logo.24x24.png +0 -0
- data/lib/starter_web/assets/image/icon/hyvor-talk/png/hyvor-logo.512x512.png +0 -0
- data/lib/starter_web/assets/image/icon/hyvor-talk/scalable/hyvor-logo.svg +81 -0
- data/lib/starter_web/assets/image/icon/jupyter/jupyter-32x32.ico +0 -0
- data/lib/starter_web/assets/image/icon/jupyter/jupyter.ico +0 -0
- data/lib/starter_web/assets/image/icon/jupyter/logo.png +0 -0
- data/lib/starter_web/assets/image/icon/mdi/mdi.svg +1 -0
- data/lib/starter_web/assets/image/icon/mdi/mdil.svg +1 -0
- data/lib/starter_web/assets/image/icon/scalable/facebook.svg +34 -0
- data/lib/starter_web/assets/image/icon/scalable/google.svg +35 -0
- data/lib/starter_web/assets/image/icon/scalable/ibm.svg +24 -0
- data/lib/starter_web/assets/image/icon/scalable/microsoft.svg +42 -0
- data/lib/starter_web/assets/image/module/swiper/simple/test/image/diana_krall.jpg +0 -0
- data/lib/starter_web/index.html +3 -3
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/pages/public/learn/where_to_go.adoc +1 -1
- data/lib/starter_web/pages/public/tools/previewer/preview_amplitudejs.adoc +3 -18
- data/lib/starter_web/pages/public/tools/tester/app_tester_amplitudejs_yt.adoc +6 -6
- data/lib/starter_web/pages/public/tools/tester/app_tester_swiper.adoc +87 -0
- data/lib/starter_web/pages/public/tour/_includes/attributes.asciidoc +3 -3
- data/lib/starter_web/pages/public/tour/{play_audio.adoc → audio_data.adoc} +30 -55
- data/lib/starter_web/pages/public/tour/{present_images.adoc → image_data.adoc} +4 -5
- data/lib/starter_web/pages/public/tour/{play_video.adoc → video_data.adoc} +17 -16
- metadata +25 -5
@@ -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.40.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.40.js
|
67
67
|
# J1 Adapter for the amplitude module
|
68
68
|
#
|
69
69
|
# Product/Info:
|
@@ -164,27 +164,29 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
164
164
|
var playersHtmlLoaded = false;
|
165
165
|
var processingPlayersFinished = false;
|
166
166
|
|
167
|
-
var playerSongElementHeigthDesktop = {{amplitude_defaults.player.song_element_heigt_desktop}};
|
168
|
-
var playerSongElementHeigthMobile = {{amplitude_defaults.player.song_element_heigth_mobile}};
|
169
|
-
var playerAutoScrollSongElement = {{amplitude_defaults.player.player_auto_scroll_song_element}};
|
170
|
-
|
171
167
|
var playerAudioInfo = ('{{amplitude_defaults.playlist.audio_info}}' === 'true') ? true : false;
|
172
168
|
var playerDefaultPluginManager = ('{{amplitude_defaults.player.plugin_manager.enabled}}' === 'true') ? true : false;
|
173
169
|
var playerDefaultType = '{{amplitude_defaults.player.type}}';
|
174
|
-
var
|
175
|
-
var playerVolumeSliderStep =
|
176
|
-
var playerRepeat = ('{{amplitude_defaults.player.
|
177
|
-
var playerShuffle = ('{{amplitude_defaults.player.
|
170
|
+
var playerDefaultVolume = {{amplitude_defaults.player.volume_slider.preset_value}};
|
171
|
+
var playerVolumeSliderStep = {{amplitude_defaults.player.volume_slider.slider_step}};
|
172
|
+
var playerRepeat = ('{{amplitude_defaults.player.player_repeat}}' === 'true') ? true : false;
|
173
|
+
var playerShuffle = ('{{amplitude_defaults.player.player_shuffle}}' === 'true') ? true : false;
|
178
174
|
var playerPlayNextTitle = ('{{amplitude_defaults.player.play_next_title}}' === 'true') ? true : false;
|
179
175
|
var playerPauseNextTitle = ('{{amplitude_defaults.player.pause_next_title}}' === 'true') ? true : false;
|
180
|
-
var playerDelayNextTitle =
|
181
|
-
var playerForwardBackwardSkipSeconds =
|
176
|
+
var playerDelayNextTitle = {{amplitude_defaults.player.delay_next_title}};
|
177
|
+
var playerForwardBackwardSkipSeconds = {{amplitude_defaults.player.forward_backward_skip_seconds}};
|
178
|
+
|
179
|
+
var playerSongElementHeigthMobile = {{amplitude_defaults.player.song_element_heigth_mobile}};
|
180
|
+
var playerSongElementHeigthDesktop = {{amplitude_defaults.player.song_element_heigt_desktop}};
|
181
|
+
var playerScrollerSongElementMin = {{amplitude_defaults.player.player_scroller_song_element_min}};
|
182
|
+
var playerScrollControl = {{amplitude_defaults.player.player_scroll_control}};
|
183
|
+
var playerAutoScrollSongElement = {{amplitude_defaults.player.player_auto_scroll_song_element}};
|
182
184
|
|
183
185
|
// AmplitudeJS settings curently NOT used
|
184
186
|
// ---------------------------------------------------------------------------
|
185
|
-
var playerWaveformsEnabled =
|
186
|
-
var playerWaveformsSampleRate =
|
187
|
-
var playerVisualizationEnabled =
|
187
|
+
var playerWaveformsEnabled = {{amplitude_defaults.player.waveforms.enabled}};
|
188
|
+
var playerWaveformsSampleRate = {{amplitude_defaults.player.waveforms.sample_rate}};
|
189
|
+
var playerVisualizationEnabled = {{amplitude_defaults.player.visualization.enabled}};
|
188
190
|
var playerVisualizationName = '{{amplitude_defaults.player.visualization.name}}';
|
189
191
|
|
190
192
|
// ---------------------------------------------------------------------------
|
@@ -217,6 +219,11 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
217
219
|
amplitudePlaylists = $.extend({}, {{amplitude_playlists | replace: 'nil', 'null' | replace: '=>', ':' }});
|
218
220
|
amplitudeOptions = $.extend(true, {}, amplitudeDefaults, amplitudePlayers, amplitudePlaylists);
|
219
221
|
|
222
|
+
// save AJS player setiings for later use (e.g. the AJS plugins)
|
223
|
+
// j1.adapter.amplitude['amplitudeDefaults'] = amplitudeDefaults;
|
224
|
+
// j1.adapter.amplitude['amplitudeSettings'] = amplitudeSettings;
|
225
|
+
// j1.adapter.amplitude['amplitudeOptions'] = amplitudeOptions;
|
226
|
+
|
220
227
|
// -----------------------------------------------------------------------
|
221
228
|
// control|logging settings
|
222
229
|
// -----------------------------------------------------------------------
|
@@ -230,8 +237,8 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
230
237
|
j1.adapter.amplitude.data.ytPlayers = {};
|
231
238
|
|
232
239
|
// (initial) YT player data for later use (e.g. events)
|
240
|
+
j1.adapter.amplitude.data.playerSongElementHeigth = playerSongElementHeigthDesktop;
|
233
241
|
j1.adapter.amplitude.data.activePlayer = 'not_set';
|
234
|
-
j1.adapter.amplitude.data.playerSongElementHeigth = 'not_set';
|
235
242
|
j1.adapter.amplitude.data.atpGlobals.activePlayerType = 'not_set';
|
236
243
|
j1.adapter.amplitude.data.atpGlobals.ytpInstalled = false;
|
237
244
|
j1.adapter.amplitude.data.ytpGlobals.activePlayerType = 'not_set';
|
@@ -252,8 +259,10 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
252
259
|
logger.debug('\n' + 'module state: ' + _this.getState());
|
253
260
|
logger.info('\n' + 'module is being initialized');
|
254
261
|
|
255
|
-
//
|
256
|
-
|
262
|
+
// window.addEventListener('resize',(e)=>{
|
263
|
+
// console.log( `resize: width: ${e.target.visualViewport.width}px`);
|
264
|
+
// console.log( `resize: height: ${e.target.visualViewport.height}px`);
|
265
|
+
// });
|
257
266
|
|
258
267
|
// -------------------------------------------------------------------
|
259
268
|
// create global playlist (songs)
|
@@ -292,20 +301,20 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
292
301
|
// initialize viewPort specific (GLOBAL) settings
|
293
302
|
$(window).bind('resizeEnd', function() {
|
294
303
|
var viewPortSize = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
304
|
+
//do something, window hasn't changed size in 500ms
|
305
|
+
if (viewPortSize > 578) {
|
306
|
+
j1.adapter.amplitude.data.playerSongElementHeigth = playerSongElementHeigthDesktop;
|
307
|
+
} else {
|
308
|
+
j1.adapter.amplitude.data.playerSongElementHeigth = playerSongElementHeigthMobile;
|
309
|
+
}
|
301
310
|
});
|
302
311
|
|
303
312
|
$(window).resize(function() {
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
313
|
+
if (this.resizeTO) clearTimeout(this.resizeTO);
|
314
|
+
this.resizeTO = setTimeout(function() {
|
315
|
+
$(this).trigger('resizeEnd');
|
316
|
+
}, 500);
|
317
|
+
});
|
309
318
|
|
310
319
|
clearInterval(dependencies_met_page_ready);
|
311
320
|
} // END pageVisible
|
@@ -354,7 +363,10 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
354
363
|
continue;
|
355
364
|
} else if (key === 'rating') {
|
356
365
|
song.rating = item[key];
|
357
|
-
continue;
|
366
|
+
continue;
|
367
|
+
} else if (key === 'audio_single') {
|
368
|
+
song.audio_single = item[key];
|
369
|
+
continue;
|
358
370
|
} else if (key === 'shuffle') {
|
359
371
|
song.shuffle = item[key];
|
360
372
|
continue;
|
@@ -479,6 +491,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
479
491
|
"end": "{{item.end}}",
|
480
492
|
"shuffle": "{{item.shuffle}}",
|
481
493
|
"duration": "{{item.duration}}",
|
494
|
+
"audio_single": "{{item.audio_single}}",
|
482
495
|
// "audio_fade_in": "{{item.audio_fade_in}}",
|
483
496
|
// "audio_fade_out": "{{item.audio_fade_out}}",
|
484
497
|
"cover_art_url": "{{item.cover_image}}"
|
@@ -618,7 +631,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
618
631
|
// },
|
619
632
|
|
620
633
|
continue_next: playerPlayNextTitle,
|
621
|
-
volume:
|
634
|
+
volume: playerDefaultVolume,
|
622
635
|
volume_decrement: playerVolumeSliderStep,
|
623
636
|
volume_increment: playerVolumeSliderStep
|
624
637
|
|
@@ -798,196 +811,186 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
798
811
|
} // END atpFadeAudioOut
|
799
812
|
|
800
813
|
// -----------------------------------------------------------------------
|
801
|
-
//
|
814
|
+
// doNothingOnStateChange(state)
|
802
815
|
//
|
803
|
-
//
|
816
|
+
// wrraper for states that are not processed
|
804
817
|
// -----------------------------------------------------------------------
|
805
|
-
function
|
806
|
-
var
|
807
|
-
|
808
|
-
songStartTS, songEndTS, songMetaData, currentVolume,
|
809
|
-
activeSongMetadata, fadeAudio;
|
810
|
-
|
811
|
-
activeSongMetadata = Amplitude.getActiveSongMetadata();
|
818
|
+
function doNothingOnStateChange(state) {
|
819
|
+
var playlist, songMetaData, songIndex, trackID;
|
820
|
+
|
812
821
|
playlist = Amplitude.getActivePlaylist();
|
813
|
-
// playlist = activeSongMetadata.playlist
|
814
|
-
playerID = playlist + '_large';
|
815
|
-
songs = Amplitude.getSongsInPlaylist(playlist);
|
816
822
|
songMetaData = Amplitude.getActiveSongMetadata();
|
817
823
|
songIndex = songMetaData.index;
|
818
824
|
trackID = songIndex + 1;
|
819
825
|
|
820
|
-
|
821
|
-
// logger.debug('\n' + 'current audio state: unstarted');
|
822
|
-
return;
|
823
|
-
}
|
824
|
-
|
825
|
-
if (state === AT_PLAYER_STATE.STOPPED) {
|
826
|
-
logger.debug('\n' + 'audio player on playlist: ' + playlist + ' at trackID|state: ' + trackID + '|' + AT_PLAYER_STATE_NAMES[state]);
|
827
|
-
return;
|
828
|
-
}
|
826
|
+
logger.warn('\n' + `DO NOTHING on StateChange for playlist: ${playlist} at trackID|state: ${trackID}|${AT_PLAYER_STATE_NAMES[state]}`);
|
829
827
|
|
830
|
-
|
831
|
-
logger.debug('\n' + 'audio player on playlist: ' + playlist + ' at trackID|state: ' + trackID + '|' + AT_PLAYER_STATE_NAMES[state]);
|
832
|
-
return;
|
833
|
-
}
|
828
|
+
} // END doNothingOnStateChange
|
834
829
|
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
830
|
+
// -----------------------------------------------------------------------
|
831
|
+
// processOnStateChangePlaying()
|
832
|
+
//
|
833
|
+
// wrraper to update the ACTIVE player on state PLAYING
|
834
|
+
// -----------------------------------------------------------------------
|
835
|
+
function processOnStateChangePlaying(state) {
|
836
|
+
var playList, activePlayist, playerID, playerType,
|
837
|
+
activePlayerType, startVolume, songIndex, trackID,
|
838
|
+
ratingIndex, rating, ratingElement, songMetaData,
|
839
|
+
songStartTS, songEndTS, songStartSec, songEndSec,
|
840
|
+
screenControlRatingElements, screenControlRating;
|
839
841
|
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
842
|
+
songMetaData = Amplitude.getActiveSongMetadata();
|
843
|
+
songIndex = songMetaData.index;
|
844
|
+
playList = Amplitude.getActivePlaylist();
|
845
|
+
trackID = songIndex + 1;
|
846
|
+
songStartTS = songMetaData.start;
|
847
|
+
songEndTS = songMetaData.end;
|
848
|
+
songStartSec = timestamp2seconds(songStartTS);
|
849
|
+
songEndSec = timestamp2seconds(songEndTS);
|
850
|
+
startVolume = Amplitude.getVolume();
|
844
851
|
|
845
|
-
|
846
|
-
|
847
|
-
|
852
|
+
logger.debug('\n' + `PLAY audio on processOnStateChangePlaying for playlist \'${playList}\' at trackID|state: ${trackID}|${AT_PLAYER_STATE_NAMES[state]}`);
|
853
|
+
|
854
|
+
// update song rating in playlist-screen|meta-container
|
855
|
+
// -------------------------------------------------------------------
|
856
|
+
j1.adapter.amplitude.atUpdateSongRating(Amplitude.getActiveSongMetadata());
|
857
|
+
|
858
|
+
// scroll active song in players playlist
|
859
|
+
// ---------------------------------------------------------------------
|
860
|
+
j1.adapter.amplitude.atPlayerScrollToActiveElement(Amplitude.getActiveSongMetadata());
|
861
|
+
|
862
|
+
// stop active YT players
|
863
|
+
// -----------------------------------------------
|
864
|
+
const ytPlayers = Object.keys(j1.adapter.amplitude.data.ytPlayers);
|
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
|
+
}
|
848
877
|
}
|
849
878
|
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
screenControlRatingElements = document.getElementsByClassName('audio-rating-screen-controls');
|
876
|
-
for (let i=0; i<screenControlRatingElements.length; i++) {
|
877
|
-
ratingElement = screenControlRatingElements[i];
|
878
|
-
rating = parseInt(songMetaData.rating);
|
879
|
-
playerType = ratingElement.dataset.playerType;
|
880
|
-
activePlayerType = j1.adapter.amplitude.data.atpGlobals.activePlayerType;
|
881
|
-
activePlayist = songMetaData.playlist
|
882
|
-
|
883
|
-
if (ratingElement.dataset.amplitudePlaylist === activePlayist && playerType === activePlayerType) {
|
884
|
-
ratingIndex = i;
|
885
|
-
screenControlRating = ratingElement;
|
886
|
-
break;
|
887
|
-
}
|
879
|
+
// process audio for configured START position
|
880
|
+
// -------------------------------------------------------------------
|
881
|
+
var checkIsFading = setInterval (() => {
|
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
|
900
|
+
|
901
|
+
} // END if songStartSec
|
902
|
+
|
903
|
+
clearInterval(checkIsFading);
|
888
904
|
}
|
905
|
+
}, 100); // END checkIsFading
|
889
906
|
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
} else {
|
895
|
-
screenControlRatingElements[ratingIndex].innerHTML = '';
|
896
|
-
}
|
897
|
-
} // END if screenControlRating
|
907
|
+
// check|process audio for configured END position
|
908
|
+
// -------------------------------------------------------------------
|
909
|
+
if (songEndSec > songStartSec) {
|
910
|
+
var checkIsOnVideoEnd = setInterval(() => {
|
898
911
|
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
var
|
904
|
-
|
905
|
-
|
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;
|
906
922
|
|
907
|
-
// seek audio to
|
923
|
+
// seek audio out to total end END position
|
908
924
|
// NOTE: use setSongPlayedPercentage for seeking to NOT
|
909
925
|
// generation any addition state changes like stopped
|
910
|
-
// or playing
|
911
|
-
logger.debug('\n' + 'seek audio
|
912
|
-
Amplitude.setSongPlayedPercentage(
|
913
|
-
|
914
|
-
// fade-
|
915
|
-
var
|
916
|
-
if (
|
917
|
-
logger.debug('\n' + '
|
918
|
-
|
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 });
|
919
935
|
} // END if fadeAudio
|
920
936
|
|
921
|
-
|
937
|
+
clearInterval(checkIsOnVideoEnd);
|
938
|
+
} // END if currentAudioTime
|
922
939
|
|
923
|
-
|
924
|
-
}
|
925
|
-
}, 100); // END checkIsFading
|
940
|
+
} // END if !isFading
|
926
941
|
|
927
|
-
|
928
|
-
|
929
|
-
if (songEndSec > songStartSec) {
|
930
|
-
var checkIsOnVideoEnd = setInterval(() => {
|
931
|
-
|
932
|
-
if (!isFadingOut) {
|
933
|
-
var currentAudioTime = Amplitude.getSongPlayedSeconds();
|
934
|
-
var songMetaData = Amplitude.getActiveSongMetadata();
|
935
|
-
var songEndTS = songMetaData.end;
|
936
|
-
var songEndSec = timestamp2seconds(songEndTS);
|
937
|
-
|
938
|
-
if (currentAudioTime > songEndSec) {
|
939
|
-
songMetaData = Amplitude.getActiveSongMetadata();
|
940
|
-
songIndex = songMetaData.index;
|
941
|
-
trackID = songIndex + 1;
|
942
|
-
|
943
|
-
// seek audio out to total end END position
|
944
|
-
// NOTE: use setSongPlayedPercentage for seeking to NOT
|
945
|
-
// generation any addition state changes like stopped
|
946
|
-
// or playing
|
947
|
-
logger.debug('\n' + 'seek audio out to end on playlist: ' + playList + ' at trackID|timestamp: ' + trackID + '|' + songEndTS);
|
948
|
-
Amplitude.setSongPlayedPercentage(99.99);
|
949
|
-
|
950
|
-
// fade-out audio (if enabled)
|
951
|
-
var fadeAudioOut = (songMetaData.audio_fade_out === 'true') ? true : false;
|
952
|
-
if (fadeAudioOut) {
|
953
|
-
logger.debug('\n' + 'fade audio out on playlist: ' + playList + ' at|to trackID|timestamp: ' + trackID + '|' + songEndTS);
|
954
|
-
atpFadeAudioOut({ playerID: playerID });
|
955
|
-
} // END if fadeAudio
|
956
|
-
|
957
|
-
clearInterval(checkIsOnVideoEnd);
|
958
|
-
} // END if currentAudioTime
|
959
|
-
|
960
|
-
} // END if !isFading
|
961
|
-
|
962
|
-
}, 100); // END checkIsOnVideoEnd
|
963
|
-
} // END if songEndSec
|
964
|
-
|
965
|
-
// stop active YT players running in parallel
|
966
|
-
// -------------------------------------------------------------------
|
967
|
-
const ytPlayers = Object.keys(j1.adapter.amplitude.data.ytPlayers);
|
968
|
-
for (let i=0; i<ytPlayers.length; i++) {
|
969
|
-
const ytPlayerID = ytPlayers[i];
|
970
|
-
const playerProperties = j1.adapter.amplitude.data.ytPlayers[ytPlayerID];
|
971
|
-
|
972
|
-
var player = j1.adapter.amplitude['data']['ytPlayers'][ytPlayerID]['player'];
|
973
|
-
var playerState = (player.getPlayerState() > 0) ? player.getPlayerState() : 6;
|
974
|
-
var ytPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
975
|
-
|
976
|
-
// if (ytPlayerState === 'playing' || ytPlayerState === 'paused' || ytPlayerState === 'buffering' || ytPlayerState === 'cued' || ytPlayerState === 'unstarted') {
|
977
|
-
if (ytPlayerState === 'playing' || ytPlayerState === 'paused') {
|
978
|
-
logger.debug('\n' + `STOP YT player at onPlayerStateChange for id: ${ytPlayerID}`);
|
979
|
-
player.stopVideo();
|
980
|
-
j1.adapter.amplitude.data.ytpGlobals.activeIndex = 0;
|
981
|
-
}
|
942
|
+
}, 100); // END checkIsOnVideoEnd
|
943
|
+
} // END if songEndSec
|
982
944
|
|
983
|
-
|
945
|
+
// save YT player data for later use (e.g. events)
|
946
|
+
// ---------------------------------------------------------------------
|
947
|
+
j1.adapter.amplitude.data.activePlayer = 'atp';
|
948
|
+
j1.adapter.amplitude.data.atpGlobals.activePlayerType = 'large';
|
984
949
|
|
985
|
-
|
950
|
+
}; // END processOnStateChangePlaying
|
986
951
|
|
987
|
-
|
988
|
-
|
989
|
-
|
952
|
+
// -----------------------------------------------------------------------
|
953
|
+
// onPlayerStateChange
|
954
|
+
//
|
955
|
+
// process all AT Player specific state changes
|
956
|
+
// -----------------------------------------------------------------------
|
957
|
+
// NOTE:
|
958
|
+
// The AT API fires a lot of INTERMEDIATE states. MOST of them gets
|
959
|
+
// ignored (do nothing). Currently, only state PLAYING is actively
|
960
|
+
// processed.
|
961
|
+
// -----------------------------------------------------------------------
|
962
|
+
function onPlayerStateChange(state) {
|
990
963
|
|
964
|
+
// process all state changes fired by AT API
|
965
|
+
// ---------------------------------------------------------------------
|
966
|
+
switch(state) {
|
967
|
+
case AT_PLAYER_STATE.UNSTARTED:
|
968
|
+
doNothingOnStateChange(AT_PLAYER_STATE.UNSTARTED);
|
969
|
+
break;
|
970
|
+
case AT_PLAYER_STATE.STOPPED:
|
971
|
+
doNothingOnStateChange(AT_PLAYER_STATE.STOPPED);
|
972
|
+
break;
|
973
|
+
case AT_PLAYER_STATE.PAUSED:
|
974
|
+
doNothingOnStateChange(AT_PLAYER_STATE.PAUSED);
|
975
|
+
break;
|
976
|
+
case AT_PLAYER_STATE.PREVIOUS:
|
977
|
+
doNothingOnStateChange(AT_PLAYER_STATE.PREVIOUS);
|
978
|
+
break;
|
979
|
+
case AT_PLAYER_STATE.NEXT:
|
980
|
+
doNothingOnStateChange(AT_PLAYER_STATE.NEXT);
|
981
|
+
break;
|
982
|
+
case AT_PLAYER_STATE.CHANGED:
|
983
|
+
doNothingOnStateChange(AT_PLAYER_STATE.CHANGED);
|
984
|
+
break;
|
985
|
+
case AT_PLAYER_STATE.PLAYING:
|
986
|
+
processOnStateChangePlaying(AT_PLAYER_STATE.PLAYING);
|
987
|
+
break;
|
988
|
+
case AT_PLAYER_STATE.ENDED:
|
989
|
+
doNothingOnStateChange(AT_PLAYER_STATE.ENDED);
|
990
|
+
break;
|
991
|
+
default:
|
992
|
+
logger.error('\n' + `UNKNOWN state on StateChange fired: ${state}`);
|
993
|
+
} // END switch state
|
991
994
|
} // END onPlayerStateChange
|
992
995
|
|
993
996
|
}, // END initApi
|
@@ -996,30 +999,30 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
996
999
|
// monitorPlayerActiveElementChanges
|
997
1000
|
//
|
998
1001
|
// -------------------------------------------------------------------------
|
999
|
-
monitorPlayerActiveElementChanges: () => {
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
-
|
1022
|
-
}, // END monitorPlayerActiveElementChanges
|
1002
|
+
// monitorPlayerActiveElementChanges: () => {
|
1003
|
+
// // var playerSongContainers = document.getElementsByClassName("large-player-title-list");
|
1004
|
+
// var playerSongContainers = document.getElementsByClassName("large-player-title-list");
|
1005
|
+
// for (var i=0; i<playerSongContainers.length; i++) {
|
1006
|
+
// var scrollableList = document.getElementById(playerSongContainers[0].id);
|
1007
|
+
// var observer = new MutationObserver((mutationsList, observer) => {
|
1008
|
+
// for (const mutation of mutationsList) {
|
1009
|
+
// if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
|
1010
|
+
// // Überprüfen, ob das geänderte Element jetzt die aktive Klasse besitzt
|
1011
|
+
// if (mutation.target.classList.contains('amplitude-active-song-container')) {
|
1012
|
+
// scrollableList.scrollTop = mutation.target.offsetTop;
|
1013
|
+
// }
|
1014
|
+
// }
|
1015
|
+
// }
|
1016
|
+
// }); // END observer
|
1017
|
+
|
1018
|
+
// // Optionen für den Observer: Nur Änderungen an Attributen beobachten
|
1019
|
+
// observer.observe(scrollableList, {
|
1020
|
+
// attributes: true,
|
1021
|
+
// subtree: true
|
1022
|
+
// }); // END observer options
|
1023
|
+
|
1024
|
+
// } // END for playerSongContainers
|
1025
|
+
// }, // END monitorPlayerActiveElementChanges
|
1023
1026
|
|
1024
1027
|
// -------------------------------------------------------------------------
|
1025
1028
|
// initPlayerUiEvents
|
@@ -1073,19 +1076,42 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1073
1076
|
if (apiInitialized.state) {
|
1074
1077
|
amplitudePlayerState = Amplitude.getPlayerState();
|
1075
1078
|
|
1079
|
+
{% comment %} process UI events for all MINI Players
|
1080
|
+
============================================================ {% endcomment %}
|
1076
1081
|
{% if player.id contains 'mini' %}
|
1077
|
-
// ---------------------------------------------------------
|
1078
|
-
// START mini player UI events
|
1079
|
-
//
|
1080
1082
|
if (document.getElementById('{{player.id}}') !== null) {
|
1081
1083
|
|
1082
|
-
|
1083
|
-
|
1084
|
+
{% comment %} PREPARED event listener for LATER use
|
1085
|
+
----------------------------------------------------------
|
1086
|
+
// click on play_pause button (MINI player)
|
1087
|
+
var miniPlayerPlayPauseButton = document.getElementsByClassName('mini-player-play-pause');
|
1088
|
+
for (var i=0; i<miniPlayerPlayPauseButton.length; i++) {
|
1089
|
+
if (miniPlayerPlayPauseButton[i].dataset.amplitudeSource === 'youtube') {
|
1090
|
+
// do nothing (managed by plugin)
|
1091
|
+
} else {
|
1092
|
+
// var currentPlaylist = compactPlayerPlayPauseButton[i].dataset.amplitudePlaylist;
|
1093
|
+
// if (currentPlaylist === playListName) {
|
1094
|
+
if (miniPlayerPlayPauseButton[i].id === 'mini_player_play_pause_{{player.id}}') {
|
1095
|
+
miniPlayerPlayPauseButton[i].addEventListener('click', function(event) {
|
1096
|
+
var ytpPlayer;
|
1097
|
+
|
1098
|
+
// save YT player data for later use (e.g. events)
|
1099
|
+
j1.adapter.amplitude.data.activePlayer = 'atp';
|
1100
|
+
j1.adapter.amplitude.data.atpGlobals.activePlayerType = 'mini';
|
1101
|
+
|
1102
|
+
}); // addEventListener END
|
1103
|
+
} // END if miniPlayerPlayPauseButton
|
1104
|
+
} // END if ATP
|
1105
|
+
} // END for miniPlayerPlayPauseButton
|
1106
|
+
----------------------------------------------------------
|
1107
|
+
{% endcomment %}
|
1108
|
+
|
1109
|
+
// add listeners to all progress bars found (MINI Player)
|
1084
1110
|
// -------------------------------------------------------
|
1085
1111
|
var progressBars = document.getElementsByClassName("mini-player-progress");
|
1086
1112
|
for (var i=0; i<progressBars.length; i++) {
|
1087
1113
|
if (progressBars[i].dataset.amplitudeSource === 'youtube') {
|
1088
|
-
// do nothing
|
1114
|
+
// do nothing for YTP (managed by plugin)
|
1089
1115
|
} else {
|
1090
1116
|
progressBars[i].addEventListener('click', function(event) {
|
1091
1117
|
var offset = this.getBoundingClientRect();
|
@@ -1093,43 +1119,29 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1093
1119
|
|
1094
1120
|
Amplitude.setSongPlayedPercentage(
|
1095
1121
|
(parseFloat(xpos)/parseFloat(this.offsetWidth))*100);
|
1096
|
-
}); // END EventListener 'click'
|
1097
|
-
}
|
1098
|
-
} // END for
|
1099
1122
|
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
if (miniPlayerPlayPauseButton[i].dataset.amplitudeSource === 'youtube') {
|
1104
|
-
// do nothing
|
1105
|
-
} else {
|
1106
|
-
var currentPlaylist = miniPlayerPlayPauseButton[i].dataset.amplitudePlaylist;
|
1107
|
-
if (currentPlaylist === playList) {
|
1108
|
-
miniPlayerPlayPauseButton[i].addEventListener('click', function(event) {
|
1109
|
-
// do nothing
|
1110
|
-
});
|
1111
|
-
}
|
1112
|
-
}
|
1113
|
-
} // END play_pause button (MINI player)
|
1123
|
+
}); // END addEventListener
|
1124
|
+
} // END if progressBars
|
1125
|
+
} // END for progressBars
|
1114
1126
|
|
1115
1127
|
} // END mini player UI events
|
1116
1128
|
{% endif %}
|
1117
1129
|
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1130
|
+
|
1131
|
+
{% comment %} process UI events for all COMPACT Players
|
1132
|
+
============================================================ {% endcomment %}
|
1133
|
+
{% if player.id contains 'compact' %}
|
1122
1134
|
if (document.getElementById('{{player.id}}') !== null) {
|
1123
1135
|
|
1124
1136
|
// show|hide scrollbar in playlist (compact player)
|
1125
1137
|
// -------------------------------------------------------
|
1126
1138
|
const songsInPlaylist = Amplitude.getSongsInPlaylist(playListName);
|
1127
|
-
if (songsInPlaylist.length <=
|
1139
|
+
if (songsInPlaylist.length <= playerScrollerSongElementMin) {
|
1128
1140
|
const titleListCompactPlayer = document.getElementById('compact_player_title_list_' + playListName);
|
1129
1141
|
if (titleListCompactPlayer !== null) {
|
1130
1142
|
titleListCompactPlayer.classList.add('hide-scrollbar');
|
1131
1143
|
}
|
1132
|
-
}
|
1144
|
+
} // END if songsInPlaylist
|
1133
1145
|
|
1134
1146
|
// show playlist
|
1135
1147
|
// -------------------------------------------------------
|
@@ -1159,7 +1171,8 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1159
1171
|
$('body').addClass('stop-scrolling');
|
1160
1172
|
}
|
1161
1173
|
}
|
1162
|
-
|
1174
|
+
|
1175
|
+
}); // END EventListener
|
1163
1176
|
} // END if showPlaylist
|
1164
1177
|
|
1165
1178
|
// hide playlist
|
@@ -1170,7 +1183,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1170
1183
|
var playlistScreen = document.getElementById("playlist_screen_{{player.id}}");
|
1171
1184
|
|
1172
1185
|
playlistScreen.classList.remove('slide-in-top');
|
1173
|
-
playlistScreen.classList.add('
|
1186
|
+
playlistScreen.classList.add('slide-out-top');
|
1174
1187
|
playlistScreen.style.display = "none";
|
1175
1188
|
playlistScreen.style.zIndex = "1";
|
1176
1189
|
|
@@ -1178,17 +1191,16 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1178
1191
|
if ($('body').hasClass('stop-scrolling')) {
|
1179
1192
|
$('body').removeClass('stop-scrolling');
|
1180
1193
|
}
|
1181
|
-
}); // END EventListener 'click' (compact player|show playlist)
|
1182
|
-
} // END if hidePlaylist
|
1183
1194
|
|
1195
|
+
}); // END addEventListener
|
1196
|
+
} // END if hidePlaylist
|
1184
1197
|
|
1185
1198
|
// add listeners to all progress bars found (compact-player)
|
1186
|
-
// getElementsByClassName returns an Array-like object
|
1187
1199
|
// -------------------------------------------------------
|
1188
1200
|
var progressBars = document.getElementsByClassName("compact-player-progress");
|
1189
1201
|
for (var i=0; i<progressBars.length; i++) {
|
1190
1202
|
if (progressBars[i].dataset.amplitudeSource === 'youtube') {
|
1191
|
-
// do nothing
|
1203
|
+
// do nothing for YTP (managed by plugin)
|
1192
1204
|
} else {
|
1193
1205
|
progressBars[i].addEventListener('click', function(event) {
|
1194
1206
|
var offset = this.getBoundingClientRect();
|
@@ -1196,56 +1208,99 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1196
1208
|
|
1197
1209
|
Amplitude.setSongPlayedPercentage(
|
1198
1210
|
(parseFloat(xpos)/parseFloat(this.offsetWidth))*100);
|
1199
|
-
}); // END EventListener 'click'
|
1200
|
-
}
|
1201
|
-
} // END for
|
1202
1211
|
|
1212
|
+
}); // END EventListener 'click'
|
1213
|
+
} // END if progressBars
|
1214
|
+
} // END for progressBars
|
1203
1215
|
|
1204
|
-
//
|
1216
|
+
// add listeners to all Next Buttons found (COMPACT player)
|
1205
1217
|
// -------------------------------------------------------
|
1206
1218
|
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1219
|
+
{% comment %} PREPARED event listener for LATER use
|
1220
|
+
----------------------------------------------------------
|
1221
|
+
var compactNextButtons = document.getElementsByClassName("compact-player-next");
|
1222
|
+
for (var i=0; i<compactNextButtons.length; i++) {
|
1223
|
+
if (compactNextButtons[i].dataset.amplitudeSource === 'youtube') {
|
1224
|
+
// do nothing for YTP (managed by plugin)
|
1212
1225
|
} else {
|
1213
|
-
if (
|
1214
|
-
|
1215
|
-
|
1226
|
+
if (compactNextButtons[i].id === 'compact_player_next_{{player.id}}' || compactNextButtons[i].id === 'compact_player_list_next_{{player.id}}') {
|
1227
|
+
compactNextButtons[i].addEventListener('click', function(event) {
|
1228
|
+
var atpPlayerID = this.id;
|
1229
|
+
var atpPlayerActive = atpPlayerID.split('_');
|
1230
|
+
|
1231
|
+
j1.adapter.amplitude.data.atpGlobals.activePlayerType = 'compact';
|
1232
|
+
|
1216
1233
|
}); // END EventListener 'click'
|
1217
1234
|
} // END if ID
|
1218
1235
|
}
|
1219
1236
|
} // END Next Buttons (COMPACT player)
|
1237
|
+
----------------------------------------------------------
|
1238
|
+
{% endcomment %}
|
1220
1239
|
|
1240
|
+
{% comment %} PREPARED event listener for LATER use
|
1241
|
+
----------------------------------------------------------
|
1221
1242
|
// add listeners to all Previous Buttons found
|
1222
1243
|
var compactPreviousButtons = document.getElementsByClassName("compact-player-previous");
|
1223
1244
|
for (var i=0; i<compactPreviousButtons.length; i++) {
|
1224
1245
|
if (compactPreviousButtons[i].dataset.amplitudeSource === 'youtube') {
|
1225
|
-
// do nothing
|
1246
|
+
// do nothing for YTP (managed by plugin)
|
1226
1247
|
} else {
|
1227
|
-
if (compactPreviousButtons[i].id === 'compact_player_previous_{{player.id}}') {
|
1248
|
+
if (compactPreviousButtons[i].id === 'compact_player_previous_{{player.id}}' || compactPreviousButtons[i].id === 'compact_player_list_previous_{{player.id}}') {
|
1228
1249
|
compactPreviousButtons[i].addEventListener('click', function(event) {
|
1229
|
-
|
1250
|
+
var atpPlayerID = this.id;
|
1251
|
+
var atpPlayerActive = atpPlayerID.split('_');
|
1252
|
+
|
1253
|
+
j1.adapter.amplitude.data.atpGlobals.activePlayerType = 'compact';
|
1254
|
+
|
1230
1255
|
}); // END EventListener 'click'
|
1231
1256
|
} // END if ID
|
1232
1257
|
}
|
1233
1258
|
} // END Previous Buttons (COMPACT player)
|
1259
|
+
----------------------------------------------------------
|
1260
|
+
{% endcomment %}
|
1234
1261
|
|
1262
|
+
{% comment %} PREPARED event listener for LATER use
|
1263
|
+
----------------------------------------------------------
|
1235
1264
|
// click on play_pause button (COMPACT player)
|
1236
1265
|
var compactPlayerPlayPauseButton = document.getElementsByClassName('compact-player-play-pause');
|
1237
1266
|
for (var i=0; i<compactPlayerPlayPauseButton.length; i++) {
|
1238
1267
|
if (compactPlayerPlayPauseButton[i].dataset.amplitudeSource === 'youtube') {
|
1239
1268
|
// do nothing (managed by plugin)
|
1240
1269
|
} else {
|
1241
|
-
var currentPlaylist = compactPlayerPlayPauseButton[i].dataset.amplitudePlaylist;
|
1242
|
-
if (currentPlaylist ===
|
1270
|
+
// var currentPlaylist = compactPlayerPlayPauseButton[i].dataset.amplitudePlaylist;
|
1271
|
+
// if (currentPlaylist === playListName) {
|
1272
|
+
if (compactPlayerPlayPauseButton[i].id === 'compact_player_play_pause_{{player.id}}' || compactPlayerPlayPauseButton[i].id === 'compact_player_list_play_pause_{{player.id}}') {
|
1243
1273
|
compactPlayerPlayPauseButton[i].addEventListener('click', function(event) {
|
1244
|
-
|
1245
|
-
|
1274
|
+
var ytpPlayer;
|
1275
|
+
var ytpPlayerState;
|
1276
|
+
var playerState;
|
1277
|
+
|
1278
|
+
// stop active YT players
|
1279
|
+
const ytPlayers = Object.keys(j1.adapter.amplitude.data.ytPlayers);
|
1280
|
+
for (let i=0; i<ytPlayers.length; i++) {
|
1281
|
+
const playerID = ytPlayers[i];
|
1282
|
+
const playerProperties = j1.adapter.amplitude.data.ytPlayers[playerID];
|
1283
|
+
logger.debug('\n' + 'process player id: ' + playerID);
|
1284
|
+
ytpPlayer = j1.adapter.amplitude.data.ytPlayers[playerID].player;
|
1285
|
+
playerState = ytpPlayer.getPlayerState();
|
1286
|
+
ytpPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1287
|
+
|
1288
|
+
if (ytpPlayerState === 'playing' || ytpPlayerState === 'paused' || ytpPlayerState === 'buffering') {
|
1289
|
+
logger.debug('\n' + 'process player id: ' + playerID + ' stopped');
|
1290
|
+
ytpPlayer.stopVideo();
|
1291
|
+
}
|
1292
|
+
}
|
1293
|
+
|
1294
|
+
// save YT player data for later use (e.g. events)
|
1295
|
+
j1.adapter.amplitude.data.activePlayer = 'atp';
|
1296
|
+
j1.adapter.amplitude.data.atpGlobals.activePlayerType = 'compact';
|
1297
|
+
|
1298
|
+
});
|
1246
1299
|
}
|
1247
1300
|
}
|
1248
1301
|
} // END play_pause button (COMPACT player)
|
1302
|
+
----------------------------------------------------------
|
1303
|
+
{% endcomment %}
|
1249
1304
|
|
1250
1305
|
// click on skip forward|backward (COMPACT player)
|
1251
1306
|
// See: https://github.com/serversideup/amplitudejs/issues/384
|
@@ -1255,10 +1310,14 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1255
1310
|
var compactPlayerSkipForwardButtons = document.getElementsByClassName("compact-player-skip-forward");
|
1256
1311
|
for (var i=0; i<compactPlayerSkipForwardButtons.length; i++) {
|
1257
1312
|
if (compactPlayerSkipForwardButtons[i].dataset.amplitudeSource === 'youtube') {
|
1258
|
-
// do nothing
|
1313
|
+
// do nothing for YTP (managed by plugin)
|
1259
1314
|
} else {
|
1260
1315
|
if (compactPlayerSkipForwardButtons[i].id === 'skip-forward_{{player.id}}') {
|
1261
1316
|
compactPlayerSkipForwardButtons[i].addEventListener('click', function(event) {
|
1317
|
+
|
1318
|
+
// load player settings
|
1319
|
+
// playerForwardBackwardSkipSeconds = (playerSettings.forward_backward_skip_seconds === undefined) ? playerForwardBackwardSkipSeconds: playerSettings.forward_backward_skip_seconds;
|
1320
|
+
|
1262
1321
|
const skipOffset = parseFloat(playerForwardBackwardSkipSeconds);
|
1263
1322
|
const duration = Amplitude.getSongDuration();
|
1264
1323
|
const currentTime = parseFloat(Amplitude.getSongPlayedSeconds());
|
@@ -1267,6 +1326,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1267
1326
|
if (currentTime > 0) {
|
1268
1327
|
Amplitude.setSongPlayedPercentage((targetTime / duration) * 100);
|
1269
1328
|
}
|
1329
|
+
|
1270
1330
|
}); // END EventListener 'click'
|
1271
1331
|
} // END if ID
|
1272
1332
|
}
|
@@ -1276,10 +1336,14 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1276
1336
|
var compactPlayerSkipBackwardButtons = document.getElementsByClassName("compact-player-skip-backward");
|
1277
1337
|
for (var i=0; i<compactPlayerSkipBackwardButtons.length; i++) {
|
1278
1338
|
if (compactPlayerSkipBackwardButtons[i].dataset.amplitudeSource === 'youtube') {
|
1279
|
-
// do nothing
|
1339
|
+
// do nothing for YTP (managed by plugin)
|
1280
1340
|
} else {
|
1281
1341
|
if (compactPlayerSkipBackwardButtons[i].id === 'skip-backward_{{player.id}}') {
|
1282
1342
|
compactPlayerSkipBackwardButtons[i].addEventListener('click', function(event) {
|
1343
|
+
|
1344
|
+
// load player settings
|
1345
|
+
// playerForwardBackwardSkipSeconds = (playerSettings.forward_backward_skip_seconds === undefined) ? playerForwardBackwardSkipSeconds: playerSettings.forward_backward_skip_seconds;
|
1346
|
+
|
1283
1347
|
const skipOffset = parseFloat(playerForwardBackwardSkipSeconds);
|
1284
1348
|
const duration = Amplitude.getSongDuration();
|
1285
1349
|
const currentTime = parseFloat(Amplitude.getSongPlayedSeconds());
|
@@ -1288,6 +1352,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1288
1352
|
if (currentTime > 0) {
|
1289
1353
|
Amplitude.setSongPlayedPercentage((targetTime / duration) * 100);
|
1290
1354
|
}
|
1355
|
+
|
1291
1356
|
}); // END EventListener 'click'
|
1292
1357
|
} // END if ID
|
1293
1358
|
}
|
@@ -1300,6 +1365,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1300
1365
|
var shuffleState = (document.getElementById('compact_player_shuffle').className.includes('amplitude-shuffle-on')) ? true : false;
|
1301
1366
|
|
1302
1367
|
Amplitude.setShuffle(shuffleState)
|
1368
|
+
|
1303
1369
|
}); // END EventListener 'click'
|
1304
1370
|
} // END PlayerShuffleButton (COMPACT player)
|
1305
1371
|
|
@@ -1310,73 +1376,145 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1310
1376
|
var repeatState = (document.getElementById('compact_player_repeat').className.includes('amplitude-repeat-on')) ? true : false;
|
1311
1377
|
|
1312
1378
|
Amplitude.setRepeat(repeatState)
|
1379
|
+
|
1313
1380
|
}); // END EventListener 'click'
|
1314
1381
|
} // END PlayerRepeatButton (COMPACT player)
|
1315
1382
|
|
1316
1383
|
} // END compact player UI events
|
1317
1384
|
{% endif %}
|
1318
1385
|
|
1386
|
+
|
1387
|
+
{% comment %} process UI events for all LARGE Players
|
1388
|
+
============================================================ {% endcomment %}
|
1319
1389
|
{% if player.id contains 'large' %}
|
1320
|
-
|
1321
|
-
// ---------------------------------------------------------
|
1390
|
+
|
1322
1391
|
if (document.getElementById('{{player.id}}') !== null) {
|
1323
1392
|
// var playlist = '{{player.id}}_yt';
|
1324
1393
|
var playlistInfo = {{player.playlist | replace: 'nil', 'null' | replace: '=>', ':'}};
|
1325
1394
|
var playList = playlistInfo.name;
|
1326
1395
|
|
1327
|
-
//
|
1396
|
+
// add listeners to all SongContainers found (LARGE player)
|
1328
1397
|
// -------------------------------------------------------
|
1329
|
-
var
|
1330
|
-
for (var i=0; i<
|
1331
|
-
if (
|
1332
|
-
// do nothing
|
1398
|
+
var largePlayerSongContainer = document.getElementsByClassName("amplitude-song-container");
|
1399
|
+
for (var i=0; i<largePlayerSongContainer.length; i++) {
|
1400
|
+
if (largePlayerSongContainer[i].dataset.amplitudeSource === 'youtube') {
|
1401
|
+
// do nothing for YTP (managed by plugin)
|
1333
1402
|
} else {
|
1334
|
-
var currentPlaylist =
|
1403
|
+
var currentPlaylist = largePlayerSongContainer[i].dataset.amplitudePlaylist;
|
1335
1404
|
if (currentPlaylist === playList) {
|
1336
|
-
|
1337
|
-
|
1338
|
-
|
1405
|
+
// if (largePlayerSongContainer[i].id === 'large-player-play-pause_{{player.id}}' || largePlayerSongContainer[i].id === 'large-player-play-pause_{{player.id}}') {
|
1406
|
+
largePlayerSongContainer[i].addEventListener('click', function(event) {
|
1407
|
+
var ytpPlayer, ytpPlayerState, ytpPlayerState, atpPlayerState,
|
1408
|
+
playerState, classArray, atpPlayerActive, metaData,
|
1409
|
+
playlist, playlistIndex;
|
1339
1410
|
|
1340
1411
|
classArray = [].slice.call(this.classList, 0);
|
1341
1412
|
atpPlayerActive = classArray[0].split('-');
|
1342
1413
|
playlist = this.getAttribute("data-amplitude-playlist");
|
1414
|
+
playlistIndex = parseInt(this.getAttribute("data-amplitude-song-index"));
|
1415
|
+
metaData = Amplitude.getActiveSongMetadata();
|
1416
|
+
atpPlayerState = Amplitude.getPlayerState();
|
1417
|
+
|
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
|
1343
1437
|
|
1344
1438
|
// scroll song active at index in player
|
1345
|
-
|
1346
|
-
|
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
|
+
// stop active YT players
|
1455
|
+
// -----------------------------------------------
|
1456
|
+
const ytPlayers = Object.keys(j1.adapter.amplitude.data.ytPlayers);
|
1457
|
+
for (let i=0; i<ytPlayers.length; i++) {
|
1458
|
+
const playerID = ytPlayers[i];
|
1459
|
+
const playerProperties = j1.adapter.amplitude.data.ytPlayers[playerID];
|
1460
|
+
logger.debug('\n' + 'process player id: ' + playerID);
|
1461
|
+
ytpPlayer = j1.adapter.amplitude.data.ytPlayers[playerID].player;
|
1462
|
+
playerState = ytpPlayer.getPlayerState();
|
1463
|
+
ytpPlayerState = YT_PLAYER_STATE_NAMES[playerState];
|
1464
|
+
|
1465
|
+
if (ytpPlayerState === 'playing' || ytpPlayerState === 'paused' || ytpPlayerState === 'buffering') {
|
1466
|
+
logger.debug('\n' + 'process player id: ' + playerID + ' stopped');
|
1467
|
+
ytpPlayer.stopVideo();
|
1468
|
+
}
|
1347
1469
|
}
|
1348
|
-
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1470
|
+
|
1471
|
+
// save YT player data for later use (e.g. events)
|
1472
|
+
// -----------------------------------------------
|
1473
|
+
j1.adapter.amplitude.data.activePlayer = 'atp';
|
1474
|
+
j1.adapter.amplitude.data.atpGlobals.activePlayerType = atpPlayerActive[3];
|
1475
|
+
|
1476
|
+
}); // END add EventListener
|
1477
|
+
} // END if currentPlaylist
|
1478
|
+
} // ENF if largePlayerSongContainer
|
1479
|
+
} // END for largePlayerSongContainer
|
1352
1480
|
|
1353
1481
|
// click on prev button
|
1354
1482
|
var largePlayerPreviousButton = document.getElementById('large_player_previous');
|
1355
1483
|
if (largePlayerPreviousButton && largePlayerPreviousButton.getAttribute("data-amplitude-source") === 'youtube') {
|
1356
|
-
// do nothing (managed by plugin)
|
1484
|
+
// do nothing for YTP (managed by plugin)
|
1357
1485
|
}
|
1358
1486
|
|
1359
|
-
//
|
1487
|
+
// add listeners to all PlayPause Buttons found (LARGE player)
|
1488
|
+
// -------------------------------------------------------
|
1489
|
+
|
1490
|
+
{% comment %} PREPARED event listener for LATER use
|
1491
|
+
----------------------------------------------------------
|
1360
1492
|
var largePlayerPlayPauseButton = document.getElementsByClassName('large-player-play-pause');
|
1361
1493
|
for (var i=0; i<largePlayerPlayPauseButton.length; i++) {
|
1362
1494
|
if (largePlayerPlayPauseButton[i].dataset.amplitudeSource === 'youtube') {
|
1363
|
-
// do nothing (managed by
|
1495
|
+
// do nothing for YTP (managed by plugin)
|
1364
1496
|
} else {
|
1365
|
-
var currentPlaylist = largePlayerPlayPauseButton[i].dataset.amplitudePlaylist;
|
1366
|
-
if (currentPlaylist === playList) {
|
1497
|
+
var currentPlaylist = largePlayerPlayPauseButton[i].dataset.amplitudePlaylist;
|
1498
|
+
if (currentPlaylist === playList) {
|
1367
1499
|
largePlayerPlayPauseButton[i].addEventListener('click', function(event) {
|
1368
|
-
|
1500
|
+
var ytpPlayer, ytpPlayerState, playlist, metaData, playerState;
|
1501
|
+
|
1502
|
+
metaData = Amplitude.getActiveSongMetadata();
|
1503
|
+
playlist = this.getAttribute("data-amplitude-playlist");
|
1504
|
+
|
1369
1505
|
});
|
1370
1506
|
}
|
1371
1507
|
}
|
1372
1508
|
} // END play_pause button (LARGE player)
|
1509
|
+
----------------------------------------------------------
|
1510
|
+
{% endcomment %}
|
1373
1511
|
|
1374
1512
|
// add listeners to all progress bars found (LARGE player)
|
1375
1513
|
// -------------------------------------------------------
|
1376
1514
|
var progressBars = document.getElementsByClassName("large-player-progress");
|
1377
1515
|
for (var i=0; i<progressBars.length; i++) {
|
1378
1516
|
if (progressBars[i].dataset.amplitudeSource === 'youtube') {
|
1379
|
-
// do nothing (managed by plugin)
|
1517
|
+
// do nothing for YTP (managed by plugin)
|
1380
1518
|
} else {
|
1381
1519
|
progressBars[i].addEventListener('click', function(event) {
|
1382
1520
|
var offset = this.getBoundingClientRect();
|
@@ -1385,50 +1523,97 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1385
1523
|
if (Amplitude.getPlayerState() === 'playing') {
|
1386
1524
|
Amplitude.setSongPlayedPercentage((parseFloat(xpos)/parseFloat(this.offsetWidth))*100);
|
1387
1525
|
}
|
1526
|
+
|
1388
1527
|
}); // END EventListener 'click'
|
1389
1528
|
}
|
1390
1529
|
} // END for
|
1391
1530
|
|
1392
|
-
|
1393
|
-
// click on Next|Previous Buttons (LARGE player)
|
1531
|
+
// add listeners to all Next Buttons found (LARGE player)
|
1394
1532
|
// -------------------------------------------------------
|
1395
|
-
|
1396
|
-
// add listeners to all Next Buttons found
|
1397
1533
|
var largeNextButtons = document.getElementsByClassName("large-player-next");
|
1398
1534
|
for (var i=0; i<largeNextButtons.length; i++) {
|
1399
1535
|
if (largeNextButtons[i].dataset.amplitudeSource === 'youtube') {
|
1400
|
-
// do nothing (managed by plugin)
|
1536
|
+
// do nothing for YTP (managed by plugin)
|
1401
1537
|
} else {
|
1402
1538
|
if (largeNextButtons[i].id === 'large_player_next_{{player.id}}') {
|
1403
1539
|
largeNextButtons[i].addEventListener('click', function(event) {
|
1404
|
-
var atpPlayerID
|
1405
|
-
|
1406
|
-
|
1540
|
+
var atpPlayerID, atpPlayerActive, metaData, playlist;
|
1541
|
+
|
1542
|
+
atpPlayerID = this.id;
|
1543
|
+
atpPlayerActive = atpPlayerID.split('_');
|
1544
|
+
playlist = this.getAttribute("data-amplitude-playlist");
|
1545
|
+
metaData = Amplitude.getActiveSongMetadata();
|
1546
|
+
|
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
|
1407
1563
|
|
1408
1564
|
// scroll song active at index in player
|
1565
|
+
// -----------------------------------------------
|
1409
1566
|
if (playerAutoScrollSongElement) {
|
1410
1567
|
j1.adapter.amplitude.atPlayerScrollToActiveElement(playlist);
|
1411
1568
|
}
|
1412
1569
|
|
1413
1570
|
// save YT player data for later use (e.g. events)
|
1571
|
+
// -----------------------------------------------
|
1414
1572
|
j1.adapter.amplitude.data.activePlayer = 'atp';
|
1415
1573
|
j1.adapter.amplitude.data.atpGlobals.activePlayerType = atpPlayerActive[0];
|
1574
|
+
|
1416
1575
|
}); // END EventListener 'click'
|
1417
|
-
} // END
|
1418
|
-
}
|
1576
|
+
} // END addEventListener
|
1577
|
+
} // END if largeNextButtons
|
1419
1578
|
} // END for Next Buttons
|
1420
1579
|
|
1421
1580
|
// add listeners to all Previous Buttons found
|
1581
|
+
// -------------------------------------------------------
|
1422
1582
|
var largePreviousButtons = document.getElementsByClassName("large-player-previous");
|
1423
1583
|
for (var i=0; i<largePreviousButtons.length; i++) {
|
1424
1584
|
if (largePreviousButtons[i].dataset.amplitudeSource === 'youtube') {
|
1425
|
-
// do nothing (managed by plugin)
|
1585
|
+
// do nothing for YTP (managed by plugin)
|
1426
1586
|
} else {
|
1427
1587
|
if (largePreviousButtons[i].id === 'large_player_previous_{{player.id}}') {
|
1428
1588
|
largePreviousButtons[i].addEventListener('click', function(event) {
|
1429
|
-
var atpPlayerID
|
1430
|
-
|
1431
|
-
|
1589
|
+
var atpPlayerID, atpPlayerActive, metaData, playlist;
|
1590
|
+
|
1591
|
+
atpPlayerID = this.id;
|
1592
|
+
atpPlayerActive = atpPlayerID.split('_');
|
1593
|
+
playlist = this.getAttribute("data-amplitude-playlist");
|
1594
|
+
metaData = Amplitude.getActiveSongMetadata();
|
1595
|
+
|
1596
|
+
// update song rating in screen controls
|
1597
|
+
var largePlayerSongAudioRating = document.getElementsByClassName("audio-rating-screen-controls");
|
1598
|
+
if (largePlayerSongAudioRating.length) {
|
1599
|
+
for (var i=0; i<largePlayerSongAudioRating.length; i++) {
|
1600
|
+
var currentPlaylist = largePlayerSongAudioRating[i].dataset.amplitudePlaylist;
|
1601
|
+
if (currentPlaylist === playlist) {
|
1602
|
+
if (metaData.rating) {
|
1603
|
+
var trackID = metaData.index + 1;
|
1604
|
+
logger.debug('\n' + `UPDATE song rating on updatMetaContainers for trackID|playlist at: ${trackID}|${playlist} with a value of: ${metaData.rating}`);
|
1605
|
+
largePlayerSongAudioRating[i].innerHTML = '<img src="/assets/image/pattern/rating/scalable/' + metaData.rating + '-star.svg"' + 'alt="song rating">';
|
1606
|
+
} else {
|
1607
|
+
largePlayerSongAudioRating[i].innerHTML = '';
|
1608
|
+
}
|
1609
|
+
}
|
1610
|
+
}
|
1611
|
+
} // END if largePlayerSongAudioRating
|
1612
|
+
|
1613
|
+
// scroll song active at index in player
|
1614
|
+
if (playerAutoScrollSongElement) {
|
1615
|
+
j1.adapter.amplitude.atPlayerScrollToActiveElement(playlist);
|
1616
|
+
}
|
1432
1617
|
|
1433
1618
|
// scroll song active at index in player
|
1434
1619
|
if (playerAutoScrollSongElement) {
|
@@ -1438,22 +1623,20 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1438
1623
|
// save YT player data for later use (e.g. events)
|
1439
1624
|
j1.adapter.amplitude.data.activePlayer = 'atp';
|
1440
1625
|
j1.adapter.amplitude.data.atpGlobals.activePlayerType = atpPlayerActive[0];
|
1441
|
-
}); // END EventListener 'click'
|
1442
|
-
} // END if ID
|
1443
|
-
}
|
1444
|
-
} // END for Previous Buttons
|
1445
1626
|
|
1627
|
+
}); // END addEventListener
|
1628
|
+
} // END if largePreviousButtons
|
1629
|
+
} // END if largePreviousButtons
|
1630
|
+
} // END for Previous Buttons
|
1446
1631
|
|
1447
|
-
//
|
1632
|
+
// add listeners to all SkipForward Buttons found
|
1448
1633
|
// See: https://github.com/serversideup/amplitudejs/issues/384
|
1449
1634
|
// -------------------------------------------------------
|
1450
|
-
|
1451
|
-
// add listeners to all SkipForwardButtons found
|
1452
1635
|
var largePlayerSkipForwardButtons = document.getElementsByClassName("large-player-skip-forward");
|
1453
1636
|
for (var i=0; i<largePlayerSkipForwardButtons.length; i++) {
|
1454
1637
|
if (largePlayerSkipForwardButtons[i].id === 'skip-forward_{{player.id}}') {
|
1455
1638
|
if (largePlayerSkipForwardButtons[i].dataset.amplitudeSource === 'youtube') {
|
1456
|
-
// do nothing (managed by plugin)
|
1639
|
+
// do nothing for YTP (managed by plugin)
|
1457
1640
|
} else {
|
1458
1641
|
largePlayerSkipForwardButtons[i].addEventListener('click', function(event) {
|
1459
1642
|
const skipOffset = parseFloat(playerForwardBackwardSkipSeconds);
|
@@ -1462,19 +1645,21 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1462
1645
|
const targetTime = parseFloat(currentTime + skipOffset);
|
1463
1646
|
|
1464
1647
|
if (currentTime > 0) {
|
1648
|
+
logger.debug('\n' + `SKIP forward on Button skipForward for ${skipOffset} seconds`);
|
1465
1649
|
Amplitude.setSongPlayedPercentage((targetTime / duration) * 100);
|
1466
1650
|
}
|
1467
|
-
}); // END
|
1468
|
-
} // END
|
1469
|
-
} // END if
|
1651
|
+
}); // END addEventListener
|
1652
|
+
} // END largePlayerSkipForwardButtons
|
1653
|
+
} // END if largePlayerSkipForwardButtons
|
1470
1654
|
} // END for SkipForwardButtons
|
1471
1655
|
|
1472
|
-
// add listeners to all
|
1656
|
+
// add listeners to all SkipBackward Buttons found
|
1657
|
+
// -------------------------------------------------------
|
1473
1658
|
var largePlayerSkipBackwardButtons = document.getElementsByClassName("large-player-skip-backward");
|
1474
1659
|
for (var i=0; i<largePlayerSkipBackwardButtons.length; i++) {
|
1475
1660
|
if (largePlayerSkipBackwardButtons[i].id === 'skip-backward_{{player.id}}') {
|
1476
1661
|
if (largePlayerSkipBackwardButtons[i].dataset.amplitudeSource === 'youtube') {
|
1477
|
-
// do nothing (managed by plugin)
|
1662
|
+
// do nothing for YTP (managed by plugin)
|
1478
1663
|
} else {
|
1479
1664
|
largePlayerSkipBackwardButtons[i].addEventListener('click', function(event) {
|
1480
1665
|
const skipOffset = parseFloat(playerForwardBackwardSkipSeconds);
|
@@ -1483,11 +1668,12 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1483
1668
|
const targetTime = parseFloat(currentTime - skipOffset);
|
1484
1669
|
|
1485
1670
|
if (currentTime > 0) {
|
1671
|
+
logger.debug('\n' + `SKIP backward on Button skipForward for ${skipOffset} seconds`);
|
1486
1672
|
Amplitude.setSongPlayedPercentage((targetTime / duration) * 100);
|
1487
1673
|
}
|
1488
|
-
}); // END
|
1674
|
+
}); // END addEventListener
|
1489
1675
|
} // END else
|
1490
|
-
} // END if
|
1676
|
+
} // END if largePlayerSkipBackwardButtons
|
1491
1677
|
} // END for SkipBackwardButtons
|
1492
1678
|
|
1493
1679
|
// click on shuffle button
|
@@ -1495,34 +1681,36 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1495
1681
|
if (largePlayerShuffleButton) {
|
1496
1682
|
largePlayerShuffleButton.addEventListener('click', function(event) {
|
1497
1683
|
var shuffleState = (document.getElementById('large_player_shuffle').className.includes('amplitude-shuffle-on')) ? true : false;
|
1684
|
+
logger.debug('\n' + `Set shuffle state to: ${shuffleState}`);
|
1498
1685
|
Amplitude.setShuffle(shuffleState)
|
1499
|
-
}); // END
|
1500
|
-
} // END largePlayerShuffleButton
|
1686
|
+
}); // END addEventListener
|
1687
|
+
} // END if largePlayerShuffleButton
|
1501
1688
|
|
1502
1689
|
// click on repeat button
|
1503
1690
|
var largePlayerRepeatButton = document.getElementById('large_player_repeat');
|
1504
1691
|
if (largePlayerRepeatButton) {
|
1505
1692
|
largePlayerRepeatButton.addEventListener('click', function(event) {
|
1506
1693
|
var repeatState = (document.getElementById('large_player_repeat').className.includes('amplitude-repeat-on')) ? true : false;
|
1694
|
+
logger.debug('\n' + `Set repeat state to: ${repeatState}`);
|
1507
1695
|
Amplitude.setRepeat(repeatState)
|
1508
|
-
}); // END
|
1696
|
+
}); // END addEventListener
|
1509
1697
|
} // END if largePlayerRepeatButton
|
1510
1698
|
|
1511
|
-
// enable|disable scrolling on playlist (
|
1699
|
+
// enable|disable scrolling on playlist (LARGE player)
|
1512
1700
|
// -------------------------------------------------------
|
1513
1701
|
if (document.getElementById('large_player_right') !== null) {
|
1514
1702
|
|
1515
1703
|
// show|hide scrollbar in playlist
|
1516
1704
|
// -----------------------------------------------------
|
1517
1705
|
var songsInPlaylist = Amplitude.getSongsInPlaylist(playListName);
|
1518
|
-
if (songsInPlaylist.length <=
|
1706
|
+
if (songsInPlaylist.length <= playerScrollerSongElementMin) {
|
1519
1707
|
const titleListLargePlayer = document.getElementById('large_player_title_list_' + playListName);
|
1520
1708
|
if (titleListLargePlayer !== null) {
|
1521
1709
|
titleListLargePlayer.classList.add('hide-scrollbar');
|
1522
1710
|
}
|
1523
|
-
}
|
1711
|
+
} // END show|hide scrollbar in playlist
|
1524
1712
|
|
1525
|
-
// scroll to
|
1713
|
+
// scroll player to top position (LARGE player)
|
1526
1714
|
//
|
1527
1715
|
// Bootstrap grid breakpoints
|
1528
1716
|
// SN: 576px Mobile
|
@@ -1538,21 +1726,21 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1538
1726
|
var playlistHeader = document.getElementById("playlist_header_{{player.id}}");
|
1539
1727
|
var scrollOffset = (window.innerWidth >= 992) ? -130 : -44;
|
1540
1728
|
|
1541
|
-
// scroll player|playlist to top position (
|
1542
|
-
//
|
1729
|
+
// scroll player|playlist to top position (LARGE player)
|
1730
|
+
// NOTE: depending on WINDOW SIZE the relation changes to TOP POSITION (targetDivPosition)
|
1731
|
+
// -- ------------------------------------------------
|
1543
1732
|
const targetDivPlayerRight = playerRight;
|
1544
1733
|
const targetDivPositionPlayerRight = targetDivPlayerRight.offsetTop;
|
1545
1734
|
const targetDivPlaylistHeader = playlistHeader;
|
1546
1735
|
const targetDivPositionplaylistHeader = targetDivPlaylistHeader.offsetTop;
|
1547
1736
|
|
1548
|
-
// NOTE: depending on WINDOW SIZE the relation changes to TOP POSITION (targetDivPosition)
|
1549
|
-
//
|
1550
1737
|
if (targetDivPositionPlayerRight > targetDivPositionplaylistHeader) {
|
1551
1738
|
window.scrollTo(0, targetDivPositionPlayerRight + targetDivPlaylistHeader.offsetParent.firstElementChild.clientHeight + scrollOffset);
|
1552
1739
|
} else {
|
1553
1740
|
window.scrollTo(0, targetDivPositionplaylistHeader + scrollOffset);
|
1554
1741
|
}
|
1555
|
-
|
1742
|
+
|
1743
|
+
}); // END addEventListener
|
1556
1744
|
|
1557
1745
|
var largePlayerPlaylistHeader = document.getElementById("playlist_header_{{player.id}}");
|
1558
1746
|
largePlayerPlaylistHeader.addEventListener('click', function(event) {
|
@@ -1560,7 +1748,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1560
1748
|
var playlistHeader = document.getElementById("playlist_header_{{player.id}}");
|
1561
1749
|
var scrollOffset = (window.innerWidth >= 992) ? -130 : -44;
|
1562
1750
|
|
1563
|
-
// scroll player|playlist to top position (
|
1751
|
+
// scroll player|playlist to top position (LARGE player)
|
1564
1752
|
//
|
1565
1753
|
const targetDivPlayerRight = playerRight;
|
1566
1754
|
const targetDivPositionPlayerRight = targetDivPlayerRight.offsetTop;
|
@@ -1575,7 +1763,7 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1575
1763
|
window.scrollTo(0, targetDivPositionplaylistHeader + scrollOffset);
|
1576
1764
|
}
|
1577
1765
|
|
1578
|
-
}); // END
|
1766
|
+
}); // END addEventListener
|
1579
1767
|
|
1580
1768
|
// disable scrolling (if window viewport >= BS Medium and above)
|
1581
1769
|
document.getElementById('large_player_right').addEventListener('mouseenter', function() {
|
@@ -1586,14 +1774,14 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1586
1774
|
$('body').addClass('stop-scrolling');
|
1587
1775
|
}
|
1588
1776
|
}
|
1589
|
-
}); // END
|
1777
|
+
}); // END addEventListener
|
1590
1778
|
|
1591
1779
|
// enable scrolling
|
1592
1780
|
document.getElementById('large_player_right').addEventListener('mouseleave', function() {
|
1593
1781
|
if ($('body').hasClass('stop-scrolling')) {
|
1594
1782
|
$('body').removeClass('stop-scrolling');
|
1595
1783
|
}
|
1596
|
-
}); // END
|
1784
|
+
}); // END addEventListener
|
1597
1785
|
|
1598
1786
|
} // END enable|disable scrolling on playlist
|
1599
1787
|
|
@@ -1759,30 +1947,78 @@ j1.adapter.amplitude = ((j1, window) => {
|
|
1759
1947
|
}, // END pluginManager
|
1760
1948
|
|
1761
1949
|
// -------------------------------------------------------------------------
|
1762
|
-
// atPlayerScrollToActiveElement(
|
1950
|
+
// atPlayerScrollToActiveElement(metaData)
|
1763
1951
|
// -------------------------------------------------------------------------
|
1764
|
-
atPlayerScrollToActiveElement: (
|
1952
|
+
atPlayerScrollToActiveElement: (metaData) => {
|
1765
1953
|
var scrollableList, songIndex,
|
1766
|
-
activeElement, activeElementOffsetTop
|
1954
|
+
activeElement, activeElementOffsetTop,
|
1955
|
+
songElementMin, numSongs;
|
1956
|
+
|
1957
|
+
if (!playerAutoScrollSongElement) {
|
1958
|
+
// do nothing if playerAutoScrollSongElement is false
|
1959
|
+
return;
|
1960
|
+
}
|
1767
1961
|
|
1768
|
-
|
1962
|
+
songIndex = metaData.index;
|
1963
|
+
songElementMin = playerScrollerSongElementMin;
|
1964
|
+
numSongs = Amplitude.getSongsInPlaylist(metaData.playlist).length;
|
1965
|
+
scrollableList = document.getElementById('large_player_title_list_' + metaData.playlist);
|
1769
1966
|
activeElement = scrollableList.querySelector('.amplitude-active-song-container');
|
1770
1967
|
|
1771
1968
|
if (activeElement === null || scrollableList === null) {
|
1772
|
-
// do nothing if NO scrollableList or
|
1969
|
+
// do nothing if NO scrollableList or ACTIVE element found (failsafe)
|
1773
1970
|
return;
|
1774
1971
|
}
|
1775
1972
|
|
1776
|
-
songIndex
|
1777
|
-
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1973
|
+
if (songIndex > 0 && numSongs >= songElementMin) {
|
1974
|
+
scrollableList = document.getElementById('large_player_title_list_' + metaData.playlist);
|
1975
|
+
activeElement = scrollableList.querySelector('.amplitude-active-song-container');
|
1976
|
+
activeElementOffsetTop = songIndex * j1.adapter.amplitude.data.playerSongElementHeigth;
|
1977
|
+
scrollableList.scrollTop = activeElementOffsetTop;
|
1978
|
+
} else {
|
1979
|
+
// do nothing if songIndex is 0 or less than songElementMin
|
1980
|
+
return;
|
1782
1981
|
}
|
1783
1982
|
|
1784
1983
|
}, // END atPlayerScrollToActiveElement
|
1785
1984
|
|
1985
|
+
// -------------------------------------------------------------------------
|
1986
|
+
// atUpdateSongRating(playlist, rating)
|
1987
|
+
//
|
1988
|
+
// update song rating in playlist-screen|meta-container
|
1989
|
+
// -------------------------------------------------------------------------
|
1990
|
+
atUpdateSongRating: (metaData) => {
|
1991
|
+
var screenControlRating = null;
|
1992
|
+
var screenControlRatingElements = document.getElementsByClassName('audio-rating-screen-controls');
|
1993
|
+
var ratingIndex;
|
1994
|
+
|
1995
|
+
for (let i=0; i<screenControlRatingElements.length; i++) {
|
1996
|
+
var ratingElement = screenControlRatingElements[i];
|
1997
|
+
var rating = parseInt(metaData.rating);
|
1998
|
+
var playerType = ratingElement.dataset.playerType;
|
1999
|
+
var activePlayerType = j1.adapter.amplitude.data.atpGlobals.activePlayerType;
|
2000
|
+
var activePlayist = metaData.playlist;
|
2001
|
+
|
2002
|
+
if (ratingElement.dataset.amplitudePlaylist === activePlayist && playerType === activePlayerType) {
|
2003
|
+
ratingIndex = i;
|
2004
|
+
screenControlRating = ratingElement;
|
2005
|
+
break;
|
2006
|
+
}
|
2007
|
+
|
2008
|
+
}
|
2009
|
+
|
2010
|
+
// set the rating for ACTIVE screenControlRatingElement
|
2011
|
+
// -----------------------------------------------------------------------
|
2012
|
+
if (screenControlRating) {
|
2013
|
+
if (rating) {
|
2014
|
+
ratingElement.innerHTML = '<img src="/assets/image/pattern/rating/scalable/' + rating + '-star.svg"' + 'alt="song rating">';
|
2015
|
+
} else {
|
2016
|
+
ratingElement.innerHTML = '';
|
2017
|
+
}
|
2018
|
+
}
|
2019
|
+
|
2020
|
+
}, // END atUpdateSongRating
|
2021
|
+
|
1786
2022
|
// -------------------------------------------------------------------------
|
1787
2023
|
// messageHandler()
|
1788
2024
|
// manage messages send from other J1 modules
|