/**
 * @file setup.js - Funciones para configurar un reproductor sin
 * Interacción del usuario basada en el "atributo" de configuración de datos de la etiqueta de video.
 *
 * Configuración de @módulo
 * /
importar * como Dom desde './utils/dom';
importar documento desde 'global/document';
importar ventana desde 'global/window';

let _windowLoaded = falso;
vamos videojs;

/**
 * Configure cualquier etiqueta que tenga un "atributo" de configuración de datos cuando se inicie el reproductor.
 * /
const autoConfiguración = función () {

  si (videojs.options.autoSetup === falso) {
    devolver;
  }

  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);

  // Comprobar si existe algún elemento multimedia
  si (mediaEls && mediaEls.longitud > 0) {

    for (sea i = 0, e = mediaEls.length; i < mi; i++) {
      const mediaEl = mediaEls[i];

      // Comprueba si el elemento existe, tiene la función getAttribute.
      si (mediaEl && mediaEl.getAttribute) {

        // Asegúrese de que este reproductor no se haya configurado aún.
        if (mediaEl.jugador === indefinido) {
          const opciones = mediaEl.getAttribute('data-setup');

          // Comprobar si existe el atributo de configuración de datos.
          // Solo configuramos automáticamente si agregaron el atributo de configuración de datos.
          if (opciones! == nulo) {
            // Crea una nueva instancia de video.js.
            videojs(mediaEl);
          }
        }

      // Si getAttribute no está definido, debemos esperar al DOM.
      } else {
        tiempo de espera de configuración automática (1);
        romper;
      }
    }

  // No se encontraron videos, así que siga repitiendo a menos que la página termine de cargarse.
  } más si (!_windowLoaded) {
    tiempo de espera de configuración automática (1);
  }
};

/**
 * Espere hasta que se cargue la página antes de ejecutar la configuración automática. Esto será llamado en
 * autoSetup si `hasLoaded` devuelve falso.
 *
 * @param {número} espera
 * Cuanto tiempo esperar en ms
 *
 * @param {módulo:videojs} [vjs]
 * La función de biblioteca videojs
 * /
function autoSetupTimeout(esperar, vjs) {
  // Proteger contra roturas en entornos sin navegador
  if (!Dom.isReal()) {
    devolver;
  }

  si (vjs) {
    videojs = vjs;
  }

  ventana.setTimeout(autoconfiguración, espera);
}

/**
 * Se utiliza para establecer el seguimiento interno del estado de ventana cargada en verdadero.
 *
 * @privado
 * /
función establecerVentanaCargada() {
  _windowLoaded = verdadero;
  ventana.removeEventListener('load', setWindowLoaded);
}

if (Dom.isReal()) {
  if (document.readyState === 'completo') {
    establecerVentanaCargada();
  } else {
    /**
     * Escuche el evento de carga en la ventana y establezca _windowLoaded en verdadero.
     *
     * Usamos un detector de eventos estándar aquí para evitar incrementar el GUID
     * antes de que se creen jugadores.
     *
     * @escucha cargar
     * /
    ventana.addEventListener('cargar', setWindowLoaded);
  }
}

/**
 * comprobar si la ventana se ha cargado
 * /
const hasLoaded = function() {
  volver _windowLoaded;
};

exportar {autoSetup, autoSetupTimeout, hasLoaded};