/**
 * @文件瀏覽器.js
 * @module 瀏覽器
 */
將 * 作為 Dom 從 './dom' 導入;
從“全局/窗口”導入窗口;

const USER_AGENT = window.navigator && window.navigator.userAgent || '';
const webkitVersionMap = (/AppleWebKit\\/([\\d.]+)/i).exec(USER_AGENT);
const appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()):空;

/**
 * 此設備是否是 iPod。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
export const IS_IPOD = (/iPod/i).test(USER_AGENT);

/**
 * 檢測到的 iOS 版本 - 或 `null`。
 *
 * @靜止的
 * @常量
 * @type {字符串|空}
 */
導出常量 IOS_VERSION = (函數() {
  const match = USER_AGENT.match(/OS (\\d+)_/i);

  如果(匹配 && 匹配[1]){
    返回匹配[1];
  }
  返回空值;
}());

/**
 * 這是否是 Android 設備。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
export const IS_ANDROID = (/Android/i).test(USER_AGENT);

/**
 * 檢測到的 Android 版本 - 或 `null`。
 *
 * @靜止的
 * @常量
 * @type {數字|字符串|空}
 */
導出常量 ANDROID_VERSION = (函數() {
  // 這匹配 Android Major.Minor.Patch 版本
  // ANDROID_VERSION 是 Major.Minor 作為數字,如果 Minor 不可用,則只返回 Major
  常量匹配 = 用戶 _ 代理。匹配(/安卓(\ d +)(?:\。(\ d +))?(?:\。(\ d+)) */i);

  如果(!匹配){
    返回空值;
  }

  const major = match[1] && parseFloat(match[1]);
  const minor = match[2] && parseFloat(match[2]);

  如果(主要&&次要){
    返回 parseFloat(匹配 [1] + '.' + 匹配 [2]);
  } 否則如果(主要){
    返回專業;
  }
  返回空值;
}());

/**
 * 這是否是本機 Android 瀏覽器。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
導出常量是 _ 本地 _ 安卓 = 安卓 && 安卓 _ 版本 <  5 & & 蘋果網絡套件版本 <  537;

/**
 * 這是否是 Mozilla Firefox。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
export const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);

/**
 * 這是否是 Microsoft Edge。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
export const IS_EDGE = (/Edg/i).test(USER_AGENT);

/**
 * 這是否是谷歌瀏覽器。
 *
 * 對於 iOS 上的 Chrome,這也將是 `true`,它將有不同的支持
 * 因為它實際上是引擎蓋下的 Safari。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
導出常量是 _ 鉻 =!測試(用戶 _ 代理)||(/克里奧斯/我)測試(用戶 _ 代理)。測試(用戶 _ 代理));

/**
 * 檢測到的 Google Chrome 版本 - 或 `null`。
 *
 * @靜止的
 * @常量
 * @type {number|null}
 */
導出常量 CHROME_VERSION = (函數() {
  const match = USER_AGENT.match(/(Chrome|CriOS)\\/(\\d+)/);

  如果(匹配 && 匹配[2]){
    返回 parseFloat(匹配[2]);
  }
  返回空值;
}());

/**
 * 檢測到的 Internet Explorer 版本 - 或“null”。
 *
 * @靜止的
 * @常量
 * @type {number|null}
 */
導出常量 IE_VERSION = (函數() {
  常量結果 = (/MSIE\\s(\\d+)\\.\\d/).exec(USER_AGENT);
  讓 version = result && parseFloat(result[1]);

  如果(!版本 &&(/三\ /7.0/i)。測試(用戶 _ 代理)&&(RV:11.0/)。測試(用戶 _ 代理)){
    // IE 11 與其他 IE 版本有不同的用戶代理字符串
    版本 = 11.0;
  }

  返回版本;
}());

/**
 * 這是否是桌面 Safari。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
導出常量是 _ 野生動物園 =(/野生動物園/I)。測試(用戶 _ 代理)&&!是 _ 鉻 &!是 _ 安卓 &&!是 _ 邊;

/**
 * 這是否是 Windows 機器。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
export const IS_WINDOWS = (/Windows/i).test(USER_AGENT);

/**
 * 此設備是否支持觸摸。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
export const TOUCH_ENABLED = Boolean(Dom.isReal() && (
  窗口中的“ontouchstart”||
  window.navigator.maxTouchPoints ||
  window.DocumentTouch && window.document instanceof window.DocumentTouch));

/**
 * 此設備是否為 iPad。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
導出常量 IS_IPAD = (/iPad/i).test(USER_AGENT) ||
  (是 _ 野生動物園 && 觸摸啟用 &&!(/iPhone/I). 測試 (使用者 _ 代理));

/**
 * 此設備是否為 iPhone。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
// Facebook 應用程序的 UIWebView 識別為 iPhone 和 iPad,所以
// 為了識別 iPhone,我們需要排除 iPad。
// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/
出口常量是 _ IPHONE =(/蘋果電話/我)。測試(用戶 _ 代理)&&!是 IPAD 的;

/**
 * 這是否是 iOS 設備。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
導出常量 IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;

/**
 * 這是否是任何風格的 Safari - 包括 iOS。
 *
 * @靜止的
 * @常量
 * @type {布爾}
 */
導出常量是 _ 任何野生動物園 = (野生動物園 || IS_IOS) &&!是鉻;