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

/**
 * {@link HtmlTrackElement} 的當前列表。
 */
類 HtmlTrackElementList {

  /**
   * 創建此類的一個實例。
   *
   * @param {HtmlTrackElement[]} [tracks=[]]
   * 用於實例化列表的 `HtmlTrackElement` 列表。
   */
  構造函數(trackElements = []){
    this.trackElements_ = [];

    /**
     * @memberof HtmlTrackElementList
     * @member {number} 長度
     * 此 Trackist 中的當前 `Track` 數。
     * @實例
     */
    Object.defineProperty(this, '長度', {
      得到() {
        返回 this.trackElements_.length;
      }
    });

    對於(讓我 = 0,長度 = 跟踪。長度; 我的 < 長度; 我 ++){
      this.addTrackElement_(trackElements[i]);
    }
  }

  /**
   * 添加一個 {@link HtmlTrackElement} 到 `HtmlTrackElementList`
   *
   * @param {HtmlTrackElement} trackElement
   * 要添加到列表中的軌道元素。
   *
   * @私人的
   */
  addTrackElement_(trackElement) {
    const index = this.trackElements_.length;

    如果(!(「+ 在這個索引)){
      Object.defineProperty(這個,索引,{
        得到() {
          返回 this.trackElements_[index];
        }
      });
    }

    // 不要添加重複元素
    如果 (this.trackElements_.indexOf(trackElement) === -1) {
      this.trackElements_.push(trackElement);
    }
  }

  /**
   * 從給定的 `HtmlTrackElementList` 中獲取 {@link HtmlTrackElement}
   * {@link TextTrack}。
   *
   * @param {TextTrack} 軌道
   * 與軌道元素關聯的軌道。
   *
   * @return {HtmlTrackElement|undefined}
   * 找到或未定義的軌道元素。
   *
   * @私人的
   */
  getTrackElementByTrack_(軌道){
    讓 trackElement_;

    對於(讓我 = 0,長度 = 這個。跟踪 _ 長度; 我的 < 長度; I ++){
      如果(軌道=== this.trackElements_[i].track){
        trackElement_ = this.trackElements_[i];

        休息;
      }
    }

    返回軌道元素_;
  }

  /**
   * 從 `HtmlTrackElementList` 中移除一個 {@link HtmlTrackElement}
   *
   * @param {HtmlTrackElement} trackElement
   * 要從列表中刪除的軌道元素。
   *
   * @私人的
   */
  removeTrackElement_(trackElement) {
    對於(讓我 = 0,長度 = 這個。跟踪 _ 長度; 我的 < 長度; I ++){
      如果 (trackElement === this.trackElements_[i]) {
        如果 (this.trackElements_[i].track && typeof this.trackElements_[i].track.off === '函數') {
          this.trackElements_[i].track.off();
        }

        if (typeof this.trackElements_[i].off === '函數') {
          this.trackElements_[i].off();
        }
        this.trackElements_.splice(i, 1);
        休息;
      }
    }
  }
}

導出默認 HtmlTrackElementList;