studio-ui composer is ready to test actively

This commit is contained in:
Bachir Soussi Chiadmi
2018-03-27 15:28:53 +02:00
parent 4cfdf1a491
commit 58ffc1ff88
12 changed files with 1198 additions and 606 deletions
@@ -6,8 +6,9 @@
var _$corpus_canvas;
var _$row = $('main[role="main"]>.layout-content>.row');
var _$ajaxLinks;
var _audio_player;
var _audioPlayer;
var _randomPlayer;
var _compoPlayer;
// ___ _ _
// |_ _|_ _ (_) |_
@@ -20,7 +21,8 @@
_$body.on('corpus-map-ready', onCorpusMapReady);
_audio_player = new AudioPlayer();
_audioPlayer = new AudioPlayer();
_compoPlayer = new CompoPlayer();
initAjaxLinks();
@@ -42,271 +44,18 @@
// |___|\_/\___|_||_\__/__/
function initEvents(){
$('body')
.on('on-studio-chutier-updated', function(e){
.on('on-studio-chutier-updated', initAjaxLinks)
.on('on-studio-compo-updated', function(e){
initAjaxLinks();
_compoPlayer.refresh();
})
.on('search-results-loaded',function(e){
.on('on-studio-compo-opened', function(e){
initAjaxLinks();
_compoPlayer.newCompo();
})
.on('open_entree', function(e){
// e.tid available
closeAllModals();
})
.on('close_entree', function(e){
// e.tid available
backToFrontPage();
});
}
// _ _ _
// /_\ _ _ __| (_)___
// / _ \ || / _` | / _ \
// /_/ \_\_,_\__,_|_\___/
//
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement
// https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/samples/gg589528%28v%3dvs.85%29
// https://www.binarytides.com/using-html5-audio-element-javascript/
function AudioPlayer(){
var that = this;
this.fid;
this.audio = new Audio();
// audio events
this.audio_events = ["loadedmetadata","canplay","playing","pause","timeupdate","ended"];
// UI dom objects
this.$container = $('<div id="audio-player">');
// btns
this.$btns = $('<div>').addClass('btns').appendTo(this.$container);
this.$previous = $('<div>').addClass('previous').appendTo(this.$btns);
this.$playpause = $('<div>').addClass('play-pause').appendTo(this.$btns);
this.$next = $('<div>').addClass('next').appendTo(this.$btns);
// timeline
this.$timelinecont= $('<div>').addClass('time-line-container').appendTo(this.$container);
this.$timeline = $('<div>').addClass('time-line').appendTo(this.$timelinecont);
this.$loader = $('<div>').addClass('loader').appendTo(this.$timeline);
this.$cursor = $('<div>').addClass('cursor').appendTo(this.$timeline);
// time
this.$time = $('<div>').addClass('time').appendTo(this.$container);
this.$currentTime = $('<div>').addClass('current-time').html('00:00').appendTo(this.$time);
this.$duration = $('<div>').addClass('duration').html('00:00').appendTo(this.$time);
// favoris
this.$fav = $('<div>').addClass('favoris').appendTo(this.$container);
// cartel
this.$cartel = $('<div>').addClass('cartel').appendTo(this.$container);
// hiding
this.hideTimer = false;
this.hideTimeMS = 10000;
// history
this.currentHistoricIndex = null;
this.historic = [];
this.shuffle_is_active = false;
// object events
this.event_handlers = {
'audio-play-next':[],
'audio-ended':[],
'stop-shuffle':[]
};
this.init();
};
AudioPlayer.prototype = {
init(){
// append ui to document
this.$container.appendTo('header[role="banner"] .region-header');
// record timeline width
this.timeline_w = parseInt(this.$timeline.width());
// init audio events
var fn = '';
for (var i = 0; i < this.audio_events.length; i++) {
fn = this.audio_events[i];
// capitalize first letter of event (only cosmetic :p )
fn = 'on'+fn.charAt(0).toUpperCase()+fn.slice(1);
this.audio.addEventListener(
this.audio_events[i],
this[fn].bind(this),
true);
}
// init btns events
this.$previous.on('click', this.playPrevious.bind(this));
this.$playpause.on('click', this.togglePlayPause.bind(this));
this.$next.on('click', this.playNext.bind(this));
// TODO: previous and next btns
},
openDocument(node){
console.log('AudioPlayer openDocument', node);
this.historic.push(node);
this.currentHistoricIndex = this.historic.length-1;
// this.shuffle_mode = shuffle_mode || false;
this.launch();
},
launch(){
this.clearTimeOutToHide();
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)
try {
_$corpus_canvas.trigger({
'type':'audio-node-opened',
'nid':this.historic[this.currentHistoricIndex].nid
});
} catch (e) {
console.warn('AudioPlayer : _$corpus_canvas does not exists');
}
this.showHidePreviousBtn();
this.showHideNextBtn();
this.show();
},
// audio functions
setSRC(url){
// console.log('AudioPlayer setSRC : url', url);
this.audio.src = url;
},
onLoadedmetadata(){
var rem = parseInt(this.audio.duration, 10),
mins = Math.floor(rem/60,10),
secs = rem - mins*60;
this.$duration.html('<span>'+(mins<10 ? '0':'')+mins+':'+(secs<10 ? '0':'')+secs+'</span>');
this.updateLoadingBar();
},
updateLoadingBar(){
this.$loader.css({
'width':parseInt((100 * this.audio.buffered.end(0) / this.audio.duration), 10)+'%'
});
if( this.audio.buffered.end(0) < this.audio.duration ){
// loop through this function until file is fully loaded
var that = this;
window.requestAnimationFrame(that.updateLoadingBar.bind(that));
}else{
console.log('Audio fully loaded');
}
},
onCanplay(){
this.play();
},
play(){
this.audio.play();
},
playPrevious(){
if(this.currentHistoricIndex > 0){
this.currentHistoricIndex -= 1;
this.launch();
}
},
playNext(){
if(this.currentHistoricIndex < this.historic.length-1){
this.currentHistoricIndex += 1;
this.launch();
}else{
this.emmit('audio-play-next');
}
},
togglePlayPause(e){
if(this.audio.paused){
this.audio.play();
}else{
this.audio.pause();
}
},
stop(){
console.log('AudioPlayer stop()');
this.audio.pause();
this.timeOutToHide();
},
// audio events
onPlaying(){
this.$container.addClass('is-playing');
},
onPause(){
this.$container.removeClass('is-playing');
},
onTimeupdate(){
// move cursor
this.$cursor.css({
'left':(this.audio.currentTime/this.audio.duration * this.timeline_w)+"px"
});
// update time text display
var rem = parseInt(this.audio.currentTime, 10),
mins = Math.floor(rem/60,10),
secs = rem - mins*60;
this.$currentTime.html('<span>'+(mins<10 ? '0':'')+mins+':'+(secs<10 ? '0':'')+secs+'</span>');
},
onEnded(){
this.emmit('audio-ended');
this.stop();
},
// cartel functions
loadNode(nid){
this.$cartel.addClass('loading');
$.getJSON('/edlp/ajax/json/node/'+nid+'/player_cartel', {})
.done(this.onNodeLoaded.bind(this))
.fail(this.onNodeLoadFail.bind(this));
},
onNodeLoaded(data){
console.log('AudioPlayer node loaded');
this.$cartel.html(data.rendered).removeClass('loading');
_$body.trigger({'type':'new-audio-cartel-loaded'});
initAjaxLinks();
},
onNodeLoadFail(jqxhr, textStatus, error){
console.warn('AudioPlayer node load failed', jqxhr.responseText);
this.$cartel.removeClass('loading').html('');
},
// global
show(){
this.$container.addClass('visible');
},
showHidePreviousBtn(){
if(this.historic.length > 1 && this.currentHistoricIndex > 0){
this.$previous.addClass('is-active');
}else{
this.$previous.removeClass('is-active');
}
},
showHideNextBtn(){
if(this.currentHistoricIndex < this.historic.length-1 || this.shuffle_is_active){
this.$next.addClass('is-active');
}else{
this.$next.removeClass('is-active');
}
},
timeOutToHide(){
console.log('AudioPlayer timeOutToHide()');
this.clearTimeOutToHide();
this.hideTimer = setTimeout(this.hide.bind(this), this.hideTimeMS);
},
clearTimeOutToHide(){
console.log('AudioPlayer clearTimeOutToHide()',this.hideTimer);
if(this.hideTimer){
clearTimeout(this.hideTimer);
this.hideTimer = false;
}
},
hide(){
console.log('AudioPlayer hide()');
this.$container.removeClass('visible');
// trigger highlighted node remove on corpus map
_$corpus_canvas.trigger('audio-node-closed');
},
// object events
on(event_name, handler){
if(typeof this.event_handlers[event_name] == 'undefined'){
console.warn('AudioPlayer : event '+event_name+' does not exists');
}
this.event_handlers[event_name].push(handler);
return this;
},
emmit(event_name){
var handler;
for (var i = this.event_handlers[event_name].length; i >= 0 ; i--) {
handler = this.event_handlers[event_name][i];
setTimeout(handler, 0);
}
return this;
},
.on('search-results-loaded', initAjaxLinks)
.on('open_entree', closeAllModals)
.on('close_entree', backToFrontPage);
}
// ___ _ _ ___
@@ -365,7 +114,7 @@
// Audio links
if($link.is('.audio-link')){
// TODO: stop randomplayer
_audio_player
_audioPlayer
.emmit('stop-shuffle')
.openDocument({
nid:$link.attr('nid'),
@@ -521,7 +270,7 @@
})
.on('corpus-cliked-on-node', function(e) {
console.log('theme : corpus-cliked-on-node', e);
_audio_player
_audioPlayer
.emmit('stop-shuffle')
.openDocument(e.target_node);
});
@@ -531,6 +280,284 @@
_$body.attr('corpus-map', 'ready');
}
// _ _ _
// /_\ _ _ __| (_)___
// / _ \ || / _` | / _ \
// /_/ \_\_,_\__,_|_\___/
//
// https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement
// https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/samples/gg589528%28v%3dvs.85%29
// https://www.binarytides.com/using-html5-audio-element-javascript/
function AudioPlayer(){
var that = this;
this.fid;
this.audio = new Audio();
// audio events
this.audio_events = ["loadedmetadata","canplay","playing","pause","timeupdate","ended"];
// UI dom objects
this.$container = $('<div id="audio-player">');
// btns
this.$btns = $('<div>').addClass('btns').appendTo(this.$container);
this.$previous = $('<div>').addClass('previous').appendTo(this.$btns);
this.$playpause = $('<div>').addClass('play-pause').appendTo(this.$btns);
this.$next = $('<div>').addClass('next').appendTo(this.$btns);
// timeline
this.$timelinecont= $('<div>').addClass('time-line-container').appendTo(this.$container);
this.$timeline = $('<div>').addClass('time-line').appendTo(this.$timelinecont);
this.$loader = $('<div>').addClass('loader').appendTo(this.$timeline);
this.$cursor = $('<div>').addClass('cursor').appendTo(this.$timeline);
// time
this.$time = $('<div>').addClass('time').appendTo(this.$container);
this.$currentTime = $('<div>').addClass('current-time').html('00:00').appendTo(this.$time);
this.$duration = $('<div>').addClass('duration').html('00:00').appendTo(this.$time);
// favoris
this.$fav = $('<div>').addClass('favoris').appendTo(this.$container);
// cartel
this.$cartel = $('<div>').addClass('cartel').appendTo(this.$container);
// hiding
this.hideTimer = false;
this.hideTimeMS = 10000;
// history
this.currentHistoricIndex = null;
this.historic = [];
this.shuffle_is_active = false;
// object events
this.event_handlers = {
'audio-open-document':[],
'audio-play':[],
'audio-pause':[],
'audio-play-next':[],
'audio-ended':[],
'stop-shuffle':[]
};
this.init();
};
AudioPlayer.prototype = {
init(){
// append ui to document
this.$container.appendTo('header[role="banner"] .region-header');
// record timeline width
this.timeline_w = parseInt(this.$timeline.width());
// init audio events
var fn = '';
for (var i = 0; i < this.audio_events.length; i++) {
fn = this.audio_events[i];
// capitalize first letter of event (only cosmetic :p )
fn = 'on'+fn.charAt(0).toUpperCase()+fn.slice(1);
this.audio.addEventListener(
this.audio_events[i],
this[fn].bind(this),
true);
}
// init btns events
this.$previous.on('click', this.playPrevious.bind(this));
this.$playpause.on('click', this.togglePlayPause.bind(this));
this.$next.on('click', this.playNext.bind(this));
// TODO: previous and next btns
},
openDocument(node, caller){
// console.log('AudioPlayer openDocument', node);
if(typeof node == 'undefined'
|| typeof node.nid == 'undefined'
|| typeof node.audio_url == 'undfined'){
console.warn('AudioPlayer openDocument() node is malformed', node);
return false;
}
this.historic.push(node);
this.currentHistoricIndex = this.historic.length-1;
// this.shuffle_mode = shuffle_mode || false;
this.emmit('audio-open-document', {caller:caller});
this.launch();
},
launch(){
this.clearTimeOutToHide();
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)
try {
_$corpus_canvas.trigger({
'type':'audio-node-opened',
'nid':this.historic[this.currentHistoricIndex].nid
});
} catch (e) {
console.info('AudioPlayer : _$corpus_canvas does not exists');
}
this.showHidePreviousBtn();
this.showHideNextBtn();
this.show();
},
// audio functions
setSRC(url){
// console.log('AudioPlayer setSRC : url', url);
this.audio.src = url;
},
onLoadedmetadata(){
var rem = parseInt(this.audio.duration, 10),
mins = Math.floor(rem/60,10),
secs = rem - mins*60;
this.$duration.html('<span>'+(mins<10 ? '0':'')+mins+':'+(secs<10 ? '0':'')+secs+'</span>');
this.updateLoadingBar();
},
updateLoadingBar(){
this.$loader.css({
'width':parseInt((100 * this.audio.buffered.end(0) / this.audio.duration), 10)+'%'
});
if( this.audio.buffered.end(0) < this.audio.duration ){
// loop through this function until file is fully loaded
var that = this;
window.requestAnimationFrame(that.updateLoadingBar.bind(that));
}else{
console.log('Audio fully loaded');
}
},
onCanplay(){
this.play();
},
play(){
this.clearTimeOutToHide();
this.audio.play();
},
playPrevious(){
if(this.currentHistoricIndex > 0){
this.currentHistoricIndex -= 1;
this.launch();
}
},
playNext(){
if(this.currentHistoricIndex < this.historic.length-1){
this.currentHistoricIndex += 1;
this.launch();
}else{
this.emmit('audio-play-next');
}
},
togglePlayPause(e){
if(this.audio.paused){
this.audio.play();
}else{
this.audio.pause();
}
},
stop(){
// console.log('AudioPlayer stop()');
this.audio.pause();
this.timeOutToHide();
},
// audio events
onPlaying(){
this.$btns.addClass('is-playing');
this.emmit('audio-play');
},
onPause(){
this.$btns.removeClass('is-playing');
this.emmit('audio-pause');
},
onTimeupdate(){
// move cursor
this.$cursor.css({
'left':(this.audio.currentTime/this.audio.duration * this.timeline_w)+"px"
});
// update time text display
var rem = parseInt(this.audio.currentTime, 10),
mins = Math.floor(rem/60,10),
secs = rem - mins*60;
this.$currentTime.html('<span>'+(mins<10 ? '0':'')+mins+':'+(secs<10 ? '0':'')+secs+'</span>');
},
onEnded(){
this.emmit('audio-ended');
this.stop();
},
// cartel functions
loadNode(nid){
this.$cartel.addClass('loading');
$.getJSON('/edlp/ajax/json/node/'+nid+'/player_cartel', {})
.done(this.onNodeLoaded.bind(this))
.fail(this.onNodeLoadFail.bind(this));
},
onNodeLoaded(data){
// console.log('AudioPlayer node loaded');
this.$cartel.html(data.rendered).removeClass('loading');
_$body.trigger({'type':'new-audio-cartel-loaded'});
initAjaxLinks();
},
onNodeLoadFail(jqxhr, textStatus, error){
console.warn('AudioPlayer node load failed', jqxhr.responseText);
this.$cartel.removeClass('loading').html('');
},
// global
show(){
this.$container.addClass('visible');
},
showHidePreviousBtn(){
if(this.historic.length > 1 && this.currentHistoricIndex > 0){
this.$previous.addClass('is-active');
}else{
this.$previous.removeClass('is-active');
}
},
showHideNextBtn(){
if(this.currentHistoricIndex < this.historic.length-1 || this.shuffle_is_active){
this.$next.addClass('is-active');
}else{
this.$next.removeClass('is-active');
}
},
timeOutToHide(){
// console.log('AudioPlayer timeOutToHide()');
this.clearTimeOutToHide();
this.hideTimer = setTimeout(this.hide.bind(this), this.hideTimeMS);
},
clearTimeOutToHide(){
// console.log('AudioPlayer clearTimeOutToHide()',this.hideTimer);
if(this.hideTimer){
clearTimeout(this.hideTimer);
this.hideTimer = false;
}
},
hide(){
// console.log('AudioPlayer hide()');
this.$container.removeClass('visible');
// trigger highlighted node remove on corpus map
try {
_$corpus_canvas.trigger('audio-node-closed');
} catch (e) {
console.info('AudioPlayer hide() : _$corpus_canvas does not exists');
}
},
// object events
on(event_name, handler){
if(typeof this.event_handlers[event_name] == 'undefined'){
console.warn('AudioPlayer : event '+event_name+' does not exists');
}
this.event_handlers[event_name].push(handler);
return this;
},
emmit(event_name, args){
// console.log('AudioPlayer emmit() event_name', event_name);
// console.log('AudioPlayer emmit() handlers', this.event_handlers[event_name]);
var handler;
var args = args || {};
for (var i = this.event_handlers[event_name].length-1; i >= 0 ; i--) {
handler = this.event_handlers[event_name][i];
// console.log('AudioPlayer emmit() loop handler', handler);
setTimeout(function(){
// console.log('AudioPlayer emmit() timeout handler', handler);
handler(args);
}, 0);
}
return this;
},
}
// ___ _ ___ _
// | _ \__ _ _ _ __| |___ _ __ | _ \ |__ _ _ _ ___ _ _
// | / _` | ' \/ _` / _ \ ' \| _/ / _` | || / -_) '_|
@@ -540,7 +567,7 @@
this.active = false;
this.playlist = playlist;
this.$btn = $('<a>').html('Shuffle').addClass('random-player-btn');
this.init()
this.init();
};
RandomPlayer.prototype = {
init(){
@@ -554,7 +581,7 @@
this.$btn.on('click', this.toggleActive.bind(this));
// attach an event on AudioPlayer
_audio_player
_audioPlayer
.on('audio-ended', this.onAudioPlayerEnded.bind(this))
.on('audio-play-next', this.onAudioPlayNext.bind(this))
.on('stop-shuffle', this.stop.bind(this));
@@ -579,20 +606,20 @@
}
},
start(){
this.active = _audio_player.shuffle_is_active = true;
this.active = _audioPlayer.shuffle_is_active = true;
this.$btn.addClass('is-active');
this.shuffle();
this.next();
},
stop(){
this.active = _audio_player.shuffle_is_active = false;
this.active = _audioPlayer.shuffle_is_active = false;
this.$btn.removeClass('is-active');
// stop audio player
// _audio_player.stop();
// _audioPlayer.stop();
},
next(){
if(this.active && this.shuffledPlaylist.length > 0)
_audio_player.openDocument(this.shuffledPlaylist.splice(0,1)[0]);
_audioPlayer.openDocument(this.shuffledPlaylist.splice(0,1)[0]);
},
onAudioPlayNext(){
console.log('RandomPlayer : onAudioPlayNext()');
@@ -604,6 +631,215 @@
}
};
// ___ ___ _
// / __|___ _ __ _ __ ___| _ \ |__ _ _ _ ___ _ _
// | (__/ _ \ ' \| '_ \/ _ \ _/ / _` | || / -_) '_|
// \___\___/_|_|_| .__/\___/_| |_\__,_|\_, \___|_|
// |_| |__/
function CompoPlayer(){
this.playing = false;
this.paused = false;
this.playlist = [];
this.current_index = 0;
this.$compo = null;
this.init();
};
CompoPlayer.prototype = {
init(){
console.log('CompoPlayer init()');
// attach an event on AudioPlayer
_audioPlayer
.on('audio-open-document', this.onAudioOpenDocument.bind(this))
.on('audio-play', this.onAudioPlayerPlay.bind(this))
.on('audio-pause', this.onAudioPlayerPause.bind(this))
.on('audio-ended', this.onAudioPlayerEnded.bind(this));
// .on('audio-play-next', this.onAudioPlayNext.bind(this));
this.newCompo();
},
newCompo(){
console.log('CompoPlayer newCompo()');
// $('.composition_ui .composer .composition .field--name-documents')
this.$composer = $('.composition_ui .composer');
this.$compo = $('.composition_ui .composer .composition');
this.$controls = $('.composition_ui .composer .compo-player-controls');
this.$previous = $('<div>').addClass('previous')
.on('click', this.prev.bind(this))
.appendTo(this.$controls);
this.$playpause = $('<div>').addClass('play-pause')
.on('click', this.togglePlayPause.bind(this))
.appendTo(this.$controls);
this.$next = $('<div>').addClass('next')
.on('click', this.next.bind(this))
.appendTo(this.$controls);
// this.$playpause = $('.compo-player-controls', this.$composer)
// .on('click', this.togglePlayPause.bind(this));
this.refresh();
},
refresh(){
// console.log('CompoPlayer refresh(), this', this);
// this.playing = false;
// this.paused = false;
// this.resetIndex();
this.stop();
// load new playlist
this.playlist = [];
var that = this;
$('.field--name-documents .field__item',this.$compo).each(function(i,el){
var $link = $('a.audio-link',this);
that.playlist.push({
item:$(this),
audio_url:$link.attr("audio_url"),
nid:$link.attr("nid"),
});
});
this.showHideControls();
},
togglePlayPause(){
// console.log('CompoPlayer togglePlayPause');
if (this.playing && !this.paused) {
this.pause();
}else{
if(this.playing && this.paused){
this.play();
}else{
this.start();
}
}
},
start(){
console.log('start');
// console.log('CompoPlayer start()');
this.playing = true;
this.play();
},
play(){
// console.log('play');
if(this.paused){
this.paused = false;
_audioPlayer.play();
}else{
_audioPlayer.openDocument(this.playlist[this.current_index], this);
}
this.setActiveItem().showHideControls();
},
pause(){
console.log('pause');
this.paused = true;
this.showHideControls();
_audioPlayer.stop();
},
next(){
// console.log('CompoPlayer next()');
if(this.playing){
this.current_index += 1;
if(this.current_index < this.playlist.length){
this.play();
}else{
this.stop();
}
}
},
prev(){
// console.log('CompoPlayer prev()');
if(this.playing){
this.current_index -= 1;
if(this.current_index >= 0){
this.play();
}else{
this.stop();
}
}
},
stop(){
_audioPlayer.stop();
this.reset();
},
reset(){
this.playing = false;
this.paused = false;
this.resetIndex();
},
resetIndex(){
this.current_index = 0;
this.showHideControls().resetActiveItems();
},
setActiveItem(){
this.resetActiveItems();
if(this.playing && this.current_index >= 0){
this.playlist[this.current_index].item.addClass('is-active');
}
// this call shoud not be here
this.showHideControls();
return this;
},
resetActiveItems(){
for (var n = 0; n < this.playlist.length; n++) {
// console.log('node',node);
this.playlist[n].item.removeClass('is-active');
}
return this;
},
showHideControls(){
// console.log('CompoPlayer showHideNextBtn(), playing:'+this.playing+', paused:'+this.paused);
// global playing
if(this.playing && !this.paused){
this.$controls.addClass('is-playing');
}else{
this.$controls.removeClass('is-playing');
}
// playpause
if(this.playlist.length > 0){
this.$playpause.addClass('is-active');
}else{
this.$playpause.removeClass('is-active');
}
// next
if(this.playing && this.playlist.length > 1 && this.current_index < this.playlist.length -1){
this.$next.addClass('is-active');
}else{
this.$next.removeClass('is-active');
}
// previous
if(this.playing && this.playlist.length > 1 && this.current_index > 0){
this.$previous.addClass('is-active');
}else{
this.$previous.removeClass('is-active');
}
return this;
},
// _audioPlayer events
onAudioOpenDocument(args){
if(args.caller !== this){
// console.log('CompoPlayer onAudioOpenDocument() called by other');
this.reset();
}
// else{
// // console.log('CompoPlayer onAudioOpenDocument() self calling');
// }
},
onAudioPlayerPlay(){
if(this.playing && this.paused){
this.paused = false;
this.showHideControls();
}
},
onAudioPlayerPause(){
if(this.playing && !this.paused){
this.paused = true;
this.showHideControls();
}
},
onAudioPlayerEnded(){
this.next();
},
// onAudioPlayNext(){
// this.next();
// }
};
// ___ _ _ _
// | _ \_ _ ___ __| |_ _ __| |_(_)___ _ _ ___
// | _/ '_/ _ \/ _` | || / _| _| / _ \ ' \(_-<