/**
* @archivo track-list.js
* /
importar EventTarget desde '../event-target';
importar {isEvented} desde '../mixins/evented';
/**
* Funcionalidad común entre {@link TextTrackList}, {@link AudioTrackList} y
* {@link VideoTrackList}
*
* @extiende EventTarget
* /
clase TrackList extiende EventTarget {
/**
* Crear una instancia de esta clase
*
* @param {Pista[]} pistas
* Una lista de pistas para inicializar la lista.
*
* @abstracto
* /
constructor(pistas = []) {
súper();
this.tracks_ = [];
/**
* @memberof TrackList
* @miembro {número} longitud
* El número actual de 'Pistas' en este Trackist.
* @instancia
* /
Object.defineProperty(esto, 'longitud', {
conseguir() {
devuelve this.tracks_.length;
}
});
para (sea i = 0; i < pistas.longitud; i++) {
this.addTrack(pistas[i]);
}
}
/**
* Agrega una {@link Track} a la `TrackList`
*
* @param {Pista} pista
* La pista de audio, video o texto para agregar a la lista.
*
* @fires TrackList#addtrack
* /
addTrack(pista) {
const index = this.tracks_.length;
if (!('' + índice en esto)) {
Object.defineProperty(este, índice, {
conseguir() {
devuelve esto.pistas_[índice];
}
});
}
// No agregar pistas duplicadas
if (this.tracks_.indexOf(pista) === -1) {
this.tracks_.push(pista);
/**
* Se activa cuando se agrega una pista a una lista de pistas.
*
* @event TrackList#addtrack
* @type {Objetivo del evento~Evento}
* @propiedad {Pista} pista
* Una referencia a la pista que se agregó.
* /
este.disparador({
pista,
tipo: 'añadir pista',
objetivo: este
});
}
/**
* Se activa cuando se cambia la etiqueta de una pista.
*
* @event TrackList#addtrack
* @type {Objetivo del evento~Evento}
* @propiedad {Pista} pista
* Una referencia a la pista que se agregó.
* /
track.labelchange_ = () => {
este.disparador({
pista,
tipo: 'cambio de etiqueta',
objetivo: este
});
};
if (isEvented(pista)) {
track.addEventListener('cambio de etiqueta', track.cambio de etiqueta_);
}
}
/**
* Eliminar una {@link Track} de `TrackList`
*
* @param {Pista} rtrack
* La pista de audio, video o texto para eliminar de la lista.
*
* @fires TrackList#removetrack
* /
removeTrack(rtrack) {
dejar un rastro;
para (sea i = 0, l = esta.longitud; i < yo; i++) {
if (esta[i] === pista) {
pista = esto[i];
si (pista.off) {
Seguimiento de();
}
this.tracks_.splice(i, 1);
romper;
}
}
si (!pista) {
devolver;
}
/**
* Se activa cuando se elimina una pista de la lista de pistas.
*
* @event TrackList#removetrack
* @type {Objetivo del evento~Evento}
* @propiedad {Pista} pista
* Una referencia a la pista que se eliminó.
* /
este.disparador({
pista,
tipo: 'eliminar pista',
objetivo: este
});
}
/**
* Obtenga una pista de TrackList por una identificación de pistas
*
* @param {string} id - el id de la pista a obtener
* @método getTrackById
* @return {Pista}
* @privado
* /
obtenerTrackById(id) {
dejar resultado = nulo;
para (sea i = 0, l = esta.longitud; i < yo; i++) {
const track = esto[i];
if (pista.id === id) {
resultado = pista;
romper;
}
}
resultado devuelto;
}
}
/**
* Se activa cuando se selecciona/habilita una pista diferente.
*
* @event TrackList#cambio
* @type {Objetivo del evento~Evento}
* /
/**
* Eventos que se pueden llamar con on + eventName. Consulte {@link EventHandler}.
*
* @propiedad {Objeto} TrackList#eventospermitidos_
* @privado
* /
TrackList.prototype.allowedEvents_ = {
cambia cambia',
añadirpista: 'añadirpista',
removetrack: 'removetrack',
cambio de etiqueta: 'cambio de etiqueta'
};
// emular el soporte de EventHandler de atributo para permitir la detección de características
para (evento const en TrackList.prototype.allowedEvents_) {
TrackList.prototype['on' + evento] = null;
}
exportar TrackList por defecto;