mirror of
https://github.com/lancedikson/bowser
synced 2024-10-27 20:34:22 +00:00
Add an engines parser
This commit is contained in:
parent
c3ad15e0ff
commit
a794b10797
@ -29,13 +29,6 @@ import {
|
||||
} from './utils';
|
||||
|
||||
const commonVersionIdentifier = /version\/(\d+(\.?_?\d+)+)/i;
|
||||
const RENDERING_ENGINES_NAMES = {
|
||||
blink: 'Blink',
|
||||
webkit: 'WebKit',
|
||||
gecko: 'Gecko',
|
||||
presto: 'Presto',
|
||||
edgehtml: 'EdgeHTML'
|
||||
};
|
||||
|
||||
const browsersList = [
|
||||
{
|
||||
@ -177,7 +170,6 @@ const browsersList = [
|
||||
|
||||
return {
|
||||
name: 'Microsoft Edge',
|
||||
engine: 'EdgeHTML',
|
||||
version
|
||||
}
|
||||
}
|
||||
@ -199,7 +191,6 @@ const browsersList = [
|
||||
const version = getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, ua);
|
||||
return {
|
||||
name: 'SeaMonkey',
|
||||
engine: RENDERING_ENGINES_NAMES.gecko,
|
||||
version
|
||||
}
|
||||
}
|
||||
@ -210,7 +201,6 @@ const browsersList = [
|
||||
const version = getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.?_?\d+)+)/i, ua);
|
||||
return {
|
||||
name: 'Firefox',
|
||||
engine: RENDERING_ENGINES_NAMES.gecko,
|
||||
version
|
||||
}
|
||||
}
|
||||
@ -317,16 +307,9 @@ const browsersList = [
|
||||
test: [/chrome|crios|crmo/i],
|
||||
describe(ua) {
|
||||
const version = getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, ua);
|
||||
let engine;
|
||||
if (/(apple)?webkit\/537\.36/i.test(ua)) {
|
||||
engine = RENDERING_ENGINES_NAMES.blink;
|
||||
} else {
|
||||
engine = RENDERING_ENGINES_NAMES.webkit;
|
||||
}
|
||||
|
||||
return {
|
||||
name: 'Chrome',
|
||||
engine,
|
||||
version
|
||||
}
|
||||
}
|
||||
@ -357,7 +340,6 @@ const browsersList = [
|
||||
|
||||
return {
|
||||
name: 'Safari',
|
||||
engine: RENDERING_ENGINES_NAMES.webkit,
|
||||
version
|
||||
}
|
||||
}
|
||||
|
110
src/parser-engines.js
Normal file
110
src/parser-engines.js
Normal file
@ -0,0 +1,110 @@
|
||||
import {
|
||||
getFirstMatch
|
||||
} from './utils';
|
||||
|
||||
/*
|
||||
* More specific goes first
|
||||
*/
|
||||
export default [
|
||||
/* EdgeHTML */
|
||||
{
|
||||
test(parser) {
|
||||
return parser.getBrowserName(true) === 'microsoft edge';
|
||||
},
|
||||
describe(ua) {
|
||||
const version = getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, ua);
|
||||
return {
|
||||
name: 'EdgeHTML',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
/* Trident */
|
||||
{
|
||||
test: [/trident/i],
|
||||
describe(ua) {
|
||||
const engine = {
|
||||
name: 'Trident'
|
||||
};
|
||||
|
||||
const version = getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, ua);
|
||||
|
||||
if (version) {
|
||||
engine.version = version;
|
||||
}
|
||||
|
||||
return engine;
|
||||
}
|
||||
},
|
||||
|
||||
/* Presto */
|
||||
{
|
||||
test(parser) {
|
||||
return parser.test(/presto/i);
|
||||
},
|
||||
describe(ua) {
|
||||
const engine = {
|
||||
name: 'Presto'
|
||||
};
|
||||
|
||||
const version = getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, ua);
|
||||
|
||||
if (version) {
|
||||
engine.version = version;
|
||||
}
|
||||
|
||||
return engine;
|
||||
}
|
||||
},
|
||||
|
||||
/* Gecko */
|
||||
{
|
||||
test(parser) {
|
||||
const isGecko = parser.test(/gecko/i);
|
||||
const likeGecko = parser.test(/like gecko/i);
|
||||
return isGecko && !likeGecko;
|
||||
},
|
||||
describe(ua) {
|
||||
const engine = {
|
||||
name: 'Gecko'
|
||||
};
|
||||
|
||||
const version = getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, ua);
|
||||
|
||||
if (version) {
|
||||
engine.version = version;
|
||||
}
|
||||
|
||||
return engine;
|
||||
}
|
||||
},
|
||||
|
||||
/* Blink */
|
||||
{
|
||||
test: [/(apple)?webkit\/537\.36/i],
|
||||
describe() {
|
||||
return {
|
||||
name: 'Blink'
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
/* WebKit */
|
||||
{
|
||||
test: [/(apple)?webkit/i],
|
||||
describe(ua) {
|
||||
const engine = {
|
||||
name: 'WebKit'
|
||||
};
|
||||
|
||||
const version = getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, ua);
|
||||
|
||||
if (version) {
|
||||
engine.version = version;
|
||||
}
|
||||
|
||||
return engine;
|
||||
}
|
||||
}
|
||||
];
|
@ -1,6 +1,7 @@
|
||||
import browserParsersList from './parser-browsers';
|
||||
import osParsersList from './parser-os';
|
||||
import platformParsersList from './parser-platforms';
|
||||
import enginesParsersList from './parser-engines';
|
||||
|
||||
class Parser {
|
||||
/**
|
||||
@ -87,7 +88,10 @@ class Parser {
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
getBrowserName() {
|
||||
getBrowserName(toLowerCase) {
|
||||
if (toLowerCase) {
|
||||
return String(this.getBrowser().name).toLowerCase();
|
||||
}
|
||||
return this.getBrowser().name;
|
||||
}
|
||||
|
||||
@ -214,6 +218,47 @@ class Parser {
|
||||
return this.parsedResult.platform;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get parsed engine
|
||||
* @return {{}}
|
||||
*/
|
||||
getEngine() {
|
||||
if (this.parsedResult.engine) {
|
||||
return this.parsedResult.engine;
|
||||
}
|
||||
|
||||
return this._parseEngine();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get parsed platform
|
||||
* @return {{}}
|
||||
* @private
|
||||
*/
|
||||
_parseEngine() {
|
||||
this.parsedResult.engine = {};
|
||||
|
||||
const engine = enginesParsersList.find(_engine => {
|
||||
if (typeof _engine.test === 'function') {
|
||||
return _engine.test(this);
|
||||
}
|
||||
|
||||
if (_engine.test instanceof Array) {
|
||||
return _engine.test.some((condition) => {
|
||||
return this.test(condition);
|
||||
});
|
||||
}
|
||||
|
||||
throw new Error("Browser's test function is not valid");
|
||||
});
|
||||
|
||||
if (engine) {
|
||||
this.parsedResult.engine = engine.describe(this.getUA());
|
||||
}
|
||||
|
||||
return this.parsedResult.engine;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse full information about the browser
|
||||
*/
|
||||
@ -221,6 +266,7 @@ class Parser {
|
||||
this._parseBrowser();
|
||||
this._parseOS();
|
||||
this._parsePlatform();
|
||||
this._parseEngine();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user