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

/**
 * La lista actual de {@link HtmlTrackElement}s.
 * /
clase HtmlTrackElementList {

  /**
   * Crear una instancia de esta clase.
   *
   * @param {HtmlTrackElement[]} [pistas=[]]
   * Una lista de `HtmlTrackElement` para instanciar la lista.
   * /
  constructor(trackElements = []) {
    this.trackElements_ = [];

    /**
     * @memberof HtmlTrackElementList
     * @miembro {número} longitud
     * El número actual de 'Pistas' en este Trackist.
     * @instancia
     * /
    Object.defineProperty(esto, 'longitud', {
      conseguir() {
        devuelve this.trackElements_.length;
      }
    });

    for (sea i = 0, longitud = trackElements.longitud; i < longitud; i++) {
      this.addTrackElement_(trackElements[i]);
    }
  }

  /**
   * Agregue un {@link HtmlTrackElement} a `HtmlTrackElementList`
   *
   * @param {HtmlTrackElement} trackElement
   * El elemento de seguimiento para agregar a la lista.
   *
   * @privado
   * /
  addTrackElement_(trackElement) {
    const index = this.trackElements_.length;

    if (!('' + índice en esto)) {
      Object.defineProperty(este, índice, {
        conseguir() {
          devuelve esto.trackElements_[índice];
        }
      });
    }

    // No agregue elementos duplicados
    if (this.trackElements_.indexOf(trackElement) === -1) {
      this.trackElements_.push(trackElement);
    }
  }

  /**
   * Obtener un {@link HtmlTrackElement} de `HtmlTrackElementList` dado un
   * {@enlace TextTrack}.
   *
   * @param {TextTrack} pista
   * La pista asociada con un elemento de pista.
   *
   * @return {HtmlTrackElement|indefinido}
   * El elemento de la pista que se encontró o no se definió.
   *
   * @privado
   * /
  getTrackElementByTrack_(pista) {
    vamos trackElement_;

    for (sea i = 0, longitud = this.trackElements_.length; i < longitud; i++) {
      if (pista === this.trackElements_[i].pista) {
        trackElement_ = this.trackElements_[i];

        romper;
      }
    }

    volver trackElement_;
  }

  /**
   * Eliminar un {@link HtmlTrackElement} de `HtmlTrackElementList`
   *
   * @param {HtmlTrackElement} trackElement
   * El elemento de pista a eliminar de la lista.
   *
   * @privado
   * /
  removeTrackElement_(trackElement) {
    for (sea i = 0, longitud = this.trackElements_.length; i < longitud; i++) {
      if (trackElement === this.trackElements_[i]) {
        if (this.trackElements_[i].track && typeof this.trackElements_[i].track.off === 'función') {
          este.trackElements_[i].track.off();
        }

        if (tipo de this.trackElements_[i].off === 'función') {
          este.trackElements_[i].off();
        }
        este.trackElements_.splice(i, 1);
        romper;
      }
    }
  }
}

exportar HtmlTrackElementList predeterminado;