/**
 * @file setup.js - Funktionen zum Einrichten eines Players ohne
 * Benutzerinteraktion basierend auf dem Daten-Setup-`Attribut` des Video-Tags.
 *
 * @module einrichten
 * /
import * as Dom from './utils/dom';
dokument aus 'global/document' importieren;
import window from 'global/window';

sei _windowLoaded = falsch;
lass videojs;

/**
 * Richten Sie alle Tags ein, die beim Start des Players ein `Data-Setup-Attribut` haben.
 * /
const autoSetup = Funktion () {

  wenn (videoJS.Options.AutoSetup === falsch) {
    rückkehr;
  }

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

  //Prüfe, ob Medienelemente existieren
  if (MediaEls && MediaEls.length > 0) {

    für (sei i = 0, e = MediaEls.length; i < e; i++) {
      const mediaEL = MediaEls [i];

      //Prüfe, ob das Element existiert, hat die getAttribute-Funktion.
      wenn (MediaEL && MediaEL.getAttribute) {

        //Vergewissere dich, dass dieser Player nicht bereits eingerichtet wurde.
        if (Mediael.Player === undefiniert) {
          const-Optionen = Mediael.getAttribute ('data-setup');

          // Prüfen, ob data-setup attr existiert.
          //Wir setzen die automatische Einrichtung nur dann automatisch ein, wenn sie das Daten-Setup attr hinzugefügt haben.
          if (Optionen! == null) {
            //Erstelle eine neue Instanz von video.js.
            videojs (MediaL);
          }
        }

      //Wenn getAttribute nicht definiert ist, müssen wir auf das DOM warten.
      } sonst {
        autoSetupTimeout(1);
        pause;
      }
    }

  //Es wurden keine Videos gefunden, also mach weiter, bis die Seite fertig geladen ist.
  } sonst wenn (! _WindowLoaded) {
    autoSetupTimeout(1);
  }
};

/**
 * Warten Sie, bis die Seite geladen ist, bevor Sie AutoSetup ausführen. Das wird aufgerufen
 * AutoSetup wenn `hasLoaded` den Wert false zurückgibt.
 *
 * @param {number} warte
 * Wie lange muss ich in ms warten
 *
 * @param {module:videojs} [vjs]
 * Die Videojs-Bibliotheksfunktion
 * /
Funktion autoSetupTimeout (warte, vjs) {
  //Schützen Sie sich vor Beschädigungen in Umgebungen ohne Browser
  if (!Dom.isReal()) {
    rückkehr;
  }

  wenn (vjs) {
    videojs = vjs;
  }

  window.setTimeout (AutoSetup, warte);
}

/**
 * Wird verwendet, um die interne Erfassung des Ladezustands des Fensters auf „True“ zu setzen.
 *
 * @privat
 * /
Funktion setWindowLoaded () {
  _windowLoaded = wahr;
  window.removeEventListener ('laden', setWindowLoaded);
}

wenn (dom.isReal ()) {
  if (document.ReadyState === 'abgeschlossen') {
    setWindowLoaded ();
  } sonst {
    /**
     * Warte auf das Ladeereignis im Fenster und setze _windowLoaded auf true.
     *
     * Wir verwenden hier einen Standard-Event-Listener, um eine Erhöhung der GUID zu vermeiden
     * bevor irgendwelche Spieler erstellt werden.
     *
     * @listens laden
     * /
    window.addEventListener ('laden', setWindowLoaded);
  }
}

/**
 * überprüfe, ob das Fenster geladen wurde
 * /
const hasLoaded = Funktion () {
  gib _windowLoaded zurück;
};

export {AutoSetup, AutoSetupTimeout, hasLoaded};