/**
* @file audio-track-list.js
*/
import TrackList from './track-list' ;
/**
* Partout où nous appelons cette fonction, nous nous écartons de la spécification
* car nous ne prenons en charge qu'une seule piste audio activée à la fois
*
* @param {AudioTrackList} list
* liste sur laquelle travailler
*
* @param {AudioTrack} track
* La piste à sauter
*
* @private
*/
const disableOthers = function(list, track) {
for (let i = 0 ; i < list.length ; i++) {
if (!Object.keys(list[i]).length || track.id === list[i].id) {
continuer ;
}
// une autre piste audio est activée, la désactiver
list[i].enabled = false ;
}
};
/**
* La liste actuelle des {@link AudioTrack} d'un fichier multimédia.
*
* @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist}
* @extends TrackList
*/
class AudioTrackList extends TrackList {
/**
* Créer une instance de cette classe.
*
* @param {AudioTrack[]} [tracks=[]]
* Une liste de `AudioTrack` pour instancier la liste.
*/
constructor(tracks = []) {
// s'assurer qu'une seule piste est activée
// trié du dernier index au premier index
for (let i = tracks.length - 1 ; i >= 0 ; i--) {
if (tracks[i].enabled) {
disableOthers(tracks, tracks[i]) ;
pause ;
}
}
super(pistes) ;
this.changing_ = false ;
}
/**
* Ajoute un {@link AudioTrack} à la `AudioTrackList`.
*
* @param {AudioTrack} track
* La piste audio à ajouter à la liste
*
* @fires TrackList#addtrack
*/
addTrack(track) {
if (track.enabled) {
disableOthers(this, track) ;
}
super.addTrack(track) ;
// les pistes natives n'ont pas cette fonction
if (!track.addEventListener) {
retour ;
}
track.enabledChange_ = () => {
// lorsque nous désactivons d'autres pistes (puisque nous ne prenons pas en charge les
// plus d'une piste à la fois), nous définirons changing_
// à true pour ne pas déclencher d'autres événements de changement
if (this.changing_) {
retour ;
}
this.changing_ = true ;
disableOthers(this, track) ;
this.changing_ = false ;
this.trigger('change') ;
};
/**
* @listens AudioTrack#enabledchange
* @fires TrackList#change
*/
track.addEventListener('enabledchange', track.enabledChange_) ;
}
removeTrack(rtrack) {
super.removeTrack(rtrack) ;
if (rtrack.removeEventListener && rtrack.enabledChange_) {
rtrack.removeEventListener('enabledchange', rtrack.enabledChange_) ;
rtrack.enabledChange_ = null ;
}
}
}
exporter la liste des pistes audio par défaut ;