/**
* @file video-track-list.js
*/
import TrackList from './track-list' ;
/**
* Désélectionner toutes les autres {@link VideoTrack} sélectionnées.
*
* @param {VideoTrackList} list
* liste sur laquelle travailler
*
* @param {VideoTrack} 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 vidéo est activée, la désactiver
list[i].selected = false ;
}
};
/**
* La liste actuelle des {@link VideoTrack} d'une vidéo.
*
* @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}
* @extends TrackList
*/
class VideoTrackList extends TrackList {
/**
* Créer une instance de cette classe.
*
* @param {VideoTrack[]} [tracks=[]]
* Une liste de `VideoTrack` 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].selected) {
disableOthers(tracks, tracks[i]) ;
pause ;
}
}
super(pistes) ;
this.changing_ = false ;
/**
* @member {number} VideoTrackList#selectedIndex
* L'index actuel de la {@link VideoTrack`} sélectionnée.
*/
Object.defineProperty(this, 'selectedIndex', {
get() {
for (let i = 0 ; i < this.length ; i++) {
if (this[i].selected) {
retour i ;
}
}
retourner -1 ;
},
set() {}
}) ;
}
/**
* Ajoute un {@link VideoTrack} à la `VideoTrackList`.
*
* @param {VideoTrack} track
* La piste vidéo à ajouter à la liste
*
* @fires TrackList#addtrack
*/
addTrack(track) {
if (track.selected) {
disableOthers(this, track) ;
}
super.addTrack(track) ;
// les pistes natives n'ont pas cette fonction
if (!track.addEventListener) {
retour ;
}
track.selectedChange_ = () => {
if (this.changing_) {
retour ;
}
this.changing_ = true ;
disableOthers(this, track) ;
this.changing_ = false ;
this.trigger('change') ;
};
/**
* @listens VideoTrack#selectedchange
* @fires TrackList#change
*/
track.addEventListener('selectedchange', track.selectedChange_) ;
}
removeTrack(rtrack) {
super.removeTrack(rtrack) ;
if (rtrack.removeEventListener && rtrack.selectedChange_) {
rtrack.removeEventListener('selectedchange', rtrack.selectedChange_) ;
rtrack.selectedChange_ = null ;
}
}
}
exporter la VideoTrackList par défaut ;