/**
* @file loader.js
*/
import Component from '../component.js' ;
import Tech from './tech.js' ;
import {toTitleCase} de '../utils/string-cases.js' ;
import mergeOptions from '../utils/merge-options.js' ;
/**
* Le `MediaLoader` est le `Composant` qui décide de la technologie de lecture à charger
* lors de l'initialisation d'un lecteur.
*
* @extends Component
*/
class MediaLoader extends Component {
/**
* Créer une instance de cette classe.
*
* @param {Player} player
* Le `Player` auquel cette classe doit s'attacher.
*
* @param {Objet} [options]
* La mémoire clé/valeur des options du lecteur.
*
* @param {Component~ReadyCallback} [ready]
* La fonction qui est exécutée lorsque ce composant est prêt.
*/
constructor(player, options, ready) {
// MediaLoader n'a pas d'élément
const options_ = mergeOptions({createEl : false}, options) ;
super(player, options_, ready) ;
// S'il n'y a pas de sources lors de l'initialisation du lecteur,
// charger la première technologie de lecture prise en charge.
if (!options.playerOptions.sources || options.playerOptions.sources.length === 0) {
for (let i = 0, j = options.playerOptions.techOrder ; i < j.length ; i++) {
const techName = toTitleCase(j[i]) ;
let tech = Tech.getTech(techName) ;
// Prise en charge de l'ancien comportement des technologies enregistrées en tant que composants.
// Supprimer une fois que ce comportement déprécié est supprimé.
if (!techName) {
tech = Component.getComponent(techName) ;
}
// Vérifier si le navigateur supporte cette technologie
if (tech && tech.isSupported()) {
player.loadTech_(techName) ;
pause ;
}
}
} else {
// Passer en revue les technologies de lecture (par exemple HTML5) et vérifier si elles sont prises en charge.
// Charge ensuite la meilleure source.
// Quelques hypothèses ici :
// Toutes les technologies de lecture respectent preload false.
player.src(options.playerOptions.sources) ;
}
}
}
Component.registerComponent('MediaLoader', MediaLoader) ;
exporter le MediaLoader par défaut ;