/**
* @file text-track-list-converter.js Utilitaires pour capturer l'état de la piste de texte et la
* recréer des pistes à partir d'une capture.
*
* @module convertisseur texte-trace-liste
*/
/**
* Examine un {@link TextTrack} unique et renvoie un objet javascript compatible JSON qui
* représente l'état du {@link TextTrack}.
*
* @param {TextTrack} track
* La piste de texte à interroger.
*
* @return {Object}
* Une représentation javascript sérialisable de la piste de texte.
* @private
*/
const trackToJson_ = function(track) {
const ret = [
type", "étiquette", "langue", "id",
inBandMetadataTrackDispatchType", "mode", "src", "inBandMetadataTrackDispatchType", "mode", "src", "src"
].reduce((acc, prop, i) => {
if (track[prop]) {
acc[prop] = track[prop] ;
}
retour acc ;
}, {
cues : track.cues && Array.prototype.map.call(track.cues, function(cue) {
retour {
startTime : cue.startTime,
endTime : cue.endTime,
texte : cue.text,
id : cue.id
};
})
}) ;
retour ret ;
};
/**
* Examine un {@link Tech} et renvoie un tableau javascript compatible JSON qui représente le {@link Tech}
* état de tous les {@link TextTrack} actuellement configurés. Le tableau de retour est compatible avec
* {@link text-track-list-converter:jsonToTextTracks}.
*
* @param {Tech} tech
* L'objet technique à interroger
*
* @return {Array}
* Une représentation javascript sérialisable 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_)) ;
};
/**
* Créer un ensemble de {@link TextTrack}s distants sur un {@link Tech} basé sur un tableau de javascript
* objet {@link TextTrack} representations.
*
* @param {Array} json
* Un tableau d'objets de représentation `TextTrack`, comme ceux qui seraient
* produit par `textTracksToJson`.
*
* @param {Tech} tech
* La `Technologie` sur laquelle créer le `TextTrack`.
*/
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_} ;