/**
* @file text-track-list-converter.js Dienstprogramme zum Erfassen des Textspurstatus und
* wiedererstellung von Tracks auf der Grundlage einer Aufnahme.
*
* @modul text-track-list-konverter
* /
/**
* Untersucht einen einzelnen {@link TextTrack} und gibt ein JSON-kompatibles Javascript-Objekt zurück, das
* stellt den Zustand des {@link TextTrack} dar.
*
* @param {TextTrack} track
* Die abzufragende Textspur.
*
* @return {Object}
* Eine serialisierbare Javascript-Darstellung der TextSpur.
* @privat
* /
const trackToJson_ = function(track) {
const ret = [
art", "Bezeichnung", "Sprache", "id",
'inBandMetadataTrackDispatchType', 'mode', 'src'
].reduce((acc, prop, i) => {
if (track[prop]) {
acc[prop] = track[prop];
}
return acc;
}, {
cues: track.cues && Array.prototype.map.call(track.cues, function(cue) {
Rückkehr {
startTime: cue.startTime,
endTime: cue.endTime,
text: cue.text,
id: cue.id
};
})
});
return ret;
};
/**
* Untersucht eine {@link Tech} und gibt ein JSON-kompatibles Javascript-Array zurück, das die
* status aller derzeit konfigurierten {@link TextTrack}s. Das Rückgabe-Array ist kompatibel mit
* {@link text-track-list-converter:jsonToTextTracks}.
*
* @param {Tech} tech
* Das abzufragende Tech-Objekt
*
* @return {Array}
* Eine serialisierbare Javascript-Darstellung des {@link Tech}s
* {@link TextTrackList}.
* /
const textTracksToJson = function(tech) {
const trackEls = tech.$$('track');
const trackObjs = Array.prototype.map.call(trackEls, (t) => t.track);
const tracks = Array.prototype.map.call(trackEls, function(trackEl) {
const json = trackToJson_(trackEl.track);
if (trackEl.src) {
json.src = trackEl.src;
}
return json;
});
return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {
return trackObjs.indexOf(track) === -1;
}).map(trackToJson_));
};
/**
* Erstellen einer Reihe von entfernten {@link TextTrack}s auf einer {@link Tech} basierend auf einem Array von javascript
* objekt {@link TextTrack} Darstellungen.
*
* @param {Array} json
* Ein Array von `TextTrack`-Darstellungsobjekten, wie die, die
* erzeugt von `textTracksToJson`.
*
* @param {Tech} tech
* Die Technik, mit der der TextTrack erstellt wird.
* /
const jsonToTextTracks = function(json, tech) {
json.forEach(function(track) {
const addedTrack = tech.addRemoteTextTrack(track).track;
if (!track.src && track.cues) {
track.cues.forEach((cue) => addedTrack.addCue(cue));
}
});
return tech.textTracks();
};
export default {textTracksToJson, jsonToTextTracks, trackToJson_};