113 lines
4.0 KiB
Java
113 lines
4.0 KiB
Java
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var _extends2 = require('babel-runtime/helpers/extends');
|
|
|
|
var _extends3 = _interopRequireDefault(_extends2);
|
|
|
|
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
|
|
|
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
// MIT License from https://github.com/kaimallea/isMobile
|
|
|
|
var applePhone = /iPhone/i;
|
|
var appleIpod = /iPod/i;
|
|
var appleTablet = /iPad/i;
|
|
var androidPhone = /\bAndroid(?:.+)Mobile\b/i; // Match 'Android' AND 'Mobile'
|
|
var androidTablet = /Android/i;
|
|
var amazonPhone = /\bAndroid(?:.+)SD4930UR\b/i;
|
|
var amazonTablet = /\bAndroid(?:.+)(?:KF[A-Z]{2,4})\b/i;
|
|
var windowsPhone = /Windows Phone/i;
|
|
var windowsTablet = /\bWindows(?:.+)ARM\b/i; // Match 'Windows' AND 'ARM'
|
|
var otherBlackberry = /BlackBerry/i;
|
|
var otherBlackberry10 = /BB10/i;
|
|
var otherOpera = /Opera Mini/i;
|
|
var otherChrome = /\b(CriOS|Chrome)(?:.+)Mobile/i;
|
|
var otherFirefox = /Mobile(?:.+)Firefox\b/i; // Match 'Mobile' AND 'Firefox'
|
|
|
|
function match(regex, userAgent) {
|
|
return regex.test(userAgent);
|
|
}
|
|
|
|
function isMobile(userAgent) {
|
|
var ua = userAgent || (typeof navigator !== 'undefined' ? navigator.userAgent : '');
|
|
|
|
// Facebook mobile app's integrated browser adds a bunch of strings that
|
|
// match everything. Strip it out if it exists.
|
|
var tmp = ua.split('[FBAN');
|
|
if (typeof tmp[1] !== 'undefined') {
|
|
var _tmp = tmp;
|
|
|
|
var _tmp2 = (0, _slicedToArray3['default'])(_tmp, 1);
|
|
|
|
ua = _tmp2[0];
|
|
}
|
|
|
|
// Twitter mobile app's integrated browser on iPad adds a "Twitter for
|
|
// iPhone" string. Same probably happens on other tablet platforms.
|
|
// This will confuse detection so strip it out if it exists.
|
|
tmp = ua.split('Twitter');
|
|
if (typeof tmp[1] !== 'undefined') {
|
|
var _tmp3 = tmp;
|
|
|
|
var _tmp4 = (0, _slicedToArray3['default'])(_tmp3, 1);
|
|
|
|
ua = _tmp4[0];
|
|
}
|
|
|
|
var result = {
|
|
apple: {
|
|
phone: match(applePhone, ua) && !match(windowsPhone, ua),
|
|
ipod: match(appleIpod, ua),
|
|
tablet: !match(applePhone, ua) && match(appleTablet, ua) && !match(windowsPhone, ua),
|
|
device: (match(applePhone, ua) || match(appleIpod, ua) || match(appleTablet, ua)) && !match(windowsPhone, ua)
|
|
},
|
|
amazon: {
|
|
phone: match(amazonPhone, ua),
|
|
tablet: !match(amazonPhone, ua) && match(amazonTablet, ua),
|
|
device: match(amazonPhone, ua) || match(amazonTablet, ua)
|
|
},
|
|
android: {
|
|
phone: !match(windowsPhone, ua) && match(amazonPhone, ua) || !match(windowsPhone, ua) && match(androidPhone, ua),
|
|
tablet: !match(windowsPhone, ua) && !match(amazonPhone, ua) && !match(androidPhone, ua) && (match(amazonTablet, ua) || match(androidTablet, ua)),
|
|
device: !match(windowsPhone, ua) && (match(amazonPhone, ua) || match(amazonTablet, ua) || match(androidPhone, ua) || match(androidTablet, ua)) || match(/\bokhttp\b/i, ua)
|
|
},
|
|
windows: {
|
|
phone: match(windowsPhone, ua),
|
|
tablet: match(windowsTablet, ua),
|
|
device: match(windowsPhone, ua) || match(windowsTablet, ua)
|
|
},
|
|
other: {
|
|
blackberry: match(otherBlackberry, ua),
|
|
blackberry10: match(otherBlackberry10, ua),
|
|
opera: match(otherOpera, ua),
|
|
firefox: match(otherFirefox, ua),
|
|
chrome: match(otherChrome, ua),
|
|
device: match(otherBlackberry, ua) || match(otherBlackberry10, ua) || match(otherOpera, ua) || match(otherFirefox, ua) || match(otherChrome, ua)
|
|
},
|
|
|
|
// Additional
|
|
any: null,
|
|
phone: null,
|
|
tablet: null
|
|
};
|
|
result.any = result.apple.device || result.android.device || result.windows.device || result.other.device;
|
|
|
|
// excludes 'other' devices and ipods, targeting touchscreen phones
|
|
result.phone = result.apple.phone || result.android.phone || result.windows.phone;
|
|
result.tablet = result.apple.tablet || result.android.tablet || result.windows.tablet;
|
|
|
|
return result;
|
|
}
|
|
|
|
var defaultResult = (0, _extends3['default'])({}, isMobile(), {
|
|
isMobile: isMobile
|
|
});
|
|
|
|
exports['default'] = defaultResult; |