Compare commits

..

38 Commits
v0.1 ... v0.3.2

Author SHA1 Message Date
Faisal Salman
eaacb14ef2 Modify mapper 2012-09-13 21:22:00 +07:00
Faisalman
7704570581 Add getUA(), improve regxMap(), add Silk browser, add more older versions of Windows, etc 2012-09-13 18:39:12 +07:00
Faisal Salman
9bb8bdb1b0 Add repository to package.json 2012-09-11 03:02:31 +07:00
Faisal Salman
1f21d35ab8 Restore UAParser 2012-08-04 05:14:17 +07:00
Faisalman
d3668b9c2f Update versioning manually 2012-07-30 07:37:20 +07:00
Faisalman
a243a6a7c3 Make undefined undefined & Add Tizen, Haiku, MeeGo, Nokia 2012-07-30 07:30:43 +07:00
Faisalman
9a9844180d Remove duplicated 2012-07-29 04:20:25 +07:00
Faisalman
a84fb2f93a npm revised package.json 2012-07-29 04:14:52 +07:00
Faisalman
9bc93dc058 Remove duplicated 2012-07-29 02:25:52 +07:00
Faisalman
3d60909f30 Fix conflict with changes 2012-07-28 17:38:21 +07:00
Faisalman
8cb5b173fe Adapt js to be compatible with Node.js as module 2012-07-28 17:28:43 +07:00
Faisalman
faefb6fbb7 Added new browser: Chrome for iOS 2012-07-19 23:14:41 +07:00
Faisalman
5e4d686e3e Tag v0.2.1 2012-07-19 22:45:55 +07:00
Faisalman
f1065dc4f8 Added some devices: Asus, Acer, Dell, Nexus, ZTE 2012-07-19 05:52:11 +07:00
Faisalman
42c16b2fc9 Added new parser type: device 2012-04-01 22:32:01 +07:00
Faisalman
e7500dca9d Tagged as version 0.1.2 2012-03-31 17:28:39 +07:00
Faisalman
7cba4e0eca Fixed readme 2012-03-31 17:15:50 +07:00
Faisalman
294b4e6d58 Added setUA() method and result object 2012-03-31 16:50:43 +07:00
Faisalman
0276dd0c49 Changed property name browser.release to browser.major 2012-03-20 16:36:51 +07:00
Faisalman
8ba7e75476 Make variable name less cryptic 2012-03-20 16:20:50 +07:00
Faisalman
4a6470b707 Moved windows version mapper function inside mapper object 2012-03-20 15:31:05 +07:00
Faisalman
b918d9638f Add Ubuntu & SUSE family 2012-03-08 20:15:15 +07:00
Faisalman
32802fcdc4 Move Macintosh to bottom 2012-03-08 19:38:59 +07:00
Faisalman
adbd257ec2 Fix commas & Add Zenwalk linux 2012-03-08 19:27:09 +07:00
Faisalman
f193e7e443 Add Macintosh, Playstation, Chrome for Android, SlimBrowser, K-Meleon, IceCat, IceApe, SwiftFox, Dillo, iCab 2012-03-08 19:05:43 +07:00
Faisalman
deac566e8c Refine some text in readme.md 2012-03-07 22:31:50 +07:00
Faisalman
675b60ebe1 Add package.json 2012-03-07 21:54:39 +07:00
Faisalman
55b697fd56 Fix Mac OS name & version 2012-03-05 21:56:10 +07:00
Faisalman
1c425c1de9 Add Bada, RIM Tablet OS, Windows Phone OS 2012-03-05 21:33:28 +07:00
Faisalman
7182be9f3f Add BeOS to OS list 2012-03-05 21:01:45 +07:00
Faisalman
43de9b8127 Check for Presto before Webkit 2012-03-05 20:54:09 +07:00
Faisalman
4ef8a75d7d Space char required before Windows version 2012-03-05 20:22:33 +07:00
Faisalman
8718f3bbdf Fix variable reference 2012-03-05 20:02:00 +07:00
Faisalman
d3e99f95b3 Convert version string to lowercase 2012-03-05 19:40:29 +07:00
Faisalman
145334a963 Accept custom ua string input while construct 2012-03-05 19:01:49 +07:00
Faisal Salman
00720c08d7 Fix html markdown formatting in readme.md 2012-03-04 15:49:47 +07:00
Faisalman
711ec77820 Move file to top directory 2012-03-03 16:29:56 +07:00
Faisalman
8e9f7eaccb Renamingsniff to ua-parser 2012-03-03 16:17:45 +07:00
4 changed files with 365 additions and 179 deletions

