/**
* @file 시간 범위.js
* @module 시간 범위
*/
'글로벌/창'에서 창 가져오기;
/**
* 시작 또는 끝에서 지정된 인덱스의 시간을 반환합니다.
* TimeRange 개체의.
*
* @typedef {기능} TimeRangeIndex
*
* @param {숫자} [인덱스=0]
* 시간을 반환할 범위 번호입니다.
*
* @return {숫자}
* 지정된 인덱스에서의 시간 오프셋.
*
* @deprecated 인덱스 인수를 제공해야 합니다.
* 앞으로는 그대로 두면 오류가 발생합니다.
*/
/**
* 시간 범위를 포함하는 개체입니다.
*
* @typedef {객체} 시간 범위
*
* @property {숫자} 길이
* 이 개체가 나타내는 시간 범위의 수입니다.
*
* @property {module:time-ranges~TimeRangeIndex} 시작
* 지정된 시간 범위가 시작되는 시간 오프셋을 반환합니다.
*
* @property {module:time-ranges~TimeRangeIndex} end
* 지정된 시간 범위가 끝나는 시간 오프셋을 반환합니다.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges
*/
/**
* 시간 범위가 최대 인덱스를 초과하는지 확인하십시오.
*
* @사적인
* @param {문자열} fn이름
* 로깅에 사용할 함수 이름
*
* @param {숫자} 색인
* 확인할 인덱스
*
* @param {숫자} maxIndex
* 가능한 최대 인덱스
*
* @throws {Error} 제공된 timeRanges가 maxIndex를 초과하는 경우
*/
함수 rangeCheck(fnName, 인덱스, maxIndex) {
if (인덱스 유형 !== '숫자' || 인덱스 < 0 || 색인 > 최대 인덱스) {
throw new Error(`'TimeRanges'에서 '${fnName}' 실행 실패: 제공된 인덱스(${index})가 숫자가 아니거나 범위를 벗어났습니다(0-${maxIndex}).`);
}
}
/**
* 시작 또는 끝에서 지정된 인덱스에 대한 시간 가져오기
* TimeRange 개체의.
*
* @사적인
* @param {문자열} fn이름
* 로깅에 사용할 함수 이름
*
* @param {문자열} 값 인덱스
* 시간을 얻기 위해 사용해야 하는 속성입니다. 해야한다
* '시작' 또는 '종료'
*
* @param {배열} 범위
* 시간 범위의 배열
*
* @param {배열} [rangeIndex=0]
* 검색을 시작할 인덱스
*
* @return {숫자}
* 지정된 인덱스에서 오프셋되는 시간.
*
* @deprecated rangeIndex는 값으로 설정해야 합니다. 나중에 오류가 발생합니다.
* @throws {Error} rangeIndex가 범위 길이보다 큰 경우
*/
함수 getRange(fnName, valueIndex, 범위, rangeIndex) {
rangeCheck(fnName, rangeIndex, ranges.length - 1);
반환 범위[rangeIndex][valueIndex];
}
/**
* 시간 범위가 주어진 시간 범위 개체를 만듭니다.
*
* @사적인
* @param {배열} [범위]
* 시간 범위의 배열.
*/
함수 createTimeRangesObj(범위) {
let timeRangesObj;
if (범위 === 정의되지 않음 || 범위.길이 === 0) {
timeRangesObj = {
길이: 0,
시작() {
throw new Error('이 TimeRanges 객체는 비어 있습니다.');
},
끝() {
throw new Error('이 TimeRanges 객체는 비어 있습니다.');
}
};
} else {
timeRangesObj = {
길이: 범위.길이,
시작: getRange.bind(널, '시작', 0, 범위),
끝: getRange.bind(널, '종료', 1, 범위)
};
}
if (창.기호 && window.Symbol.iterator) {
timeRangesObj[window.Symbol.iterator] = () => (범위 || []).values();
}
반환 timeRangesObj;
}
/**
* 'TimeRange' 객체를 생성합니다.
* {@링크 https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges|HTML5 TimeRanges 인스턴스}.
*
* @param {번호|배열[]} 시작
* 단일 범위(숫자) 또는 범위 배열(
* 각각 두 개의 숫자 배열의 배열).
*
* @param {숫자} 끝
* 단일 범위의 끝. 의 배열 형식과 함께 사용할 수 없습니다.
* `시작` 인수.
*/
내보내기 기능 createTimeRanges(시작, 종료) {
if (Array.isArray(시작)) {
return createTimeRangesObj(시작);
} 그렇지 않으면 (시작 === 정의되지 않음 || 끝 === 정의되지 않음) {
return createTimeRangesObj();
}
return createTimeRangesObj([[시작, 종료]]);
}
내보내기 { createTimeRange를 createTimeRange로 };