extended to be able to pass in own regexes

This commit is contained in:
Max Maurer 2014-10-06 17:30:52 +02:00
parent 36de46956b
commit d4229ed33b
3 changed files with 46 additions and 5 deletions

View File

@ -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

File diff suppressed because one or more lines are too long

View File

@ -43,6 +43,15 @@ 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']) {