1
0
mirror of https://github.com/lancedikson/bowser synced 2024-10-27 20:34:22 +00:00

Add more OS descriptors

This commit is contained in:
Denis Demchenko 2017-05-18 23:56:26 +03:00
parent 59fc2d639f
commit 6b5974af2e
2 changed files with 105 additions and 2 deletions

View File

@ -1,4 +1,6 @@
import { getFirstMatch } from './utils'; import {
getFirstMatch
} from './utils';
function getWindowsVersionName(version) { function getWindowsVersionName(version) {
switch (version) { switch (version) {
@ -17,6 +19,7 @@ function getWindowsVersionName(version) {
} }
export default [ export default [
/* Windows Phone */
{ {
test: [/windows phone/i], test: [/windows phone/i],
describe(ua) { describe(ua) {
@ -27,6 +30,8 @@ export default [
} }
} }
}, },
/* Windows */
{ {
test: [/windows/i], test: [/windows/i],
describe(ua) { describe(ua) {
@ -40,6 +45,8 @@ export default [
}; };
} }
}, },
/* macOS */
{ {
test: [/macintosh/i], test: [/macintosh/i],
describe(ua) { describe(ua) {
@ -47,7 +54,89 @@ export default [
return { return {
name: 'macOS', name: 'macOS',
version version
};
} }
},
/* iOS */
{
test: [/(ipod|iphone|ipad)/i],
describe(ua) {
const version = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, ua).replace(/[_\s]/g, '.');
return {
name: 'iOS',
version
};
}
},
/* Android */
{
test(parser) {
const notLikeAndroid = !parser.test(/^((?!like android).)*$/i);
const butAndroid = parser.test(/android/i);
return notLikeAndroid && butAndroid;
},
describe(ua) {
const version = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i, ua);
return {
name: 'Android',
version
};
}
},
/* WebOS */
{
test: [/(web|hpw)os/i],
describe(ua) {
const version = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i, ua);
return {
name: 'WebOS',
version
};
}
},
/* BlackBerry */
{
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
describe(ua) {
const version = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, ua)
|| getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, ua)
|| getFirstMatch(/\bbb(\d+)/i, ua);
return {
name: 'BlackBerry',
version
};
}
},
/* Bada */
{
test: [/bada/i],
describe(ua) {
const version = getFirstMatch(/bada\/(\d+(\.\d+)*)/i, ua);
return {
name: 'Bada',
version
};
}
},
/* Tizen */
{
test: [/tizen/i],
describe(ua) {
const version = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i, ua);
return {
name: 'Tizen',
version
};
} }
} }
] ]

View File

@ -20,6 +20,20 @@ class Utils {
const match = ua.match(regexp); const match = ua.match(regexp);
return (match && match.length > 1 && match[2]) || ''; return (match && match.length > 1 && match[2]) || '';
} }
/**
* Match a regexp and return a constant or undefined
* @param {RegExp} regexp
* @param {String} ua
* @param {*} _const Any const that will be returned if regexp matches the string
* @return {*}
*/
static matchAndReturnConst(regexp, ua, _const) {
if (regexp.test(ua)) {
return _const;
}
return void(0);
}
} }
module.exports = Utils; module.exports = Utils;