/**
* @file audio-track-menu-item.js
*/
import MenuItem from '../../menu/menu-item.js' ;
import Component from '../../component.js' ;
import * as Dom from '../../utils/dom.js' ;
/**
* Un {@link AudioTrack} {@link MenuItem}
*
* @extends MenuItem
*/
class AudioTrackMenuItem extends MenuItem {
/**
* 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.
*/
constructor(player, options) {
const track = options.track ;
const tracks = player.audioTracks() ;
// Modifier les options pour l'init de la classe MenuItem parente.
options.label = track.label || track.language || 'Unknown' ;
options.selected = track.enabled ;
super(player, options) ;
this.track = track ;
this.addClass(`vjs-${track.kind}-menu-item`) ;
const changeHandler = (...args) => {
this.handleTracksChange.apply(this, args) ;
};
tracks.addEventListener('change', changeHandler) ;
this.on('dispose', () => {
tracks.removeEventListener('change', changeHandler) ;
}) ;
}
createEl(type, props, attrs) {
const el = super.createEl(type, props, attrs) ;
const parentSpan = el.querySelector('.vjs-menu-item-text') ;
if (this.options_.track.kind === 'main-desc') {
parentSpan.appendChild(Dom.createEl('span', {
className : 'vjs-icon-placeholder'
}, {
aria-hidden" : vrai
})) ;
parentSpan.appendChild(Dom.createEl('span', {
className : 'vjs-control-text',
textContent : ' ' + this.localize('Descriptions')
})) ;
}
return el ;
}
/**
* Cette fonction est appelée lorsqu'un élément de menu `AudioTrackMenuItem est "cliqué". Voir {@link ClickableComponent}
* pour obtenir des informations plus détaillées sur ce que peut être un clic.
*
* @param {EventTarget~Event} [event]
* L'événement `keydown`, `tap` ou `click` qui a provoqué l'activation de cette fonction est le suivant
* appelé.
*
* @listens tap
* @listens click
*/
handleClick(event) {
super.handleClick(event) ;
// la liste des pistes audio fera automatiquement basculer les autres pistes
// pour nous.
this.track.enabled = true ;
// lorsque des pistes audio natives sont utilisées, nous voulons nous assurer que les autres pistes sont désactivées
if (this.player_.tech_.featuresNativeAudioTracks) {
const tracks = this.player_.audioTracks() ;
for (let i = 0 ; i < tracks.length ; i++) {
const track = tracks[i] ;
// sauter la piste en cours puisque nous l'avons activée ci-dessus
if (track === this.track) {
continuer ;
}
track.enabled = track === this.track ;
}
}
}
/**
* Gère tout changement de {@link AudioTrack}.
*
* @param {EventTarget~Event} [event]
* L'événement {@link AudioTrackList#change} à l'origine de l'exécution.
*
* @listens AudioTrackList#change
*/
handleTracksChange(event) {
this.selected(this.track.enabled) ;
}
}
Component.registerComponent('AudioTrackMenuItem', AudioTrackMenuItem) ;
exporter l'élément de menu AudioTrack par défaut ;