'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = getBrowserInformation; var _bowser = require('bowser'); var _bowser2 = _interopRequireDefault(_bowser); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var prefixByBrowser = { chrome: 'Webkit', safari: 'Webkit', ios: 'Webkit', android: 'Webkit', phantom: 'Webkit', opera: 'Webkit', webos: 'Webkit', blackberry: 'Webkit', bada: 'Webkit', tizen: 'Webkit', chromium: 'Webkit', vivaldi: 'Webkit', firefox: 'Moz', seamoney: 'Moz', sailfish: 'Moz', msie: 'ms', msedge: 'ms' }; var browserByCanIuseAlias = { chrome: 'chrome', chromium: 'chrome', safari: 'safari', firfox: 'firefox', msedge: 'edge', opera: 'opera', vivaldi: 'opera', msie: 'ie' }; function getBrowserName(browserInfo) { if (browserInfo.firefox) { return 'firefox'; } if (browserInfo.mobile || browserInfo.tablet) { if (browserInfo.ios) { return 'ios_saf'; } else if (browserInfo.android) { return 'android'; } else if (browserInfo.opera) { return 'op_mini'; } } for (var browser in browserByCanIuseAlias) { if (browserInfo.hasOwnProperty(browser)) { return browserByCanIuseAlias[browser]; } } } /** * Uses bowser to get default browser browserInformation such as version and name * Evaluates bowser browserInfo and adds vendorPrefix browserInformation * @param {string} userAgent - userAgent that gets evaluated */ function getBrowserInformation(userAgent) { var browserInfo = _bowser2.default._detect(userAgent); if (browserInfo.yandexbrowser) { browserInfo = _bowser2.default._detect(userAgent.replace(/YaBrowser\/[0-9.]*/, '')); } for (var browser in prefixByBrowser) { if (browserInfo.hasOwnProperty(browser)) { var prefix = prefixByBrowser[browser]; browserInfo.jsPrefix = prefix; browserInfo.cssPrefix = '-' + prefix.toLowerCase() + '-'; break; } } browserInfo.browserName = getBrowserName(browserInfo); // For cordova IOS 8 the version is missing, set truncated osversion to prevent NaN if (browserInfo.version) { browserInfo.browserVersion = parseFloat(browserInfo.version); } else { browserInfo.browserVersion = parseInt(parseFloat(browserInfo.osversion), 10); } browserInfo.osVersion = parseFloat(browserInfo.osversion); // iOS forces all browsers to use Safari under the hood // as the Safari version seems to match the iOS version // we just explicitely use the osversion instead // https://github.com/rofrischmann/inline-style-prefixer/issues/72 if (browserInfo.browserName === 'ios_saf' && browserInfo.browserVersion > browserInfo.osVersion) { browserInfo.browserVersion = browserInfo.osVersion; } // seperate native android chrome // https://github.com/rofrischmann/inline-style-prefixer/issues/45 if (browserInfo.browserName === 'android' && browserInfo.chrome && browserInfo.browserVersion > 37) { browserInfo.browserName = 'and_chr'; } // For android < 4.4 we want to check the osversion // not the chrome version, see issue #26 // https://github.com/rofrischmann/inline-style-prefixer/issues/26 if (browserInfo.browserName === 'android' && browserInfo.osVersion < 5) { browserInfo.browserVersion = browserInfo.osVersion; } // Samsung browser are basically build on Chrome > 44 // https://github.com/rofrischmann/inline-style-prefixer/issues/102 if (browserInfo.browserName === 'android' && browserInfo.samsungBrowser) { browserInfo.browserName = 'and_chr'; browserInfo.browserVersion = 44; } return browserInfo; } module.exports = exports['default'];