/**
 * @파일 브라우저.js
 * @모듈 브라우저
 */
import * as Dom from './dom';
'글로벌/창'에서 창 가져오기;

const USER_AGENT = 창.내비게이터 && window.navigator.userAgent || '';
const webkitVersionMap = (/AppleWebKit\/([\d.]+)/i).exec(USER_AGENT);
const appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;

/**
 * 이 장치가 iPod인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
내보내기 const IS_IPOD = (/iPod/i).test(USER_AGENT);

/**
 * 감지된 iOS 버전 - 또는 `null`.
 *
 * @정적
 * @const
 * @type {문자열|널}
 */
내보내기 const IOS_VERSION = (함수() {
  const 일치 = USER_AGENT.match(/OS (\d+)_/i);

  만약 (일치 && 매치[1]) {
    반환 일치 [1];
  }
  null을 반환합니다.
}());

/**
 * Android 기기인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
내보내기 const IS_ANDROID = (/Android/i).test(USER_AGENT);

/**
 * 감지된 Android 버전 - 또는 `null`.
 *
 * @정적
 * @const
 * @type {숫자|문자열|null}
 */
내보내기 const ANDROID_VERSION = (함수() {
  // 이것은 Android Major.Minor.Patch 버전과 일치합니다.
  // ANDROID_VERSION은 숫자로 Major.Minor입니다. Minor가 없으면 Major만 반환됩니다.
  const 일치 = USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);

  if (!일치) {
    null을 반환합니다.
  }

  const major = 매치[1] && parseFloat(match[1]);
  const 마이너 = 매치[2] && parseFloat(match[2]);

  만약 (전공 && 미성년자) {
    return parseFloat(match[1] + '.' + match[2]);
  } 그렇지 않으면 (주요) {
    전공 반환;
  }
  null을 반환합니다.
}());

/**
 * 기본 Android 브라우저인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
수출 const IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkit버전 < 537;

/**
 * 이것이 Mozilla Firefox인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
내보내기 const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);

/**
 * 이것이 Microsoft Edge인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
내보내기 const IS_EDGE = (/Edg/i).test(USER_AGENT);

/**
 * Google 크롬인지 여부.
 *
 * 이는 iOS의 Chrome에서도 'true'이며 다른 지원이 제공됩니다.
 * 후드 아래에는 실제로 Safari가 있습니다.
 *
 * @정적
 * @const
 * @type {부울}
 */
내보내기 const IS_CHROME = !IS_EDGE && ((/Chrome/i).test(USER_AGENT) || (/CriOS/i).test(USER_AGENT));

/**
 * 감지된 Google 크롬 버전 - 또는 `null`.
 *
 * @정적
 * @const
 * @type {숫자|null}
 */
내보내기 const CHROME_VERSION = (함수() {
  const match = USER_AGENT.match(/(Chrome|CriOS)\/(\d+)/);

  만약 (일치 && 매치[2]) {
    return parseFloat(match[2]);
  }
  null을 반환합니다.
}());

/**
 * 감지된 Internet Explorer 버전 - 또는 `null`.
 *
 * @정적
 * @const
 * @type {숫자|null}
 */
내보내기 const IE_VERSION = (함수() {
  const result = (/MSIE\s(\d+)\.\d/).exec(USER_AGENT);
  let 버전 = 결과 && parseFloat(result[1]);

  if (! 버전 && (/Trident\/7.0/i).test(USER_AGENT) && (/rv:11.0/).테스트(USER_AGENT)) {
    // IE 11에는 다른 IE 버전과 다른 사용자 에이전트 문자열이 있습니다.
    버전 = 11.0;
  }

  반환 버전;
}());

/**
 * 이것이 데스크탑 Safari인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
내보내기 const IS_SAFARI = (/Safari/i).test(USER_AGENT) && !IS_CHROME && !IS_ANDROID && !IS_EDGE;

/**
 * 이것이 Windows 시스템인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
내보내기 const IS_WINDOWS = (/Windows/i).test(USER_AGENT);

/**
 * 이 장치가 터치 가능한지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
내보내기 const TOUCH_ENABLED = Boolean(Dom.isReal() && (
  창에 'ontouchstart' ||
  window.navigator.maxTouchPoints ||
  window.DocumentTouch && window.document instanceof window.DocumentTouch));

/**
 * 이 장치가 iPad인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
내보내기 const IS_IPAD = (/iPad/i).test(USER_AGENT) ||
  (IS_사파리 && TOUCH_ENABLED && !(/iPhone/i).test(USER_AGENT));

/**
 * 이 장치가 iPhone인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
// Facebook 앱의 UIWebView는 iPhone과 iPad로 식별되므로
// iPhone을 식별하려면 iPad를 제외해야 합니다.
// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/
내보내기 const IS_IPHONE = (/iPhone/i).test(USER_AGENT) && !IS_IPAD;

/**
 * iOS 기기인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
수출 const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;

/**
 * 이것이 iOS를 포함한 Safari의 풍미인지 여부.
 *
 * @정적
 * @const
 * @type {부울}
 */
수출 const IS_ANY_SAFARI = (IS_SAFARI || IS_IOS) && !IS_CHROME;