mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-09-27 07:58:45 +03:00
Merge pull request #70 from maurermax/develop
Extending regex when instantiating object
This commit is contained in:
commit
8d1791a88b
@ -32,7 +32,8 @@
|
||||
"Leonardo <leofiore@libero.it>",
|
||||
"Michael Hess <mhess@connectify.me>",
|
||||
"Ross Noble <rosshnoble@gmail.com>",
|
||||
"Sandro Sonntag <sandro.sonntag@adorsys.de>"
|
||||
"Sandro Sonntag <sandro.sonntag@adorsys.de>",
|
||||
"Max Maurer <max@max-maurer.de>"
|
||||
],
|
||||
"main": "src/ua-parser.js",
|
||||
"scripts": {
|
||||
|
@ -600,19 +600,39 @@
|
||||
]
|
||||
};
|
||||
|
||||
/**
|
||||
* Extends the regex array with another regex array from a given input array
|
||||
* @param {object} extensions extension objects that contains an array under the given paramName
|
||||
* @param {string} paramName key of the extensions object that should be used if given.
|
||||
*/
|
||||
function extend(extensions, paramName) {
|
||||
if (!extensions || !extensions[paramName] || extensions[paramName].length%2!==0) {
|
||||
return;
|
||||
}
|
||||
regexes[paramName] = regexes[paramName].concat(extensions[paramName]);
|
||||
}
|
||||
|
||||
|
||||
/////////////////
|
||||
// Constructor
|
||||
////////////////
|
||||
|
||||
|
||||
var UAParser = function (uastring) {
|
||||
var UAParser = function (uastring, extensions) {
|
||||
|
||||
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
||||
|
||||
if (!(this instanceof UAParser)) {
|
||||
return new UAParser(uastring).getResult();
|
||||
return new UAParser(uastring, extensions).getResult();
|
||||
}
|
||||
|
||||
// extend regexes
|
||||
extend(extensions, 'browser');
|
||||
extend(extensions, 'cpu');
|
||||
extend(extensions, 'device');
|
||||
extend(extensions, 'engine');
|
||||
extend(extensions, 'os');
|
||||
|
||||
this.getBrowser = function () {
|
||||
return mapper.rgx.apply(this, regexes.browser);
|
||||
};
|
||||
@ -648,6 +668,12 @@
|
||||
this.setUA(ua);
|
||||
};
|
||||
|
||||
UAParser.NAME = NAME;
|
||||
UAParser.VERSION = VERSION;
|
||||
UAParser.VENDOR = VENDOR;
|
||||
UAParser.TYPE = TYPE;
|
||||
UAParser.ARCHITECTURE = ARCHITECTURE;
|
||||
UAParser.MAJOR = MAJOR;
|
||||
|
||||
///////////
|
||||
// Export
|
||||
|
8
src/ua-parser.min.js
vendored
8
src/ua-parser.min.js
vendored
File diff suppressed because one or more lines are too long
13
test/test.js
13
test/test.js
@ -43,14 +43,23 @@ describe('UAParser()', function () {
|
||||
assert.deepEqual(UAParser(ua), new UAParser().setUA(ua).getResult());
|
||||
});
|
||||
|
||||
describe('Injected Browser', function () {
|
||||
var uaString = 'ownbrowser/1.3';
|
||||
var ownBrowser = [[/(ownbrowser)\/((\d+)?[\w\.]+)/i], [UAParser.NAME, UAParser.VERSION, UAParser.MAJOR]];
|
||||
var parser = new UAParser(uaString, {browser: ownBrowser});
|
||||
assert.equal(parser.getBrowser().name, 'ownbrowser');
|
||||
assert.equal(parser.getBrowser().major, '1');
|
||||
assert.equal(parser.getBrowser().version, '1.3');
|
||||
});
|
||||
|
||||
for (var i in methods) {
|
||||
describe(methods[i]['title'], function () {
|
||||
for (var j in methods[i]['list']) {
|
||||
if (!!methods[i]['list'][j].ua) {
|
||||
describe('[' + methods[i]['list'][j].desc + ']', function () {
|
||||
describe('"' + methods[i]['list'][j].ua + '"', function () {
|
||||
describe('"' + methods[i]['list'][j].ua + '"', function () {
|
||||
var expect = methods[i]['list'][j].expect;
|
||||
var result = parser.setUA(methods[i]['list'][j].ua).getResult()[methods[i]['label']];
|
||||
var result = parser.setUA(methods[i]['list'][j].ua).getResult()[methods[i]['label']];
|
||||
|
||||
methods[i]['properties'].forEach(function(m) {
|
||||
it('should return ' + methods[i]['label'] + ' ' + m + ': ' + expect[m], function () {
|
||||
|
Loading…
x
Reference in New Issue
Block a user