ua-parser-js
Advanced tools
Comparing version 0.3.1 to 0.4.0
{ | ||
"title": "UA-Parser.js", | ||
"title": "UA-Parser.JS", | ||
"name": "ua-parser-js", | ||
"version": "0.3.1", | ||
"version": "0.4.0", | ||
"author": "Faisal Salman <fyzlman@gmail.com> (http://faisalman.com)", | ||
@@ -6,0 +6,0 @@ "description": "Lightweight JavaScript-based user-agent string parser", |
@@ -1,4 +0,4 @@ | ||
# UA-Parser.js | ||
# UA-Parser.JS | ||
Light-weight JavaScript-based all-in-one user-agent parser | ||
Lightweight JavaScript-based User-Agent string parser | ||
@@ -12,16 +12,14 @@ * Author : Faisalman <<fyzlman@gmail.com>> | ||
Get detailed type and version of web browser, layout engine, operating system, and device. | ||
Extract detailed type of web browser, layout engine, operating system, and device purely from user-agent string. | ||
## Methods | ||
* `getBrowser([uastring])` | ||
* `getDevice([uastring])` | ||
* `getEngine([uastring])` | ||
* `getOS([uastring])` | ||
* `getBrowser()` | ||
* `getDevice()` | ||
* `getEngine()` | ||
* `getOS()` | ||
* `getResult()` | ||
* `getUA()` | ||
* `setUA(uastring)` | ||
## Properties | ||
* `result` | ||
## Example | ||
@@ -35,4 +33,4 @@ | ||
// by default it takes ua string from current browser's window.navigator | ||
console.log(parser.result); | ||
// by default it takes ua string from current browser's window.navigator.userAgent | ||
console.log(parser.getResult()); | ||
/* | ||
@@ -65,5 +63,5 @@ /// this will print an object structured like this: | ||
console.log(parser.result.browser); // {name: "Chromium", major: "15", version: "15.0.874.106"} | ||
console.log(parser.result.engine); // {name: "AppleWebKit", version: "535.2"} | ||
console.log(parser.result.os); // {name: "Ubuntu", version: "11.10"} | ||
console.log(parser.getResult().browser); // {name: "Chromium", major: "15", version: "15.0.874.106"} | ||
console.log(parser.getResult().engine); // {name: "AppleWebKit", version: "535.2"} | ||
console.log(parser.getResult().os); // {name: "Ubuntu", version: "11.10"} | ||
@@ -78,12 +76,9 @@ // let's take another test please | ||
```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+'; | ||
var UAParser = require('ua-parser'); | ||
var parser = new UAParser(); | ||
var uaString = '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'; | ||
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" | ||
console.log(parser.setUA(uaString).getDevice().name); // "PlayBook" | ||
console.log(parser.getOS()) // {name: "RIM Tablet OS", version: "1.0.0"} | ||
console.log(parser.getEngine().name); // "AppleWebKit" | ||
``` | ||
@@ -95,10 +90,10 @@ | ||
This program is free software; you can redistribute it and/or | ||
modify it under the terms of the GNU General Public License | ||
as published by the Free Software Foundation; either version 2 | ||
of the License, or (at your option) any later version. | ||
Permission is hereby granted, free of charge, to any person obtaining a copy of | ||
this software and associated documentation files (the "Software"), to deal in | ||
the Software without restriction, including without limitation the rights to use, | ||
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the | ||
Software, and to permit persons to whom the Software is furnished to do so, | ||
subject to the following conditions: | ||
This program is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU General Public License for more details. | ||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. |
386
ua-parser.js
@@ -1,221 +0,255 @@ | ||
// UA-Parser.js v0.3.1 | ||
// Light-weight JavaScript-based all-in-one user-agent parser | ||
// UA-Parser.JS v0.4.0 | ||
// Lightweight JavaScript-based User-Agent string parser | ||
// https://github.com/faisalman/ua-parser-js | ||
// | ||
// Copyright © 2012 Faisalman | ||
// Licensed under GPLv2 & MIT | ||
// 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; | ||
var i, j, k, l; | ||
for (i = 1; i < arguments.length; i += 2) { | ||
var regex = arguments[i]; | ||
var props = arguments[i + 1]; | ||
var isMatchFound = false; | ||
var mapper = { | ||
regex : function () { | ||
var result, i, j, k, l, m, args = arguments; | ||
// loop through all regexes maps | ||
for (i = 0; i < args.length; i += 2) { | ||
var regex = args[i], // odd sequence (0,2,4,..) | ||
props = args[i + 1]; // even sequence (1,3,5,..) | ||
// construct object barebones | ||
if (typeof result === 'undefined') { | ||
result = {}; | ||
for (k = 0; k < props.length; k++) { | ||
if (typeof props[k] === 'object') { | ||
result[props[k][0]] = undefined; | ||
} else { | ||
result[props[k]] = undefined; | ||
} | ||
} | ||
if (this.getUA().toString() === '') { | ||
return result; | ||
} | ||
} | ||
// try matching uastring with regexes | ||
for (j = 0; j < regex.length; j++) { | ||
var match = regex[j].exec(ua); | ||
//console.log(match); | ||
if (!!match) { | ||
result = {}; | ||
l = 1; | ||
l = regex[j].exec(this.getUA()); | ||
if (!!l) { | ||
for (k = 0; k < props.length; k++) { | ||
m = l[k + 1]; | ||
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; | ||
result[props[k][0]] = m ? m.replace(props[k][1], props[k][2]) : undefined; | ||
} else { | ||
result[props[k]] = (!!match[k + l]) ? match[k + l] : undefined; | ||
result[props[k]] = m ? m : undefined; | ||
} | ||
} | ||
isMatchFound = true; | ||
break; | ||
} | ||
} | ||
if (!isMatchFound) { | ||
result = {}; | ||
for (k in props) { | ||
if (props.hasOwnProperty(k)) { | ||
if (typeof props[k] == 'object') { | ||
result[props[k][0]] = undefined; | ||
} else { | ||
result[props[k]] = undefined; | ||
if(!!l) break; // break the loop immediately if match found | ||
} | ||
return result; | ||
}, | ||
string : function (str, map) { | ||
for (var i in map) { | ||
if (map.hasOwnProperty(i)) { | ||
if (typeof map[i] === 'object' && map[i].length > 0) { | ||
for (var j = 0; j < map[i].length; j++) { | ||
if (str.toLowerCase().indexOf(map[i][j]) !== -1) { | ||
return i; | ||
} | ||
} | ||
} else if (str.toLowerCase().indexOf(map[i]) !== -1) { | ||
return i; | ||
} | ||
} else { | ||
return result; | ||
} | ||
} | ||
return result; | ||
}; | ||
return str; | ||
} | ||
}; | ||
var mapper = { | ||
os : { | ||
win: function (str, match) { | ||
switch (match.toLowerCase()) { | ||
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 match; | ||
}; | ||
var maps = { | ||
os : { | ||
windows : { | ||
version : function (match, str1) { | ||
return mapper.string(str1, { | ||
'ME' : '4.90', | ||
'NT 3.11' : 'nt3.51', | ||
'NT 4.0' : 'nt4.0', | ||
'2000' : 'nt 5.0', | ||
'XP' : ['nt 5.1', 'nt 5.2'], | ||
'Vista' : 'nt 6.0', | ||
'7' : 'nt 6.1', | ||
'8' : 'nt 6.2' | ||
}); | ||
} | ||
} | ||
}; | ||
} | ||
}; | ||
var regexes = { | ||
this.getBrowser = function (uastring) { | ||
browser : [[ | ||
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).+version\/((\d+)?[\w\.]+)/i, // Opera | ||
/(opera)[\/\s]+((\d+)?[\w\.]+)/i, | ||
// Trident based | ||
/(avant\sbrowser|iemobile|slimbrowser)[\/\s]?((\d+)?[\w\.]*)/i, // Avant/IEMobile/SlimBrowser | ||
/ms(ie)\s((\d+)?[\w\.]+)/i, // Internet Explorer | ||
// 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 | ||
// 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, | ||
// Trident based | ||
/(avant\sbrowser|iemobile|slimbrowser)[\/\s]?((\d+)?[\w\.]*)/i, // Avant/IEMobile/SlimBrowser | ||
/ms(ie)\s((\d+)?[\w\.]+)/i, // Internet Explorer | ||
// 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 | ||
// Webkit/KHTML based | ||
/(chromium|flock|rockmelt|midori|epiphany)\/((\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, | ||
// Other | ||
/(lynx|dillo|icab)[\/\s]?((\d+)?[\w\.]+)/i, // Lynx/Dillo/iCab | ||
], ['name', 'version', 'major'] | ||
], | ||
device : [[ | ||
// 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 | ||
/\((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'], [ | ||
// Other | ||
/(lynx|dillo|icab)[\/\s]?((\d+)?[\w\.]+)/i, // Lynx/Dillo/iCab | ||
], ['name', 'version', 'major']); | ||
}; | ||
/(sie)-(\w+)*/i // Siemens | ||
], [['name', 'Siemens'], 'version'], [ | ||
/(maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia | ||
/(nokia)[\s_-]?([\w-]+)*/i | ||
], [['name', 'Nokia'], 'version'] | ||
], | ||
engine : [[ | ||
this.getEngine = function (uastring) { | ||
/(presto)\/([\w\.]+)/i, // Presto | ||
/([aple]*webkit|trident)\/([\w\.]+)/i, // Webkit/Trident | ||
/(khtml)\/([\w\.]+)/i // KHTML | ||
], ['name', 'version'], [ | ||
return regxMap(uastring || ua, [ | ||
/rv\:([\w\.]+).*(gecko)/i // Gecko | ||
], ['version', 'name'] | ||
], | ||
os : [[ | ||
/(presto)\/([\w\.]+)/i, // Presto | ||
/([aple]*webkit|trident)\/([\w\.]+)/i, // Webkit/Trident | ||
/(khtml)\/([\w\.]+)/i // KHTML | ||
], ['name', 'version'], [ | ||
// Windows based | ||
/(windows\sphone\sos|windows)\s?([nt\d\.\s]+\d)/i // Windows | ||
], ['name', ['version', /(.+)/gi, maps.os.windows.version]], [ | ||
/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i | ||
], [['name', 'Windows'], ['version', /(.+)/gi, maps.os.windows.version]], [ | ||
// 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 | ||
/rv\:([\w\.]+).*(gecko)/i // Gecko | ||
], ['version', 'name']); | ||
}; | ||
// 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'], [ | ||
this.getOS = function (uastring) { | ||
/(cros)\s([\w\.\s]+\d)/i // Chromium OS | ||
], [['name', 'Chromium OS'], 'version'],[ | ||
return regxMap(uastring || ua, [ | ||
// Solaris | ||
/(sunos)\s?([\w\.\s]+\d)*/i // Solaris | ||
], [['name', 'Solaris'], 'version'], [ | ||
// Windows based | ||
/(windows\sphone\sos|windows)\s+([\w\.\s]+)*/i, // Windows | ||
], ['name', ['version', /(nt\s[\d\.]+)/gi, mapper.os.win]], [ | ||
// BSD based | ||
/\s(\w*bsd|dragonfly)\s?([\w\.]+)*/i, // FreeBSD/NetBSD/OpenBSD/DragonFly | ||
], ['name', 'version'],[ | ||
// 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 | ||
/(ip[honead]+).*os\s*([\w]+)*\slike\smac/i // iOS | ||
], [['name', /.+/g, 'iOS'], ['version', /_/g, '.']], [ | ||
// 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'], [ | ||
/(mac\sos\sx)\s([\w\s\.]+\w)/i, // Mac OS | ||
], ['name', ['version', /_/g, '.']], [ | ||
/cros\s([\w\.\s]+)/i // Chromium OS | ||
], [['name', 'Chromium OS'], 'version'],[ | ||
// Other | ||
/(haiku)\s(\w+)/i, // Haiku | ||
/(macintosh|unix|minix|beos)[\/\s]?()*/i // UNIX/Minix/BeOS | ||
], ['name', 'version'] | ||
] | ||
}; | ||
// Solaris | ||
/sunos\s?([\w\.\s]+)*/i // Solaris | ||
], [['name', 'Solaris'], 'version'], [ | ||
var UAParser = function UAParser (uastring) { | ||
// BSD based | ||
/\s(\w*bsd|dragonfly)\s?([\w\.]+)*/i, // FreeBSD/NetBSD/OpenBSD/DragonFly | ||
], ['name', 'version'],[ | ||
var ua = uastring || (typeof window !== 'undefined' ? window.navigator.userAgent : ""); | ||
/(ip[honead]+).*os\s*([\w]+)*\slike\smac/i // iOS | ||
], [['name', /.+/g, 'iOS'], ['version', /_/g, '.']], [ | ||
this.getBrowser = function () { | ||
return mapper.regex.apply(this, regexes.browser); | ||
}; | ||
/(mac\sos)\sx\s([\w\s\.]+)/i, // Mac OS | ||
], ['name', ['version', /_/g, '.']], [ | ||
this.getDevice = function () { | ||
return mapper.regex.apply(this, regexes.device); | ||
}; | ||
// Other | ||
/(haiku)\s(\w+)/i, // Haiku | ||
/(macintosh|unix|minix|beos)[\/\s]?()*/i // UNIX/Minix/BeOS | ||
], ['name', 'version']); | ||
this.getEngine = function () { | ||
return mapper.regex.apply(this, regexes.engine); | ||
}; | ||
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]+)/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.getOS = function () { | ||
return mapper.regex.apply(this, regexes.os); | ||
}; | ||
this.setUA = function (uastring) { | ||
ua = uastring || ua; | ||
this.result = { | ||
this.getResult = function() { | ||
return { | ||
browser : this.getBrowser(), | ||
@@ -226,2 +260,10 @@ engine : this.getEngine(), | ||
}; | ||
}; | ||
this.getUA = function() { | ||
return ua; | ||
}; | ||
this.setUA = function (uastring) { | ||
ua = uastring; | ||
return this; | ||
@@ -236,8 +278,8 @@ }; | ||
if (typeof module !== 'undefined' && module.exports) { | ||
exports = module.exports = parser; | ||
exports = module.exports = UAParser; | ||
} | ||
exports.UAParser = parser; | ||
exports.UAParser = UAParser; | ||
} else { | ||
this['UAParser'] = parser; | ||
this['UAParser'] = UAParser; | ||
} | ||
})(); |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
16762
231
95