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

/**
 * {@link HtmlTrackElement}의 현재 목록입니다.
 */
클래스 HtmlTrackElementList {

  /**
   * 이 클래스의 인스턴스를 만듭니다.
   *
   * @param {HtmlTrackElement[]} [트랙=[]]
   * 목록을 인스턴스화할 `HtmlTrackElement` 목록입니다.
   */
  생성자(trackElements = []) {
    this.trackElements_ = [];

    /**
     * @memberof HtmlTrackElementList
     * @member {번호} 길이
     * 이 Trackist에 있는 `Track`의 현재 수입니다.
     * @사례
     */
    Object.defineProperty(이것, '길이', {
      얻다() {
        this.trackElements_.length 반환;
      }
    });

    for (let i = 0, 길이 = trackElements.length; i < 길이; i++) {
      this.addTrackElement_(trackElements[i]);
    }
  }

  /**
   * `HtmlTrackElementList`에 {@link HtmlTrackElement} 추가
   *
   * @param {HtmlTrackElement} 트랙 요소
   * 목록에 추가할 트랙 요소입니다.
   *
   * @사적인
   */
  addTrackElement_(trackElement) {
    const 인덱스 = this.trackElements_.length;

    if (!('' + index in this)) {
      Object.defineProperty(이것, 색인, {
        얻다() {
          return this.trackElements_[인덱스];
        }
      });
    }

    // 중복 요소를 추가하지 않음
    if (this.trackElements_.indexOf(trackElement) === -1) {
      this.trackElements_.push(트랙 요소);
    }
  }

  /**
   * 주어진 `HtmlTrackElementList`에서 {@link HtmlTrackElement} 가져오기
   * {@link TextTrack}.
   *
   * @param {TextTrack} 트랙
   * 트랙 요소와 관련된 트랙.
   *
   * @return {HtmlTrackElement|정의되지 않음}
   * 발견되었거나 정의되지 않은 트랙 요소.
   *
   * @사적인
   */
  getTrackElementByTrack_(트랙) {
    let trackElement_;

    for (let i = 0, 길이 = this.trackElements_.length; i < 길이; i++) {
      if (트랙 === this.trackElements_[i].track) {
        trackElement_ = this.trackElements_[i];

        부서지다;
      }
    }

    trackElement_ 반환;
  }

  /**
   * `HtmlTrackElementList`에서 {@link HtmlTrackElement} 제거
   *
   * @param {HtmlTrackElement} 트랙 요소
   * 목록에서 제거할 트랙 요소입니다.
   *
   * @사적인
   */
  removeTrackElement_(트랙 요소) {
    for (let i = 0, 길이 = this.trackElements_.length; i < 길이; i++) {
      if (trackElement === this.trackElements_[i]) {
        if (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 내보내기;