Merge pull request #70 from maurermax/develop

Extending regex when instantiating object
This commit is contained in:
Faisal Salman 2014-10-07 09:51:19 +07:00
commit 8d1791a88b
4 changed files with 48 additions and 6 deletions

View File

@ -32,7 +32,8 @@
"Leonardo <leofiore@libero.it>", "Leonardo <leofiore@libero.it>",
"Michael Hess <mhess@connectify.me>", "Michael Hess <mhess@connectify.me>",
"Ross Noble <rosshnoble@gmail.com>", "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", "main": "src/ua-parser.js",
"scripts": { "scripts": {

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 // Constructor
//////////////// ////////////////
var UAParser = function (uastring) { var UAParser = function (uastring, extensions) {
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY); var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
if (!(this instanceof UAParser)) { 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 () { this.getBrowser = function () {
return mapper.rgx.apply(this, regexes.browser); return mapper.rgx.apply(this, regexes.browser);
}; };
@ -648,6 +668,12 @@
this.setUA(ua); this.setUA(ua);
}; };
UAParser.NAME = NAME;
UAParser.VERSION = VERSION;
UAParser.VENDOR = VENDOR;
UAParser.TYPE = TYPE;
UAParser.ARCHITECTURE = ARCHITECTURE;
UAParser.MAJOR = MAJOR;
/////////// ///////////
// Export // 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()); 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) { for (var i in methods) {
describe(methods[i]['title'], function () { describe(methods[i]['title'], function () {
for (var j in methods[i]['list']) { for (var j in methods[i]['list']) {