UNPKG

twreporter-react

Version:

React-Redux site for The Reporter Foundation in Taiwan

155 lines (128 loc) 4.51 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']] }; /** * Returns an object containing prefix data associated with a browser * @param {string} browser - browser to find a prefix for */ var getPrefixes = function getPrefixes(browser) { var prefixKeys = undefined; var prefix = undefined; var vendors = undefined; var conditions = undefined; var prefixVendor = undefined; var browserVendors = undefined; // Find the prefix for this browser (if any) prefixKeys = Object.keys(vendorPrefixes); for (var i = 0; i < prefixKeys.length; i++) { prefix = prefixKeys[i]; // Find a matching vendor vendors = vendorPrefixes[prefix]; conditions = browsers[browser]; for (var j = 0; j < vendors.length; j++) { prefixVendor = vendors[j]; for (var k = 0; k < conditions.length; k++) { browserVendors = conditions[k]; if (browserVendors.indexOf(prefixVendor) !== -1) { return { inline: prefix, css: '-' + prefix.toLowerCase() + '-' }; } } } } // No prefix found for this browser return { inline: '', css: '' }; }; /** * 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 = {}; // Special user agent, return all supported prefixes // instead of returning a string browser name and a prefix object // we return an array of browser names and map of prefixes for each browser if (userAgent === '*') { // Return an array of supported browsers info.browsers = Object.keys(browsers); // Return prefixes associated by browser info.prefixes = {}; // Iterate browser list, assign prefix to each info.browsers.forEach(function (browser) { info.prefixes[browser] = getPrefixes(browser); }); return info; } // Normal user agent, detect browser 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'];