UNPKG

handsontable

Version:

Handsontable is a JavaScript Spreadsheet Component available for React, Angular and Vue.

255 lines (211 loc) • 5.25 kB
"use strict"; exports.__esModule = true; exports.setBrowserMeta = setBrowserMeta; exports.setPlatformMeta = setPlatformMeta; exports.isChrome = isChrome; exports.isChromeWebKit = isChromeWebKit; exports.isFirefox = isFirefox; exports.isFirefoxWebKit = isFirefoxWebKit; exports.isSafari = isSafari; exports.isEdge = isEdge; exports.isEdgeWebKit = isEdgeWebKit; exports.isIE = isIE; exports.isIE9 = isIE9; exports.isMSBrowser = isMSBrowser; exports.isMobileBrowser = isMobileBrowser; exports.isIOS = isIOS; exports.isIpadOS = isIpadOS; exports.isWindowsOS = isWindowsOS; exports.isMacOS = isMacOS; exports.isLinuxOS = isLinuxOS; var _object = require("./object"); var tester = function tester(testerFunc) { var result = { value: false }; result.test = function (ua, vendor) { result.value = testerFunc(ua, vendor); }; return result; }; var browsers = { chrome: tester(function (ua, vendor) { return /Chrome/.test(ua) && /Google/.test(vendor); }), chromeWebKit: tester(function (ua) { return /CriOS/.test(ua); }), edge: tester(function (ua) { return /Edge/.test(ua); }), edgeWebKit: tester(function (ua) { return /EdgiOS/.test(ua); }), firefox: tester(function (ua) { return /Firefox/.test(ua); }), firefoxWebKit: tester(function (ua) { return /FxiOS/.test(ua); }), ie: tester(function (ua) { return /Trident/.test(ua); }), // eslint-disable-next-line no-restricted-globals ie9: tester(function () { return !!document.documentMode; }), mobile: tester(function (ua) { return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua); }), safari: tester(function (ua, vendor) { return /Safari/.test(ua) && /Apple Computer/.test(vendor); }) }; var platforms = { mac: tester(function (platform) { return /^Mac/.test(platform); }), win: tester(function (platform) { return /^Win/.test(platform); }), linux: tester(function (platform) { return /^Linux/.test(platform); }), ios: tester(function (ua) { return /iPhone|iPad|iPod/i.test(ua); }) }; /** * @param {object} [metaObject] The browser identity collection. * @param {object} [metaObject.userAgent] The user agent reported by browser. * @param {object} [metaObject.vendor] The vendor name reported by browser. */ function setBrowserMeta() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$userAgent = _ref.userAgent, userAgent = _ref$userAgent === void 0 ? navigator.userAgent : _ref$userAgent, _ref$vendor = _ref.vendor, vendor = _ref$vendor === void 0 ? navigator.vendor : _ref$vendor; (0, _object.objectEach)(browsers, function (_ref2) { var test = _ref2.test; return void test(userAgent, vendor); }); } /** * @param {object} [metaObject] The platform identity collection. * @param {object} [metaObject.platform] The platform ID. */ function setPlatformMeta() { var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref3$platform = _ref3.platform, platform = _ref3$platform === void 0 ? navigator.platform : _ref3$platform; (0, _object.objectEach)(platforms, function (_ref4) { var test = _ref4.test; return void test(platform); }); } setBrowserMeta(); setPlatformMeta(); /** * @returns {boolean} */ function isChrome() { return browsers.chrome.value; } /** * @returns {boolean} */ function isChromeWebKit() { return browsers.chromeWebKit.value; } /** * @returns {boolean} */ function isFirefox() { return browsers.firefox.value; } /** * @returns {boolean} */ function isFirefoxWebKit() { return browsers.firefoxWebKit.value; } /** * @returns {boolean} */ function isSafari() { return browsers.safari.value; } /** * @returns {boolean} */ function isEdge() { return browsers.edge.value; } /** * @returns {boolean} */ function isEdgeWebKit() { return browsers.edgeWebKit.value; } /** * @returns {boolean} */ function isIE() { return browsers.ie.value; } /** * @returns {boolean} */ function isIE9() { return browsers.ie9.value; } /** * @returns {boolean} */ function isMSBrowser() { return browsers.ie.value || browsers.edge.value; } /** * @returns {boolean} */ function isMobileBrowser() { return browsers.mobile.value; } /** * @returns {boolean} */ function isIOS() { return platforms.ios.value; } /** * A hacky way to recognize the iPad. Since iOS 13, the iPad on Safari mimics macOS behavior and user agent. * * @see {@https://stackoverflow.com/a/57838385} * @param {object} [metaObject] The browser identity collection. * @param {number} [metaObject.maxTouchPoints] The maximum number of simultanous touch points. * @returns {boolean} */ function isIpadOS() { var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : navigator, maxTouchPoints = _ref5.maxTouchPoints; return maxTouchPoints > 2 && platforms.mac.value; } /** * @returns {boolean} */ function isWindowsOS() { return platforms.win.value; } /** * @returns {boolean} */ function isMacOS() { return platforms.mac.value; } /** * @returns {boolean} */ function isLinuxOS() { return platforms.linux.value; }