51
package.json Normal file
View File

@@ -0,0 +1,51 @@
{
"title": "UA-Parser.js",
"name": "ua-parser-js",
"version": "0.3.2",
"author": "Faisal Salman <fyzlman@gmail.com> (http://faisalman.com)",
"description": "Lightweight JavaScript-based user-agent string parser",
"keywords": [
"user agent",
"parser",
"browser",
"engine",
"os",
"device"
],
"homepage": "http://github.com/faisalman/ua-parser-js",
"contributors": [
"Faisal Salman <fyzlman@gmail.com>"
],
"main": "ua-parser",
"repositories": [
{
"type": "git",
"url": "https://github.com/faisalman/ua-parser-js.git"
}
],
"repository" :
{
"type": "git",
"url": "https://github.com/faisalman/ua-parser-js.git"
},
"licenses": [
{
"type": "GPLv2",
"url": "http://www.gnu.org/licenses/gpl-2.0.html"
},
{
"type": "MIT",
"url": "http://www.opensource.org/licenses/mit-license.php"
}
],
"engines": {
"node": "*"
},
"directories": {
"lib": "."
},
"files": [
""
],
"repository": "git://github.com/faisalman/ua-parser-js.git"
}

View File

@@ -1,36 +1,89 @@
# Sniff-js # UA-Parser.js
Small script to extract detailed system data based on user-agent string Light-weight JavaScript-based all-in-one user-agent parser
* Author : Faisalman <<fyzlman@gmail.com>> * Author : Faisalman <<fyzlman@gmail.com>>
* Source : http://github.com/faisalman/sniff-js * Home : http://faisalman.github.com/ua-parser-js
* License : GPL2 * Source : https://github.com/faisalman/ua-parser-js
* License : GPLv2 & MIT
## Features ## Features
Get detailed type and version of web browser, layout engine, and operating system. Get detailed type and version of web browser, layout engine, operating system, and device.
## Methods
* `getBrowser([uastring])`
* `getDevice([uastring])`
* `getEngine([uastring])`
* `getOS([uastring])`
* `setUA(uastring)`
## Properties
* `result`
## Example ## Example
```html ```html
<script type="text/javascript" src="sniff.js"></script> <script type="text/javascript" src="ua-parser.js"></script>
<script type="text/javascript"> <script type="text/javascript">
```
```js var parser = new UAParser();
var s = new sniff();
var browser = s.getBrowser(); // by default it takes ua string from current browser's window.navigator
console.log(browser); // will print object contains current browser info console.log(parser.result);
/*
/// this will print an object structured like this:
{
browser: {
name: "",
version: "",
major: ""
},
engine: {
name: "",
version: ""
},
os: {
name: "",
version: ""
},
device: {
name: "",
version: ""
}
}
*/
// testing custom user-agent string // let's test a custom user-agent string as an example
s.ua = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.106 Chrome/15.0.874.106 Safari/535.2"; var uastr = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.106 Chrome/15.0.874.106 Safari/535.2";
browser = s.getBrowser(); parser.setUA(uastr);
console.log(browser.name); // will print "Chromium"
console.log(s.getOS()); // will print object {name: "Ubuntu", version: "11.10"} console.log(parser.result.browser); // {name: "Chromium", major: "15", version: "15.0.874.106"}
``` console.log(parser.result.engine); // {name: "AppleWebKit", version: "535.2"}
```html console.log(parser.result.os); // {name: "Ubuntu", version: "11.10"}
// let's take another test please
console.log(parser.setUA("Mozilla/5.0 (compatible; Konqueror/4.1; OpenBSD) KHTML/4.1.4 (like Gecko)").getOS().name); // "OpenBSD"
</script> </script>
``` ```
## Using node.js
```js
var UAParser = require('ua-parser');
var parser = new UAParser();
var ua1 = 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.11 (KHTML, like Gecko) Version/7.1.0.7 Safari/534.11';
var ua2 = 'Midori/0.2 (X11; Linux; U; cs-cz) WebKit/531.2+';
parser.setUA(ua1).getDevice().name; // "PlayBook"
parser.getOS() // {name: "RIM Tablet OS", version: "1.0.0"}
parser.getOS(ua2) // {name: "Linux", version: undefined}
parser.getOS() // {name: "RIM Tablet OS", version: "1.0.0"}
parser.getEngine().name; // "AppleWebKit"
```
## License ## License
Copyright © 2012 Faisalman <<fyzlman@gmail.com>> Copyright © 2012 Faisalman <<fyzlman@gmail.com>>
@@ -43,4 +96,4 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.

