/**
* @file descriptions-button.js
*/
import TextTrackButton de './text-track-button.js' ;
import Component from '../../component.js' ;
import * as Fn from '../../utils/fn.js' ;
/**
* Le composant bouton pour le basculement et la sélection des descriptions
*
* @extends TextTrackButton
*/
class DescriptionsButton extends TextTrackButton {
/**
* Crée une instance de cette classe.
*
* @param {Player} player
* Le `Player` auquel cette classe doit être attachée.
*
* @param {Objet} [options]
* La mémoire clé/valeur des options du lecteur.
*
* @param {Component~ReadyCallback} [ready]
* La fonction à appeler lorsque ce composant est prêt.
*/
constructor(player, options, ready) {
super(player, options, ready) ;
const tracks = player.textTracks() ;
const changeHandler = Fn.bind(this, this.handleTracksChange) ;
tracks.addEventListener('change', changeHandler) ;
this.on('dispose', function() {
tracks.removeEventListener('change', changeHandler) ;
}) ;
}
/**
* Gérer le changement de piste du texte
*
* @param {EventTarget~Event} event
* L'événement qui a provoqué l'exécution de cette fonction
*
* @listens TextTrackList#change
*/
handleTracksChange(event) {
const tracks = this.player().textTracks() ;
let disabled = false ;
// Vérifier si une piste d'un autre type est affichée
for (let i = 0, l = tracks.length ; i < l ; i++) {
const track = tracks[i] ;
if (track.kind !== this.kind_ && track.mode === 'showing') {
désactivé = vrai ;
pause ;
}
}
// Si une autre piste est affichée, ce bouton de menu est désactivé
if (disabled) {
this.disable() ;
} else {
this.enable() ;
}
}
/**
* Construit le DOM par défaut `className`.
*
* @return {string}
* Le `nom de classe` du DOM pour cet objet.
*/
buildCSSClass() {
return `vjs-descriptions-button ${super.buildCSSClass()}` ;
}
buildWrapperCSSClass() {
return `vjs-descriptions-button ${super.buildWrapperCSSClass()}` ;
}
}
/**
* le type de TextTrack à rechercher pour l'associer à ce menu.
*
* @type {string}
* @private
*/
DescriptionsButton.prototype.kind_ = 'descriptions' ;
/**
* Le texte qui doit s'afficher au-dessus des contrôles `DescriptionsButton`. Ajouté pour la localisation.
*
* @type {string}
* @private
*/
DescriptionsButton.prototype.controlText_ = 'Descriptions' ;
Component.registerComponent('DescriptionsButton', DescriptionsButton) ;
export default DescriptionsButton ;