twreporter-react
Version:
React-Redux site for The Reporter Foundation in Taiwan
155 lines (128 loc) • 4.51 kB
JavaScript
;
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'];