/**
 * @file loader.js
 */
從 '../component.js' 導入組件;
從 './tech.js' 導入技術;
從 '../utils/string-cases.js' 導入 {toTitleCase};
從 '../utils/merge-options.js' 導入 mergeOptions;

/**
 * `MediaLoader` 是決定加載哪種播放技術的 `Component`
 * 播放器初始化時。
 *
 * @extends 組件
 */
類 MediaLoader 擴展組件 {

  /**
   * 創建此類的一個實例。
   *
   * @param {Player} 播放器
   * 此類應附加到的 `Player`。
   *
   * @param {對象} [選項]
   * 播放器選項的鍵/值存儲。
   *
   * @param {Component~ReadyCallback} [就緒]
   * 此組件準備就緒時運行的函數。
   */
  構造函數(播放器,選項,準備就緒){
    // MediaLoader 沒有元素
    const options_ = mergeOptions({createEl: false}, options);

    超級(玩家,選項_,準備就緒);

    // 如果初始化播放器時沒有源,
    //加載第一個支持的播放技術。

    如果(!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]);
        讓 tech = Tech.getTech(techName);

        // 支持將技術註冊為組件的舊行為。
        // 一旦刪除了不推薦使用的行為,就刪除。
        如果(!技術名稱){
          tech = Component.getComponent(techName);
        }

        // 檢查瀏覽器是否支持該技術
        如果(技術 && 技術。isSupported()){
          player.loadTech_(techName);
          休息;
        }
      }
    }其他{
      // 循環播放技術(例如 HTML5)並檢查支持。
      // 然後加載最好的源。
      // 這裡有一些假設:
      // 所有播放技術都尊重預加載 false。
      player.src(options.playerOptions.sources);
    }
  }
}

Component.registerComponent('MediaLoader', MediaLoader);
導出默認 MediaLoader;