random player ready

This commit is contained in:
Bachir Soussi Chiadmi
2018-03-18 13:29:34 +01:00
parent d317b85ef3
commit 003b381d6d
6 changed files with 181 additions and 86 deletions
@@ -92,12 +92,13 @@
this.hideTimeMS = 10000;
// history
this.next_node = null;
this.currentHistoricIndex = null;
this.historic = [];
this.shuffle_is_active = false;
// object events
this.event_handlers = {
'audio-play-next':[],
'audio-ended':[]
};
@@ -126,17 +127,21 @@
this.$next.on('click', this.playNext.bind(this));
// TODO: previous and next btns
},
openDocument(node, next_node){
openDocument(node){
console.log('AudioPlayer openDocument', node);
this.historic.push(node);
this.currentHistoricIndex = this.historic.length-1;
this.next_node = next_node || null;
// TODO: emmit new playing doc (need for corpus map nowing that audio played from RandomPlayer)
// this.shuffle_mode = shuffle_mode || false;
this.launch();
},
launch(){
this.setSRC(this.historic[this.currentHistoricIndex].audio_url);
this.loadNode(this.historic[this.currentHistoricIndex].nid);
// emmit new playing doc (e.g.: corpus map nowing that audio played from RandomPlayer)
_$corpus_canvas.trigger({
'type':'audio-node-opened',
'id':this.historic[this.currentHistoricIndex].id
});
this.showHidePreviousBtn();
this.showHideNextBtn();
this.show();
@@ -173,14 +178,17 @@
this.audio.play();
},
playPrevious(){
if(typeof this.historic[this.currentHistoricIndex-1] !== 'undefined'){
if(this.currentHistoricIndex > 0){
this.currentHistoricIndex -= 1;
this.launch();
}
},
playNext(){
if(this.next_node){
this.openDocument(this.next_node);
if(this.currentHistoricIndex < this.historic.length-1){
this.currentHistoricIndex += 1;
this.launch();
}else{
this.emmit('audio-play-next');
}
},
togglePlayPause(e){
@@ -190,6 +198,11 @@
this.audio.pause();
}
},
stop(){
this.audio.pause();
this.timeOutToHide();
},
// audio events
onPlaying(){
this.$container.addClass('is-playing');
},
@@ -211,10 +224,6 @@
this.emmit('audio-ended');
this.stop();
},
stop(){
this.$container.removeClass('is-playing');
this.timeOutToHide();
},
// cartel functions
loadNode(nid){
this.$cartel.addClass('loading');
@@ -236,15 +245,15 @@
show(){
this.$container.addClass('visible');
},
showHidePreviousBtn(s){
if(this.historic.length > 1){
showHidePreviousBtn(){
if(this.historic.length > 1 && this.currentHistoricIndex > 0){
this.$previous.addClass('is-active');
}else{
this.$previous.removeClass('is-active');
}
},
showHideNextBtn(){
if(this.next_node){
if(this.currentHistoricIndex < this.historic.length-1 || this.shuffle_is_active){
this.$next.addClass('is-active');
}else{
this.$next.removeClass('is-active');
@@ -270,6 +279,7 @@
console.warn('AudioPlayer : event '+event_name+' does not exists');
}
this.event_handlers[event_name].push(handler);
return this;
},
emmit(event_name){
var handler;
@@ -473,7 +483,7 @@
function RandomPlayer(playlist){
this.active = false;
this.playlist = playlist;
this.$btn = $('<a>').html('&#x1f500;').addClass('random-player-btn');
this.$btn = $('<a>').html('Shuffle').addClass('random-player-btn');
this.init()
};
RandomPlayer.prototype = {
@@ -482,13 +492,15 @@
$('<div>')
.addClass('block random-player')
.append(this.$btn)
.insertAfter('#block-userlogin');
.insertAfter('#block-userlogin, #block-studiolinkblock');
// events
this.$btn.on('click', this.toggleActive.bind(this));
// attach an event on AudioPlayer
_audio_player.on('audio-ended', this.onAudioPlayerEnded.bind(this));
_audio_player
.on('audio-ended', this.onAudioPlayerEnded.bind(this))
.on('audio-play-next', this.onAudioPlayNext.bind(this));
},
shuffle(){
var tempPLaylist = [];
@@ -504,30 +516,34 @@
},
toggleActive(e){
if (this.active) {
this.$btn.removeClass('is-active');
this.stop();
}else{
this.$btn.addClass('is-active');
this.shuffle();
this.play();
this.start();
}
},
play(){
this.active = true;
start(){
this.active = _audio_player.shuffle_is_active = true;
this.next();
},
stop(){
this.active = false;
this.active = _audio_player.shuffle_is_active = false;
// stop audio player
_audio_player.stop();
},
next(){
if(this.shuffledPlaylist.length > 0)
if(this.active && this.shuffledPlaylist.length > 0)
_audio_player.openDocument(this.shuffledPlaylist.splice(0,1)[0]);
},
onAudioPlayNext(){
console.log('RandomPlayer : onAudioPlayNext()');
this.next();
},
onAudioPlayerEnded(){
console.log('RandomPlayer : onAudioPlayerEnded()');
if(this.active){
this.next();
}
this.next();
}
};