/**
 * @archivo html-track-element.js
 * /

importar EventTarget desde '../event-target';
importar TextTrack desde '../tracks/text-track';

/**
 * @memberof HTMLTrackElement
 * @typedef {HTMLTrackElement~ReadyState}
 * @enum {número}
 * /
constante NINGUNO = 0;
carga constante = 1;
const CARGADO = 2;
constante ERROR = 3;

/**
 * Una sola pista representada en el DOM.
 *
 * @ver [Especificación]{@enlace https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement}
 * @extiende EventTarget
 * /
clase HTMLTrackElement extiende EventTarget {

  /**
   * Crear una instancia de esta clase.
   *
   * @param {Objeto} opciones={}
   * Objeto de nombres y valores de opciones
   *
   * @param {Tecnología} opciones.tecnología
   * Una referencia a la tecnología propietaria de este HTMLTrackElement.
   *
   * @param {TextTrack~Tipo} [opciones.tipo='subtítulos']
   * Un tipo de pista de texto válido.
   *
   * @param {TextTrack~Mode} [opciones.modo='deshabilitado']
   * Un modo de seguimiento de texto válido.
   *
   * @param {cadena} [opciones.id='vjs_track_' + Guid.nuevoGUID()]
   * Una identificación única para este TextTrack.
   *
   * @param {cadena} [opciones.etiqueta='']
   * La etiqueta del menú para esta pista.
   *
   * @param {cadena} [opciones.idioma='']
   * Un código de idioma válido de dos caracteres.
   *
   * @param {cadena} [opciones.srclang='']
   * Un código de idioma válido de dos caracteres. Una alternativa, pero despriorizada
   * versión de `options.language`
   *
   * @param {cadena} [opciones.src]
   * Una url a las señales de TextTrack.
   *
   * @param {booleano} [opciones.predeterminado]
   * Si esta pista debería estar activada o desactivada de forma predeterminada.
   * /
  constructor(opciones = {}) {
    súper();

    dejar estado listo;

    const track = new TextTrack(opciones);

    este.tipo = pista.tipo;
    this.src = pista.src;
    this.srclang = pista.idioma;
    esta.etiqueta = pista.etiqueta;
    this.default = track.default;

    Objeto.defineProperties(esto, {

      /**
       * @memberof HTMLTrackElement
       * @member {HTMLTrackElement~ReadyState} readyState
       * El estado de preparación actual del elemento de pista.
       * @instancia
       * /
      estado listo: {
        conseguir() {
          volver listoEstado;
        }
      },

      /**
       * @memberof HTMLTrackElement
       * Pista de @member {TextTrack}
       * El objeto TextTrack subyacente.
       * @instancia
       *
       * /
      pista: {
        conseguir() {
          pista de retorno;
        }
      }
    });

    EstadoListo = NINGUNO;

    /**
     * @escucha TextTrack#loadeddata
     * @fires HTMLTrackElement#load
     * /
    pista.addEventListener('datos cargados', () => {
      readyState = CARGADO;

      este.disparador({
        tipo: 'cargar',
        objetivo: este
      });
    });
  }
}

HTMLTrackElement.prototype.allowedEvents_ = {
  cargar: 'cargar'
};

HTMLTrackElement.NONE = NINGUNO;
HTMLTrackElement.LOADING = CARGANDO;
HTMLTrackElement.CARGADO = CARGADO;
HTMLTrackElement.ERROR = ERROR;

exportar HTMLTrackElement predeterminado;