/**
 * @file video-track-list.js
 */
'./track-list'에서 TrackList 가져오기;

/**
 * 선택된 다른 모든 {@link VideoTrack}을 선택 취소합니다.
 *
 * @param {VideoTrackList} 목록
 * 작업할 목록
 *
 * @param {VideoTrack} 트랙
 * 건너뛸 트랙
 *
 * @사적인
 */
const disableOthers = 기능(목록, 추적) {
  에 대한 (하자 i = 0; i < 목록 길이; i++) {
    if (!Object.keys(list[i]).length || track.id === list[i].id) {
      계속하다;
    }
    // 다른 비디오 트랙이 활성화되어 있으면 비활성화합니다.
    list[i].selected = 거짓;
  }
};

/**
 * 동영상에 대한 {@link VideoTrack}의 현재 목록입니다.
 *
 * @see [사양]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}
 * @extends 트랙리스트
 */
클래스 VideoTrackList 확장 TrackList {

  /**
   * 이 클래스의 인스턴스를 만듭니다.
   *
   * @param {VideoTrack[]} [트랙=[]]
   * 목록을 인스턴스화할 `VideoTrack` 목록.
   */
  생성자(트랙 = []) {
    // 1개의 트랙만 활성화되었는지 확인
    // 마지막 인덱스에서 첫 번째 인덱스로 정렬
    for (let i = 트랙 길이 - 1; i > = 0; 나--) {
      if (트랙[i].선택됨) {
        disableOthers(트랙, 트랙[i]);
        부서지다;
      }
    }

    슈퍼(트랙);
    this.change_ = 거짓;

    /**
     * @member {숫자} VideoTrackList#selectedIndex
     * 선택된 {@link VideoTrack`}의 현재 인덱스.
     */
    Object.defineProperty(이것, 'selectedIndex', {
      얻다() {
        에 대한 (하자 i = 0; i < this.길이; i++) {
          if (이[i].선택) {
            나는 반환;
          }
        }
        -1 반환;
      },
      세트() {}
    });
  }

  /**
   * `VideoTrackList`에 {@link VideoTrack}을 추가합니다.
   *
   * @param {VideoTrack} 트랙
   * 목록에 추가할 VideoTrack
   *
   * @fires 트랙리스트#addtrack
   */
  addTrack(트랙) {
    경우 (track.selected) {
      disableOthers(this, 트랙);
    }

    super.addTrack(트랙);
    // 네이티브 트랙에는 이것이 없습니다.
    if (!track.addEventListener) {
      반품;
    }

    track.selectedChange_ = () => {
      if (이.변화_) {
        반품;
      }
      this.change_ = 참;
      disableOthers(this, 트랙);
      this.change_ = 거짓;
      this.trigger('변경');
    };

    /**
     * @listens VideoTrack#selectedchange
     * @fires 트랙리스트#변경
     */
    track.addEventListener('selectedchange', track.selectedChange_);
  }

  removeTrack(rtrack) {
    super.removeTrack(rtrack);

    if (rtrack.removeEventListener && rtrack.selectedChange_) {
      rtrack.removeEventListener('selectedchange', rtrack.selectedChange_);
      rtrack.selectedChange_ = null;
    }
  }
}

기본 VideoTrackList 내보내기;