mirror of
https://github.com/lancedikson/bowser
synced 2024-10-27 20:34:22 +00:00
Add OS parsing
This commit is contained in:
parent
c50d0449d3
commit
b057077b68
24
src/parser-os.js
Normal file
24
src/parser-os.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { getFirstMatch } from './utils';
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{
|
||||||
|
test: [/windows phone/i],
|
||||||
|
detect(ua) {
|
||||||
|
const version = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, ua);
|
||||||
|
return {
|
||||||
|
name: 'Windows Phone',
|
||||||
|
version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: [/macintosh/i],
|
||||||
|
detect(ua) {
|
||||||
|
const version = getFirstMatch(/mac os x (\d+([_\s]\d+)*)/i, ua).replace(/[_\s]/g, '.');
|
||||||
|
return {
|
||||||
|
name: 'macOS',
|
||||||
|
version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
@ -1,4 +1,5 @@
|
|||||||
import browsersList from './parser-browsers';
|
import browsersList from './parser-browsers';
|
||||||
|
import osList from './parser-os';
|
||||||
|
|
||||||
class Parser {
|
class Parser {
|
||||||
/**
|
/**
|
||||||
@ -95,9 +96,47 @@ class Parser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getPlatform(){}
|
getPlatform(){}
|
||||||
getOS(){}
|
|
||||||
parseOSName(){}
|
getOS() {
|
||||||
parseOSVersion(){}
|
if (this.parsedResult.os) {
|
||||||
|
return this.parsedResult.os;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._parseOS();
|
||||||
|
}
|
||||||
|
|
||||||
|
_parseOS() {
|
||||||
|
this.parsedResult.os = {};
|
||||||
|
|
||||||
|
const os = osList.find(_os => {
|
||||||
|
if (typeof _os.test === 'function') {
|
||||||
|
return _os.test(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_os.test instanceof Array) {
|
||||||
|
return _os.test.some((condition) => {
|
||||||
|
return this.test(condition);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error("Browser's test function is not valid");
|
||||||
|
});
|
||||||
|
|
||||||
|
if (os) {
|
||||||
|
this.parsedResult.os = os.detect(this.getUA());
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.parsedResult.os;
|
||||||
|
}
|
||||||
|
|
||||||
|
getOSName(){
|
||||||
|
return this.getOS().name;
|
||||||
|
}
|
||||||
|
|
||||||
|
getOSVersion(){
|
||||||
|
return this.getOS().version;
|
||||||
|
}
|
||||||
|
|
||||||
parseFullInfo(){}
|
parseFullInfo(){}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,3 +33,18 @@ test('getBrowserName', t => {
|
|||||||
test('getBrowserVersion', t => {
|
test('getBrowserVersion', t => {
|
||||||
t.is(parser.getBrowserVersion(), '43.0.2442.1165');
|
t.is(parser.getBrowserVersion(), '43.0.2442.1165');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('_parseOS', t => {
|
||||||
|
const spy = sinon.spy(parser, '_parseOS');
|
||||||
|
parser.getOS();
|
||||||
|
t.truthy(spy.called);
|
||||||
|
parser._parseOS.restore();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getOSName', t => {
|
||||||
|
t.is(parser.getOSName(), 'macOS');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getOSVersion', t => {
|
||||||
|
t.is(parser.getOSVersion(), '10.12.4');
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user