/**
* @file text-track-list-converter.js 텍스트 트랙 상태 및
* 캡처를 기반으로 트랙을 재생성합니다.
*
* @module 텍스트 트랙 목록 변환기
*/
/**
* 단일 {@link TextTrack}을 검사하고 다음과 같은 JSON 호환 자바스크립트 개체를 반환합니다.
*는 {@link TextTrack}의 상태를 나타냅니다.
*
* @param {TextTrack} 트랙
* 쿼리할 텍스트 트랙입니다.
*
* @return {객체}
* TextTrack의 직렬화 가능한 자바스크립트 표현입니다.
* @사적인
*/
const trackToJson_ = 함수(트랙) {
const ret = [
'종류', '라벨', '언어', 'ID',
'inBandMetadataTrackDispatchType', '모드', 'src'
].reduce((acc, 소품, i) => {
if (트랙[소품]) {
acc[prop] = 트랙[prop];
}
반환 acc;
}, {
큐: track.cues && Array.prototype.map.call(track.cues, function(cue) {
반환 {
시작시간: cue.startTime,
endTime: cue.endTime,
텍스트: cue.text,
id: cue.id
};
})
});
반환 ret;
};
/**
* {@link Tech}를 검사하고 JSON 호환 자바스크립트 배열을 반환합니다.
* 현재 구성된 모든 {@link TextTrack}의 상태. 반환 배열은 다음과 호환됩니다.
* {@link text-track-list-converter:jsonToTextTracks}.
*
* @param {기술} 기술
* 쿼리할 기술 객체
*
* @return {배열}
* {@link Tech}s의 직렬화 가능한 자바스크립트 표현
* {@link TextTrackList}.
*/
const textTracksToJson = 함수(기술) {
const trackEls = tech.$$('트랙');
const trackObjs = Array.prototype.map.call(trackEls, (t) => t.트랙);
const 트랙 = Array.prototype.map.call(trackEls, function(trackEl) {
const json = trackToJson_(trackEl.track);
if (trackEl.src) {
json.src = trackEl.src;
}
반환 JSON;
});
return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {
return trackObjs.indexOf(트랙) === -1;
}).map(trackToJson_));
};
/**
* 자바스크립트 배열을 기반으로 {@link Tech}에 원격 {@link TextTrack} 세트 생성
* 객체 {@link TextTrack} 표현.
*
* @param {배열} json
* `TextTrack` 표현 객체의 배열,
* `textTracksToJson`에 의해 생성됨.
*
* @param {기술} 기술
* `Tech`는 `TextTrack`을 생성합니다.
*/
const jsonToTextTracks = 함수(json, 기술) {
json.forEach(함수(트랙) {
const addedTrack = tech.addRemoteTextTrack(트랙).트랙;
만약 (!track.src && track.cues) {
track.cues.forEach((cue) => addedTrack.addCue(cue));
}
});
return tech.textTracks();
};
내보내기 기본 {textTracksToJson, jsonToTextTracks, trackToJson_};