/**
* @file setup.js - Fonctions de configuration d'un lecteur sans
* l'interaction avec l'utilisateur sur la base de l'"attribut" de l'étiquette vidéo.
*
* @module setup
*/
import * as Dom from './utils/dom' ;
import document from 'global/document' ;
import window from 'global/window' ;
let _windowLoaded = false ;
let videojs ;
/**
* Configure toutes les balises qui ont un `attribut` data-setup au démarrage du lecteur.
*/
const autoSetup = function() {
if (videojs.options.autoSetup === false) {
retour ;
}
const vids = Array.prototype.slice.call(document.getElementsByTagName('video')) ;
const audios = Array.prototype.slice.call(document.getElementsByTagName('audio')) ;
const divs = Array.prototype.slice.call(document.getElementsByTagName('video-js')) ;
const mediaEls = vids.concat(audios, divs) ;
// Vérifier s'il existe des éléments multimédias
if (mediaEls && mediaEls.length > 0) {
for (let i = 0, e = mediaEls.length ; i < e ; i++) {
const mediaEl = mediaEls[i] ;
// Vérifier si l'élément existe et s'il dispose d'une fonction getAttribute.
if (mediaEl && mediaEl.getAttribute) {
// Assurez-vous que ce lecteur n'a pas déjà été configuré.
if (mediaEl.player === undefined) {
const options = mediaEl.getAttribute('data-setup') ;
// Vérifier si data-setup attr existe.
// Nous n'effectuons l'auto-setup que s'ils ont ajouté l'attr data-setup.
if (options !== null) {
// Créer une nouvelle instance video.js.
videojs(mediaEl) ;
}
}
// Si getAttribute n'est pas défini, nous devons attendre le DOM.
} else {
autoSetupTimeout(1) ;
pause ;
}
}
// Aucune vidéo n'a été trouvée, la boucle se poursuit donc jusqu'à ce que la page ait fini de se charger.
} else if (!_windowLoaded) {
autoSetupTimeout(1) ;
}
};
/**
* Attendez que la page soit chargée avant d'exécuter autoSetup. Il sera appelé en
* autoSetup si `hasLoaded` retourne false.
*
* @param {number} wait
* Combien de temps attendre en ms
*
* @param {module:videojs} [vjs]
* La fonction de la bibliothèque videojs
*/
function autoSetupTimeout(wait, vjs) {
// Protection contre les ruptures dans les environnements autres que les navigateurs
if (!Dom.isReal()) {
retour ;
}
if (vjs) {
videojs = vjs ;
}
window.setTimeout(autoSetup, wait) ;
}
/**
* Utilisé pour définir le suivi interne de l'état de chargement de la fenêtre à true.
*
* @private
*/
function setWindowLoaded() {
_windowLoaded = true ;
window.removeEventListener('load', setWindowLoaded) ;
}
if (Dom.isReal()) {
if (document.readyState === 'complete') {
setWindowLoaded() ;
} else {
/**
* Écouter l'événement de chargement de la fenêtre et attribuer la valeur true à _windowLoaded.
*
* Nous utilisons ici un écouteur d'événements standard pour éviter d'incrémenter le GUID
* avant la création de tout joueur.
*
* @listens load
*/
window.addEventListener('load', setWindowLoaded) ;
}
}
/**
* vérifier si la fenêtre a été chargée
*/
const hasLoaded = function() {
return _windowLoaded ;
};
export {autoSetup, autoSetupTimeout, hasLoaded} ;