/**
 * @file text-track-cue-list.js
 */

/**
 * @typedef {객체} TextTrackCueList~TextTrackCue
 *
 * @property {문자열} 아이디
 * 이 텍스트 트랙 큐의 고유 ID
 *
 * @property {숫자} 시작시간
 * 이 텍스트 트랙 큐의 시작 시간
 *
 * @property {숫자} endTime
 * 이 텍스트 트랙 큐의 종료 시간
 *
 * @property {boolean} pauseOnExit
 * true인 경우 종료 시간에 도달하면 일시 중지합니다.
 *
 * @see [사양]{@링크 https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcue}
 */

/**
 * TextTrackCue 목록.
 *
 * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist}
 */
클래스 TextTrackCueList {

  /**
   * 이 클래스의 인스턴스를 생성합니다.
   *
   * @param {Array} 큐
   * 초기화할 큐 목록
   */
  생성자(큐) {
    TextTrackCueList.prototype.setCues_.call(this, cues);

    /**
     * @memberof TextTrackCueList
     * @member {번호} 길이
     * TextTrackCueList에 있는 `TextTrackCue`의 현재 수입니다.
     * @사례
     */
    Object.defineProperty(이것, '길이', {
      얻다() {
        this.length_를 반환합니다.
      }
    });
  }

  /**
   * 이 목록의 큐에 대한 세터. 게터 생성
   * 큐에 대한 인덱스.
   *
   * @param {Array} 큐
   * 설정할 큐의 배열
   *
   * @사적인
   */
  setCues_(cues) {
    const oldLength = this.length || 0;
    내가 = 0하자;
    const l = cues.length;

    this.cues_ = 신호;
    this.length_ = 큐.길이;

    const defineProp = 함수(인덱스) {
      if (!('' + index in this)) {
        Object.defineProperty(이것, '' + 색인, {
          얻다() {
            return this.cues_[인덱스];
          }
        });
      }
    };

    if (오래된 길이 < 엘) {
      i = 이전 길이;

      (; 나는 < 엘; i++) {
        defineProp.call(this, i);
      }
    }
  }

  /**
   * 현재 `TextTrackCueList`에 있는 `TextTrackCue`를 id로 가져옵니다.
   *
   * @param {문자열} 아이디
   * 검색해야 하는 큐의 ID입니다.
   *
   * @return {TextTrackCueList~TextTrackCue|null}
   * 단일 큐 또는 아무것도 발견되지 않은 경우 null입니다.
   */
  getCueById(id) {
    let 결과 = null;

    for (let i = 0, l = this.length; i < 엘; i++) {
      const cue = this[i];

      if (cue.id === id) {
        결과 = 큐;
        부서지다;
      }
    }

    반환 결과;
  }
}

기본 TextTrackCueList 내보내기;