/**
 * @file setup.js - 設置播放器的函數
 * 基於視頻標籤的數據設置“屬性”的用戶交互。
 *
 * @模塊設置
 */
從 './utils/dom' 導入 * 作為 Dom;
從“全局/文檔”導入文檔;
從“全局/窗口”導入窗口;

讓_windowLoaded =假;
讓 videojs;

/**
 * 在播放器啟動時設置任何具有數據設置“屬性”的標籤。
 */
const autoSetup = function() {

  如果(videojs.options.autoSetup === false){
    返回;
  }

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

  // 檢查是否存在任何媒體元素
  如果 (mediaEls && mediaEls.length > 0) {

    對於(讓我 = 0,e = 介質。長度; 我 <  ; 我 ++){
      const mediaEl = mediaEls[i];

      // 檢查元素是否存在,是否有 getAttribute 函數。
      如果 (mediaEl && mediaEl.getAttribute) {

        // 確保尚未設置此播放器。
        如果(mediaEl.player === undefined){
          const options = mediaEl.getAttribute('data-setup');

          // 檢查數據設置屬性是否存在。
          // 如果他們添加了數據設置屬性,我們只會自動設置。
          如果(選項!== null){
            // 創建新的 video.js 實例。
            videojs(媒體);
          }
        }

      // 如果未定義 getAttribute,我們需要等待 DOM。
      }其他{
        自動設置超時(1);
        休息;
      }
    }

  // 沒有找到視頻,所以繼續循環直到頁面加載完成。
  } 否則,如果(!視窗載入 (_W) {
    自動設置超時(1);
  }
};

/**
 * 在運行 autoSetup 之前等待頁面加載完畢。這將在
 * 如果 `hasLoaded` 返回 false,則自動設置。
 *
 * @param {number} 等待
 * 以毫秒為單位等待多長時間
 *
 * @param {模塊:視頻} [VJS]
 * videojs庫函數
 */
函數 autoSetupTimeout(等待,vjs){
  // 防止在非瀏覽器環境中損壞
  如果(!Dom.isReal()){
    返回;
  }

  如果(vjs){
    videojs = vjs;
  }

  window.setTimeout(自動設置,等待);
}

/**
 * 用於將窗口加載狀態的內部跟踪設置為 true。
 *
 * @私人的
 */
函數 setWindowLoaded() {
  _windowLoaded = 真;
  window.removeEventListener('load', setWindowLoaded);
}

如果(Dom.isReal()){
  如果 (document.readyState === '完成') {
    設置窗口加載();
  }其他{
    /**
     * 監聽 window 的加載事件,並將 _windowLoaded 設置為 true。
     *
     * 我們在這裡使用標準事件偵聽器以避免增加 GUID
     * 在創建任何玩家之前。
     *
     * @listens 負載
     */
    window.addEventListener('load', setWindowLoaded);
  }
}

/**
 * 檢查窗口是否已經加載
 */
const hasLoaded = function() {
  返回_windowLoaded;
};

出口 {autoSetup, autoSetupTimeout, hasLoaded};