UNPKG

kitchensink

Version:

Dispatch's awesome components and style guide

93 lines (78 loc) 2.8 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _bowser = require('bowser'); var _bowser2 = _interopRequireDefault(_bowser); var vendorPrefixes = { Webkit: ['chrome', 'safari', 'ios', 'android', 'phantom', 'opera', 'webos', 'blackberry', 'bada', 'tizen'], Moz: ['firefox', 'seamonkey', 'sailfish'], ms: ['msie', 'msedge'] }; var browsers = { chrome: [['chrome']], safari: [['safari']], firefox: [['firefox']], ie: [['msie']], edge: [['msedge']], opera: [['opera']], ios_saf: [['ios', 'mobile'], ['ios', 'tablet']], ie_mob: [['windowsphone', 'mobile', 'msie'], ['windowsphone', 'tablet', 'msie'], ['windowsphone', 'mobile', 'msedge'], ['windowsphone', 'tablet', 'msedge']], op_mini: [['opera', 'mobile'], ['opera', 'tablet']], and_uc: [['android', 'mobile'], ['android', 'tablet']], android: [['android', 'mobile'], ['android', 'tablet']] }; /** * Uses bowser to get default browser information such as version and name * Evaluates bowser info and adds vendorPrefix information * @param {string} userAgent - userAgent that gets evaluated */ exports['default'] = function (userAgent) { if (!userAgent) { return false; } var info = _bowser2['default']._detect(userAgent); Object.keys(vendorPrefixes).forEach(function (prefix) { vendorPrefixes[prefix].forEach(function (browser) { if (info[browser]) { info.prefix = { inline: prefix, css: '-' + prefix.toLowerCase() + '-' }; } }); }); var name = ''; Object.keys(browsers).forEach(function (browser) { browsers[browser].forEach(function (condition) { var match = 0; condition.forEach(function (single) { if (info[single]) { match += 1; } }); if (condition.length === match) { name = browser; } }); }); info.browser = name; // For cordova IOS 8 the version is missing, set truncated osversion to prevent NaN info.version = info.version ? parseFloat(info.version) : parseInt(parseFloat(info.osversion), 10); // seperate native android chrome // https://github.com/rofrischmann/inline-style-prefixer/issues/45 if (info.browser === 'android' && info.chrome && info.version > 37) { info.browser = 'and_chr'; } info.version = parseFloat(info.version); info.osversion = parseFloat(info.osversion); // 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 (info.browser === 'android' && info.osversion < 5) { info.version = info.osversion; } return info; }; module.exports = exports['default'];