View File

@@ -1,159 +0,0 @@
/**
* Sniff-js v0.1
* Small script to extract detailed system data based on user-agent string
* http://github.com/faisalman/sniff-js
*
* Copyright © 2012 Faisalman <fyzlman@gmail.com>
* Licensed under GPL2 http://www.gnu.org/licenses/gpl-2.0.html
*/
function sniff(){
// regexp mapper
var regxMap = function(ua){
var i, j;
for(j = 1; j < arguments.length; j += 2){
var rx = arguments[j],
asc = arguments[j+1],
k, l, m, n, o, p;
for(l = 0; l < rx.length; l++){
m = rx[l].exec(ua);
//console.log(m);
if(!!m){
k = {};
o = 1;
for(n = 0; n < asc.length; n++){
if(typeof asc[n] === 'object' && asc[n].length === 2){
k[asc[n][0]] = asc[n][1];
o -= 1;
} else if(typeof asc[n] === 'object' && asc[n].length === 3){
k[asc[n][0]] = (!!m[n+o]) ? m[n+o].replace(asc[n][1], asc[n][2]) : 'unknown';
} else {
k[asc[n]] = (!!m[n+o]) ? m[n+o] : 'unknown';
}
};
i = k;
p = true;
break;
}
};
if(!p){
k = {};
for(l in asc){
if(asc.hasOwnProperty(l)){
k[asc[l]] = 'unknown';
}
};
i = k;
}
if(p) break;
};
return i;
};
var winMap = function(){
switch(arguments[1]){
case 'nt 5.0':
return '2000';
case 'nt 5.1':
case 'nt 5.2':
return 'XP';
case 'nt 6.0':
return 'Vista';
case 'nt 6.1':
return '7';
case 'nt 6.2':
return '8';
default:
return arguments[1];
};
};
this.ua = window.navigator.userAgent;
this.getBrowser = function(){
return regxMap(this.ua, [
// Mixed
/(kindle)\/((\d+)?[\w\.]+)/i, // Kindle
/(lunascape|maxthon|netfront|jasmine)[\/\s]?((\d+)?[\w\.]+)/i, // Lunascape/Maxthon/Netfront/Jasmine
// Presto based
/(opera\smini)\/((\d+)?[\w\.-]+)/i, // Opera Mini
/(opera\smobi)\/((\d+)?[\w\.-]+)/i, // Opera Mobile
/(opera).*\/((\d+)?[\w\.]+)/i, // Opera
// Trident based
/(avant\sbrowser|iemobile)[\/\s]?((\d+)?[\w\.]+)/i, // Avant/IEMobile
/ms(ie)\s((\d+)?[\w\.]+)/i, // Internet Explorer
// Webkit/KHTML based
/(chromium|flock|rockmelt|midori|epiphany)\/((\d+)?[\w\.]+)/i, // Chromium/Flock/RockMelt/Midori/Epiphany
/(chrome|omniweb|arora|dolfin)\/((\d+)?[\w\.]+)/i, // Chrome/OmniWeb/Arora/Dolphin
/(mobile\ssafari|safari|konqueror)\/((\d+)?[\w\.]+)/i, // Safari/Konqueror
/(applewebkit|khtml)\/((\d+)?[\w\.]+)/i,
// Gecko based
/(iceweasel|camino|fennec|maemo|minimo)[\/\s]?((\d+)?[\w\.\+]+)/i, // Iceweasel/Camino/Fennec/Maemo/Minimo
/(firefox|seamonkey|netscape|navigator)\/((\d+)?[\w\.]+)/i, // Firefox/SeaMonkey/Netscape
/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla
// Other
/(lynx)\/?((\d+)?[\w\.]+)/i, // Lynx
], ['name', 'release', 'version']);
};
this.getEngine = function(){
return regxMap(this.ua, [
/(presto|[aple]*webkit|trident)\/([\w\.]+)/i, // Presto/Webkit/Trident
/(khtml)\/([\w\.]+)/i // KHTML
], ['name', 'version'], [
/rv\:([\w\.]+).*(gecko)/i // Gecko
], ['version', 'name']);
};
this.getOS = function(){
return regxMap(this.ua, [
// Windows based
/(windows)\s?([\w\.\s]+)*/i, // Windows
], ['name', ['version', /(nt\s[\d\.]+)/gi, this.winMap]], [
// Mobile/Embedded OS
/(blackberry).+version\/([\w\.]+)/i, // Blackberry
/(android|symbianos|symbos|webos|palm\os|qnx)[\/\s]?([\w\.]+)*/i, // Android/Symbian/WebOS/Palm/QNX
/(nintendo)\s([wids]+)/i, // Nintendo Wii/DS
// GNU/Linux based
/(mint)[\s\(]?(\w+)*/i, // Mint
/(joli|ubuntu|debian|suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat)[\/\s]?([\w\.-]+)*/i,
// Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
// Fedora/Mandriva/CentOS/PCLinuxOS/RedHat
/(gnu|linux)\s?([\w\.]+)*/i // Other GNU/Linux
], ['name', 'version'], [
/cros\s([\w\.\s]+)/i // Chromium OS
], [['name', 'Chromium OS'], 'version'],[
/sunos\s?([\w\.\s]+)*/i // Solaris
], [['name', 'Solaris'], 'version'], [
// BSD based
/\s(\w*bsd|dragonfly)\s?([\w\.]+)*/i, // FreeBSD/NetBSD/OpenBSD/DragonFly
], ['name', 'version'],[
/(ip[honead]+).*os\s*([\w]+)*\slike\smac/i // iOS
], [['name', /.+/g, 'iOS'], ['version', /_/g, '.']], [
/(mac)\s([\w\s\.]+)/i, // Mac
// Other
/(unix|minix)[\/\s]?()*/i
], ['name', 'version']);
};
};

241
ua-parser.js Normal file
View File

@@ -0,0 +1,241 @@
// UA-Parser.js v0.3.2
// Lightweight JavaScript-based User-Agent string parser
// https://github.com/faisalman/ua-parser-js
//
// Copyright © 2012 Faisalman
// Dual licensed under GPLv2 & MIT
(function (undefined) {
var parser = function UAParser (uastring) {
var ua = uastring || (typeof window !== 'undefined' ? window.navigator.userAgent : "");
// regexp mapper
var regxMap = function (ua) {
var result = {}, i, j, k, l;
for (i = 1; i < arguments.length; i += 2) {
var regex = arguments[i], // odd sequence (2,4,6,..)
props = arguments[i + 1]; // even sequence (3,5,7,..)
for (k = 0; k < props.length; k++) {
if (typeof props[k] == 'object') {
result[props[k][0]] = undefined;
} else {
result[props[k]] = undefined;
}
}
for (j = 0; j < regex.length; j++) {
var match = regex[j].exec(ua);
if (!!match) {
l = 1;
for (k = 0; k < props.length; k++) {
if (typeof props[k] === 'object' && props[k].length === 2) {
result[props[k][0]] = props[k][1];
l -= 1;
} else if (typeof props[k] === 'object' && props[k].length === 3) {
result[props[k][0]] = (!!match[k + l]) ? match[k + l].replace(props[k][1], props[k][2]) : undefined;
} else {
result[props[k]] = (!!match[k + l]) ? match[k + l] : undefined;
}
}
break;
}
}
if(!!l) break; // break the loop if match found
}
return result;
};
var mapper = {
check: function(str, map){
for (var i = 0; i < map.length; i++) {
if (str.toLowerCase().indexOf(map[i][0]) !== -1) {
return map[i][1];
}
}
return str;
},
os : {
win: function (match, str1) {
var map = [
['4.90', 'ME'],
['nt3.51', 'NT 3.11'],
['nt4.0', 'NT 4.0'],
['nt 5.0', '2000'],
['nt 5.1', 'XP'],
['nt 5.2', 'XP'],
['nt 6.0', 'Vista'],
['nt 6.1', '7'],
['nt 6.2', '8'],
];
return mapper.check(str1, map);
}
}
};
this.getBrowser = function (uastring) {
return regxMap(uastring || ua, [
// Mixed
/(kindle)\/((\d+)?[\w\.]+)/i, // Kindle
/(lunascape|maxthon|netfront|jasmine)[\/\s]?((\d+)?[\w\.]+)/i, // Lunascape/Maxthon/Netfront/Jasmine
// Presto based
/(opera\smini)\/((\d+)?[\w\.-]+)/i, // Opera Mini
/(opera\smobi)\/((\d+)?[\w\.-]+)/i, // Opera Mobile
/(opera).*\/((\d+)?[\w\.]+)/i, // Opera
// Trident based
/(avant\sbrowser|iemobile|slimbrowser)[\/\s]?((\d+)?[\w\.]*)/i, // Avant/IEMobile/SlimBrowser
/ms(ie)\s((\d+)?[\w\.]+)/i, // Internet Explorer
// Webkit/KHTML based
/(chromium|flock|rockmelt|midori|epiphany|silk)\/((\d+)?[\w\.]+)/i, // Chromium/Flock/RockMelt/Midori/Epiphany
/(chrome|omniweb|arora|dolfin|[tizenaok]{5}\s?browser)\/((\d+)?[\w\.]+)/i,
// Chrome/OmniWeb/Arora/Dolphin/Tizen/Nokia
], ['name', 'version', 'major'], [
/(?:android.+crmo|crios)\/((\d+)?[\w\.]+)/i, // Chrome for Android/iOS
], [['name', 'Chrome'], 'version', 'major'], [
/(mobile\ssafari|safari|konqueror)\/((\d+)?[\w\.]+)/i, // Safari/Konqueror
/(applewebkit|khtml)\/((\d+)?[\w\.]+)/i,
// Gecko based
/(iceweasel|camino|fennec|maemo\sbrowser|minimo)[\/\s]?((\d+)?[\w\.\+]+)/i,
// Iceweasel/Camino/Fennec/Maemo/Minimo
/(firefox|seamonkey|netscape|navigator|k-meleon|icecat|iceape)\/((\d+)?[\w\.]+)/i,
// Firefox/SeaMonkey/Netscape/K-Meleon/IceCat/IceApe
/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla
// Other
/(lynx|dillo|icab)[\/\s]?((\d+)?[\w\.]+)/i, // Lynx/Dillo/iCab
], ['name', 'version', 'major']);
};
this.getEngine = function (uastring) {
return regxMap(uastring || ua, [
/(presto)\/([\w\.]+)/i, // Presto
/([aple]*webkit|trident)\/([\w\.]+)/i, // Webkit/Trident
/(khtml)\/([\w\.]+)/i // KHTML
], ['name', 'version'], [
/rv\:([\w\.]+).*(gecko)/i // Gecko
], ['version', 'name']);
};
this.getOS = function (uastring) {
return regxMap(uastring || ua, [
// Windows based
/(windows\sphone\sos|windows)\s?([nt\d\.\s]+\d)/i // Windows
], ['name', ['version', /(.+)/gi, mapper.os.win]], [
/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
], [['name', 'Windows'], ['version', /(.+)/gi, mapper.os.win]], [
// Mobile/Embedded OS
/(blackberry).+version\/([\w\.]+)/i, // Blackberry
/(tizen)\/([\w\.]+)/i, // Tizen
/(android|symbianos|symbos|webos|palm\os|qnx|bada|rim\stablet\sos|meego)[\/\s-]?([\w\.]+)*/i,
// Android/Symbian/WebOS/Palm/QNX/Bada/RIM/MeeGo
/(nintendo|playstation)\s([wids3portable]+)/i, // Nintendo/Playstation
// GNU/Linux based
/(mint)[\/\s\(]?(\w+)*/i, // Mint
/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk)[\/\s-]?([\w\.-]+)*/i,
// Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
// Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk
/(gnu|linux)\s?([\w\.]+)*/i // Other GNU/Linux
], ['name', 'version'], [
/cros\s([\w\.\s]+\d)/i // Chromium OS
], [['name', 'Chromium OS'], 'version'],[
// Solaris
/sunos\s?([\w\.\s]+\d)*/i // Solaris
], [['name', 'Solaris'], 'version'], [
// BSD based
/\s(\w*bsd|dragonfly)\s?([\w\.]+)*/i, // FreeBSD/NetBSD/OpenBSD/DragonFly
], ['name', 'version'],[
/(ip[honead]+).*os\s*([\w]+)*\slike\smac/i // iOS
], [['name', /.+/g, 'iOS'], ['version', /_/g, '.']], [
/(mac\sos\sx)\s([\w\s\.]+\w)/i, // Mac OS
], ['name', ['version', /_/g, '.']], [
// Other
/(haiku)\s(\w+)/i, // Haiku
/(macintosh|unix|minix|beos)[\/\s]?()*/i // UNIX/Minix/BeOS
], ['name', 'version']);
};
this.getDevice = function (uastring) {
return regxMap(uastring || ua, [
/\((ip[honead]+|playbook);/i, // iPod/iPhone/iPad/PlayBook
/(blackberry)[\s-]?(\w+)/i, // BlackBerry
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|nexus|zte)[\s_-]?([\w-]+)*/i,
// BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Nexus/ZTE
/(hp)\s([\w\s]+\w)/i, // HP iPAQ
/(hp).+(touchpad)/i, // HP TouchPad
/(kindle)\/([\w\.]+)/i, // Kindle
/(lg)[e;\s-]+(\w+)*/i, // LG
/(nintendo|playstation)\s([wids3portable]+)/i // Nintendo/Playstation
], ['name', 'version'], [
/(htc)[;_\s-]+([\w\s]+(?=\))|[\w]+)*/i, // HTC
/(zte)-([\w]+)*/i
], ['name', ['version', /_/g, ' ']], [
/\s(milestone|mz601|droid[2x]?|xoom)[globa\s]*\sbuild\//i, // Motorola
/mot[\s-]?(\w+)*/i
], [['name', 'Motorola'], 'version'], [
/(s[cgp]h-\w+|gt-\w+|galaxy\snexus)/i, // Samsung
/sam[sung]*[\s-]*(\w+-?[\w-]*)*/i,
/sec-(sgh\w+)/i
], [['name', 'Samsung'], 'version'], [
/(transfo[prime\s]{4,10}\s\w+|(?:android).*eeepc)/i // Asus
], [['name', 'Asus'], 'version'], [
/sie-(\w+)*/i // Siemens
], [['name', 'Siemens'], 'version'], [
/(?=maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia
/nokia[\s_-]?([\w-]+)*/i
], [['name', 'Nokia'], 'version']);
};
this.getUA = function() {
return ua;
};
this.setUA = function (uastring) {
ua = uastring;
this.result = {
browser : this.getBrowser(),
engine : this.getEngine(),
os : this.getOS(),
device : this.getDevice()
};
return this;
};
this.setUA(ua);
};
// check whether script is running inside node.js export as module
if (typeof exports !== 'undefined' && this.toString() !== '[object DOMWindow]') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = parser;
}
exports.UAParser = parser;
} else {
this['UAParser'] = parser;
}
})();