/**
* @file html-track-element-list.js
*/
/**
* La liste actuelle des {@link HtmlTrackElement}s.
*/
class HtmlTrackElementList {
/**
* Créer une instance de cette classe.
*
* @param {HtmlTrackElement[]} [tracks=[]]
* Une liste de `HtmlTrackElement` pour instancier la liste.
*/
constructor(trackElements = []) {
this.trackElements_ = [] ;
/**
* @memberof HtmlTrackElementList
* @member {number} length
* Le nombre actuel de `Track`s dans ce Trackist.
* @instance
*/
Object.defineProperty(this, 'length', {
get() {
return this.trackElements_.length ;
}
}) ;
for (let i = 0, length = trackElements.length ; i < length ; i++) {
this.addTrackElement_(trackElements[i]) ;
}
}
/**
* Ajouter un {@link HtmlTrackElement} à la `HtmlTrackElementList`
*
* @param {HtmlTrackElement} trackElement
* L'élément de piste à ajouter à la liste.
*
* @private
*/
addTrackElement_(trackElement) {
const index = this.trackElements_.length ;
if ( !(' + index in this)) {
Object.defineProperty(this, index, {
get() {
return this.trackElements_[index] ;
}
}) ;
}
// Ne pas ajouter d'éléments en double
if (this.trackElements_.indexOf(trackElement) === -1) {
this.trackElements_.push(trackElement) ;
}
}
/**
* Obtenir un {@link HtmlTrackElement} de la `HtmlTrackElementList` à partir d'un élément
* {@link TextTrack}.
*
* @param {TextTrack} track
* La piste associée à un élément de piste.
*
* @return {HtmlTrackElement|undefined}
* L'élément de piste trouvé ou non défini.
*
* @private
*/
getTrackElementByTrack_(track) {
let trackElement_ ;
for (let i = 0, length = this.trackElements_.length ; i < length ; i++) {
if (track === this.trackElements_[i].track) {
trackElement_ = this.trackElements_[i] ;
pause ;
}
}
return trackElement_ ;
}
/**
* Supprimer un {@link HtmlTrackElement} de la `HtmlTrackElementList`
*
* @param {HtmlTrackElement} trackElement
* L'élément de piste à retirer de la liste.
*
* @private
*/
removeTrackElement_(trackElement) {
for (let i = 0, length = this.trackElements_.length ; i < length ; i++) {
if (trackElement === this.trackElements_[i]) {
if (this.trackElements_[i].track && typeof this.trackElements_[i].track.off === 'function') {
this.trackElements_[i].track.off() ;
}
if (typeof this.trackElements_[i].off === 'function') {
this.trackElements_[i].off() ;
}
this.trackElements_.splice(i, 1) ;
pause ;
}
}
}
}
export default HtmlTrackElementList ;