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

/**
 * 우리가 이 함수를 호출하는 모든 곳에서 우리는 사양에서 벗어납니다.
 * 한 번에 하나의 활성화된 오디오 트랙만 지원하므로
 *
 * @param {AudioTrackList} 목록
 * 작업할 목록
 *
 * @param {AudioTrack} 트랙
 * 건너뛸 트랙
 *
 * @사적인
 */
const disableOthers = 기능(목록, 추적) {
  에 대한 (하자 i = 0; i < 목록 길이; i++) {
    if (!Object.keys(list[i]).length || track.id === list[i].id) {
      계속하다;
    }
    // 다른 오디오 트랙이 활성화되어 있으면 비활성화합니다.
    list[i].enabled = 거짓;
  }
};

/**
 * 미디어 파일에 대한 {@link AudioTrack}의 현재 목록입니다.
 *
 * @see [사양]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist}
 * @extends 트랙리스트
 */
클래스 AudioTrackList 확장 TrackList {

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

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

  /**
   * `AudioTrackList`에 {@link AudioTrack}을 추가합니다.
   *
   * @param {AudioTrack} 트랙
   * 목록에 추가할 AudioTrack
   *
   * @fires 트랙리스트#addtrack
   */
  addTrack(트랙) {
    if (트랙.활성화) {
      disableOthers(this, 트랙);
    }

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

    track.enabledChange_ = () => {
      // 다른 트랙을 비활성화할 때(지원하지 않기 때문에)
      // 한 번에 하나 이상의 트랙) changing_을 설정합니다.
      // 추가 변경 이벤트를 트리거하지 않도록 true로 변경
      if (이.변화_) {
        반품;
      }
      this.change_ = 참;
      disableOthers(this, 트랙);
      this.change_ = 거짓;
      this.trigger('변경');
    };

    /**
     * @listens AudioTrack#enabledchange
     * @fires 트랙리스트#변경
     */
    track.addEventListener('enabledchange', track.enabledChange_);
  }

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

    if (rtrack.removeEventListener && rtrack.enabledChange_) {
      rtrack.removeEventListener('enabledchange', rtrack.enabledChange_);
      rtrack.enabledChange_ = null;
    }
  }
}

기본 AudioTrackList 내보내기;