/**
 * @file off-text-track-menu-item.js
 * /
importar TextTrackMenuItem desde './text-track-menu-item.js';
importar componente desde '../../component.js';

/**
 * Un elemento de menú especial para girar un tipo específico de pista de texto
 *
 * @extiende TextTrackMenuItem
 * /
clase OffTextTrackMenuItem extiende TextTrackMenuItem {

  /**
   * Crea una instancia de esta clase.
   *
   * @param {Jugador} jugador
   * El `Jugador` al que se debe adjuntar esta clase.
   *
   * @param {Objeto} [opciones]
   * El almacén de clave/valor de las opciones del jugador.
   * /
  constructor(jugador, opciones) {
    // Crear información de pseudo pista
    // Requiere opciones['tipo']
    opciones.pista = {
      jugador,
      // ya no es necesario almacenar `kind` o `kinds` en la propia pista
      // ya que ahora están almacenados en la propiedad `kinds` de todas las instancias de
      // TextTrackMenuItem, pero esto permanecerá por compatibilidad con versiones anteriores
      tipo: opciones.tipo,
      tipos: opciones.tipos,
      predeterminado: falso,
      modo: 'deshabilitado'
    };

    if (!opciones.tipos) {
      opciones.tipos = [opciones.tipo];
    }

    if (opciones.etiqueta) {
      opciones.pista.etiqueta = opciones.etiqueta;
    } else {
      options.track.label = options.kinds.join(' y ') + 'off';
    }

    // MenuItem es seleccionable
    opciones.seleccionable = verdadero;
    // MenuItem NO es multiseleccionable (es decir, solo uno puede marcarse como "seleccionado" a la vez)
    opciones.multiseleccionable = falso;

    super(jugador, opciones);
  }

  /**
   * Manejar el cambio de pista de texto
   *
   * @param {EventTarget~Evento} evento
   * El evento que provocó la ejecución de esta función
   * /
  handleTracksChange(evento) {
    const pistas = this.player().textTracks();
    let shouldBeSelected = true;

    for (sea i = 0, l = pistas.longitud; i < yo; i++) {
      const pista = pistas[i];

      if ((this.options_.kinds.indexOf(track.kind) > -1) && track.mode === 'mostrando') {
        debe ser seleccionado = falso;
        romper;
      }
    }

    // Evita llamadas redundantes a selected() porque pueden causar
    // lectores de pantalla para leer el texto de control adjunto innecesariamente
    if (deberíaSeleccionado !== this.isSelected_) {
      this.selected(deberíaSerSeleccionado);
    }
  }

  handleSelectedLanguageChange(evento) {
    const pistas = this.player().textTracks();
    let allHidden = verdadero;

    for (sea i = 0, l = pistas.longitud; i < yo; i++) {
      const pista = pistas[i];

      if ((['títulos', 'descripciones', 'subtítulos'].indexOf(pista.tipo) > -1) && track.mode === 'mostrando') {
        todoOculto = falso;
        romper;
      }
    }

    si (todo oculto) {
      this.player_.cache_.selectedLanguage = {
        habilitado: falso
      };
    }
  }

}

Component.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);
exportar OffTextTrackMenuItem predeterminado;