Comparing version 2.0.0 to 2.0.1
@@ -9,3 +9,9 @@ ## Version 2.0 | ||
- Removed the fromAgent method | ||
- semver is removed from the dependencies, if you use the useragent/features | ||
you should add it to your own dependencies. | ||
* __v2.0.1__ | ||
- Fixed broken reference to the update module. | ||
- Updated with some new parsers. | ||
## Version 1.0 | ||
@@ -12,0 +18,0 @@ * __v1.1.0__ |
@@ -378,3 +378,3 @@ 'use strict'; | ||
module.exports = function updater() { | ||
require('./lib/update')(function updating(err, results) { | ||
require('./lib/update').update(function updating(err, results) { | ||
if (err) return; // fail silently | ||
@@ -381,0 +381,0 @@ |
2418
lib/regexps.js
@@ -1,285 +0,2137 @@ | ||
exports.browser = [ | ||
[ new RegExp("^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii"), "Wii", 0, 0, 0 ] | ||
, [ new RegExp("(SeaMonkey|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Pale[Mm]oon)/(\\d+)\\.(\\d+)\\.?(\\d+)?"), "Pale Moon (Firefox Variant)", 0, 0, 0 ] | ||
, [ new RegExp("(Fennec)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"), "Firefox Mobile", 0, 0, 0 ] | ||
, [ new RegExp("(Fennec)/(\\d+)\\.(\\d+)(pre)"), "Firefox Mobile", 0, 0, 0 ] | ||
, [ new RegExp("(Fennec)/(\\d+)\\.(\\d+)"), "Firefox Mobile", 0, 0, 0 ] | ||
, [ new RegExp("Mobile.*(Firefox)/(\\d+)\\.(\\d+)"), "Firefox Mobile", 0, 0, 0 ] | ||
, [ new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)"), "Firefox ($1)", 0, 0, 0 ] | ||
, [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)(a\\d+[a-z]*)"), "Firefox Alpha", 0, 0, 0 ] | ||
, [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)(b\\d+[a-z]*)"), "Firefox Beta", 0, 0, 0 ] | ||
, [ new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(a\\d+[a-z]*)"), "Firefox Alpha", 0, 0, 0 ] | ||
, [ new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(b\\d+[a-z]*)"), "Firefox Beta", 0, 0, 0 ] | ||
, [ new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"), "Firefox ($1)", 0, 0, 0 ] | ||
, [ new RegExp("(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)"), "MicroB", 0, 0, 0 ] | ||
, [ new RegExp("(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Flock)/(\\d+)\\.(\\d+)(b\\d+?)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Netscape", 0, 0, 0 ] | ||
, [ new RegExp("(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)"), "Netscape", 0, 0, 0 ] | ||
, [ new RegExp("(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Netscape", 0, 0, 0 ] | ||
, [ new RegExp("(MyIBrow)/(\\d+)\\.(\\d+)"), "My Internet Browser", 0, 0, 0 ] | ||
, [ new RegExp("(Opera Tablet).*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)"), "Opera Mobile", 0, 0, 0 ] | ||
, [ new RegExp("Opera Mobi"), "Opera Mobile", 0, 0, 0 ] | ||
, [ new RegExp("(Opera Mini)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Opera Mini)/att/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Opera)/9.80.*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(webOSBrowser)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(webOS)/(\\d+)\\.(\\d+)"), "webOSBrowser", 0, 0, 0 ] | ||
, [ new RegExp("(wOSBrowser).+TouchPad/(\\d+)\\.(\\d+)"), "webOS TouchPad", 0, 0, 0 ] | ||
, [ new RegExp("(luakit)"), "LuaKit", 0, 0, 0 ] | ||
, [ new RegExp("(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)"), "Swiftfox", 0, 0, 0 ] | ||
, [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)"), "Swiftfox", 0, 0, 0 ] | ||
, [ new RegExp("(rekonq)/(\\d+)\\.(\\d+) Safari"), "Rekonq", 0, 0, 0 ] | ||
, [ new RegExp("rekonq"), "Rekonq", 0, 0, 0 ] | ||
, [ new RegExp("(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?"), "Conkeror", 0, 0, 0 ] | ||
, [ new RegExp("(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Konqueror", 0, 0, 0 ] | ||
, [ new RegExp("(WeTab)-Browser"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Comodo Dragon", 0, 0, 0 ] | ||
, [ new RegExp("(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Symphony) (\\d+).(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Minimo)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(CrMo)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"), "Chrome Mobile", 0, 0, 0 ] | ||
, [ new RegExp("(CriOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"), "Chrome Mobile iOS", 0, 0, 0 ] | ||
, [ new RegExp("(Chrome)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+) Mobile"), "Chrome Mobile", 0, 0, 0 ] | ||
, [ new RegExp("(chromeframe)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Chrome Frame", 0, 0, 0 ] | ||
, [ new RegExp("(UC Browser)(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(SLP Browser)/(\\d+)\\.(\\d+)"), "Tizen Browser", 0, 0, 0 ] | ||
, [ new RegExp("(Epiphany)/(\\d+)\\.(\\d+).(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(SE 2\\.X) MetaSr (\\d+)\\.(\\d+)"), "Sogou Explorer", 0, 0, 0 ] | ||
, [ new RegExp("(FlyFlow)/(\\d+)\\.(\\d+)"), "Baidu Explorer", 0, 0, 0 ] | ||
, [ new RegExp("(Pingdom.com_bot_version_)(\\d+)\\.(\\d+)"), "PingdomBot", 0, 0, 0 ] | ||
, [ new RegExp("(facebookexternalhit)/(\\d+)\\.(\\d+)"), "FacebookBot", 0, 0, 0 ] | ||
, [ new RegExp("(Twitterbot)/(\\d+)\\.(\\d+)"), "TwitterBot", 0, 0, 0 ] | ||
, [ new RegExp("(PyAMF)/(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|WebPilot|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\\.Browser|Bunjaloo|Google Earth|Raven for Mac)/(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(iCab|Lunascape|Opera|Android|Jasmine|Polaris|BREW) (\\d+)\\.(\\d+)\\.?(\\d+)?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Kindle)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Android) Donut"), 0, "1", "2", 0 ] | ||
, [ new RegExp("(Android) Eclair"), 0, "2", "1", 0 ] | ||
, [ new RegExp("(Android) Froyo"), 0, "2", "2", 0 ] | ||
, [ new RegExp("(Android) Gingerbread"), 0, "2", "3", 0 ] | ||
, [ new RegExp("(Android) Honeycomb"), 0, "3", 0, 0 ] | ||
, [ new RegExp("(IEMobile)[ /](\\d+)\\.(\\d+)"), "IE Mobile", 0, 0, 0 ] | ||
, [ new RegExp("(MSIE) (\\d+)\\.(\\d+).*XBLWP7"), "IE Large Screen", 0, 0, 0 ] | ||
, [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Obigo)InternetBrowser"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Obigo)\\-Browser"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(MAXTHON|Maxthon) (\\d+)\\.(\\d+)"), "Maxthon", 0, 0, 0 ] | ||
, [ new RegExp("(Maxthon|MyIE2|Uzbl|Shiira)"), 0, "0", 0, 0 ] | ||
, [ new RegExp("(PLAYSTATION) (\\d+)"), "PlayStation", 0, 0, 0 ] | ||
, [ new RegExp("(PlayStation Portable)[^\\d]+(\\d+).(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(POLARIS)/(\\d+)\\.(\\d+)"), "Polaris", 0, 0, 0 ] | ||
, [ new RegExp("(Embider)/(\\d+)\\.(\\d+)"), "Polaris", 0, 0, 0 ] | ||
, [ new RegExp("(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)"), "Bon Echo", 0, 0, 0 ] | ||
, [ new RegExp("(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ] | ||
, [ new RegExp("(iPod).*Version/(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ] | ||
, [ new RegExp("(iPhone).*Version/(\\d+)\\.(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ] | ||
, [ new RegExp("(iPhone).*Version/(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ] | ||
, [ new RegExp("(iPad).*Version/(\\d+)\\.(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ] | ||
, [ new RegExp("(iPad).*Version/(\\d+)\\.(\\d+)"), "Mobile Safari", 0, 0, 0 ] | ||
, [ new RegExp("(iPod|iPhone|iPad);.*CPU.*OS (\\d+)(?:_\\d+)?_(\\d+).*Mobile"), "Mobile Safari", 0, 0, 0 ] | ||
, [ new RegExp("(iPod|iPhone|iPad)"), "Mobile Safari", 0, 0, 0 ] | ||
, [ new RegExp("(AvantGo) (\\d+).(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Avant)"), 0, "1", 0, 0 ] | ||
, [ new RegExp("(QtCarBrowser)"), 0, "1", 0, 0 ] | ||
, [ new RegExp("^(Nokia)"), "Nokia Services (WAP) Browser", 0, 0, 0 ] | ||
, [ new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(BrowserNG)/(\\d+)\\.(\\d+).(\\d+)"), "NokiaBrowser", 0, 0, 0 ] | ||
, [ new RegExp("(Series60)/5\\.0"), "NokiaBrowser", "7", "0", 0 ] | ||
, [ new RegExp("(Series60)/(\\d+)\\.(\\d+)"), "Nokia OSS Browser", 0, 0, 0 ] | ||
, [ new RegExp("(S40OviBrowser)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"), "Nokia Series 40 Ovi Browser", 0, 0, 0 ] | ||
, [ new RegExp("(Nokia)[EN]?(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(BB10);"), "Blackberry WebKit", 0, 0, 0 ] | ||
, [ new RegExp("(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)"), "Blackberry WebKit", 0, 0, 0 ] | ||
, [ new RegExp("(Black[bB]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)"), "Blackberry WebKit", 0, 0, 0 ] | ||
, [ new RegExp("(Black[bB]erry)\\s?(\\d+)"), "Blackberry", 0, 0, 0 ] | ||
, [ new RegExp("(OmniWeb)/v(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Blazer)/(\\d+)\\.(\\d+)"), "Palm Blazer", 0, 0, 0 ] | ||
, [ new RegExp("(Pre)/(\\d+)\\.(\\d+)"), "Palm Pre", 0, 0, 0 ] | ||
, [ new RegExp("(Links) \\((\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(QtWeb) Internet Browser/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?"), "Amazon Silk", 0, 0, 0 ] | ||
, [ new RegExp("(AppleWebKit)/(\\d+)\\.?(\\d+)?\\+ .* Safari"), "WebKit Nightly", 0, 0, 0 ] | ||
, [ new RegExp("(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/"), "Safari", 0, 0, 0 ] | ||
, [ new RegExp("(Safari)/\\d+"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(OLPC)/Update(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(OLPC)/Update()\\.(\\d+)"), 0, "0", 0, 0 ] | ||
, [ new RegExp("(SEMC\\-Browser)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Teleca)"), "Teleca Browser", 0, 0, 0 ] | ||
, [ new RegExp("(MSIE) (\\d+)\\.(\\d+)"), "IE", 0, 0, 0 ] | ||
, [ new RegExp("(Nintendo 3DS).* Version/(\\d+)\\.(\\d+)(?:\\.(\\w+))"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(python-requests)/(\\d+)\\.(\\d+)"), "Python Requests", 0, 0, 0 ] | ||
, [ new RegExp("(Thunderbird)/(\\d+)\\.(\\d+)\\.?(\\d+)?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Wget)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(curl)/(\\d+)\\.(\\d+)\\.(\\d+)"), "cURL", 0, 0, 0 ] | ||
]; | ||
var parser; | ||
exports.device = [ | ||
[ new RegExp("HTC ([A-Z][a-z0-9]+) Build"), "HTC $1", 0, 0, 0 ] | ||
, [ new RegExp("HTC ([A-Z][a-z0-9 ]+) \\d+\\.\\d+\\.\\d+\\.\\d+"), "HTC $1", 0, 0, 0 ] | ||
, [ new RegExp("HTC_Touch_([A-Za-z0-9]+)"), "HTC Touch ($1)", 0, 0, 0 ] | ||
, [ new RegExp("USCCHTC(\\d+)"), "HTC $1 (US Cellular)", 0, 0, 0 ] | ||
, [ new RegExp("Sprint APA(9292)"), "HTC $1 (Sprint)", 0, 0, 0 ] | ||
, [ new RegExp("HTC ([A-Za-z0-9]+ [A-Z])"), "HTC $1", 0, 0, 0 ] | ||
, [ new RegExp("HTC-([A-Za-z0-9]+)"), "HTC $1", 0, 0, 0 ] | ||
, [ new RegExp("HTC_([A-Za-z0-9]+)"), "HTC $1", 0, 0, 0 ] | ||
, [ new RegExp("HTC ([A-Za-z0-9]+)"), "HTC $1", 0, 0, 0 ] | ||
, [ new RegExp("(ADR[A-Za-z0-9]+)"), "HTC $1", 0, 0, 0 ] | ||
, [ new RegExp("(HTC)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(QtCarBrowser)"), "Tesla Model S", 0, 0, 0 ] | ||
, [ new RegExp("(SamsungSGHi560)"), "Samsung SGHi560", 0, 0, 0 ] | ||
, [ new RegExp("SonyEricsson([A-Za-z0-9]+)/"), "Ericsson $1", 0, 0, 0 ] | ||
, [ new RegExp("(KFOT Build)"), "Kindle Fire", 0, 0, 0 ] | ||
, [ new RegExp("(KFTT Build)"), "Kindle Fire HD", 0, 0, 0 ] | ||
, [ new RegExp("(KFJWI Build)"), "Kindle Fire HD 8.9\" WiFi", 0, 0, 0 ] | ||
, [ new RegExp("(KFJWA Build)"), "Kindle Fire HD 8.9\" 4G", 0, 0, 0 ] | ||
, [ new RegExp("(Kindle Fire)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Kindle)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?"), "Kindle Fire", 0, 0, 0 ] | ||
, [ new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; WOWMobile (.+) Build"), 0, 0, 0, 0 ] | ||
, [ new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build"), 0, 0, 0, 0 ] | ||
, [ new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\-update1\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build"), 0, 0, 0, 0 ] | ||
, [ new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build"), 0, 0, 0, 0 ] | ||
, [ new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; (.+) Build"), 0, 0, 0, 0 ] | ||
, [ new RegExp("NokiaN([0-9]+)"), "Nokia N$1", 0, 0, 0 ] | ||
, [ new RegExp("Nokia([A-Za-z0-9\\v-]+)"), "Nokia $1", 0, 0, 0 ] | ||
, [ new RegExp("NOKIA ([A-Za-z0-9\\-]+)"), "Nokia $1", 0, 0, 0 ] | ||
, [ new RegExp("Nokia ([A-Za-z0-9\\-]+)"), "Nokia $1", 0, 0, 0 ] | ||
, [ new RegExp("Lumia ([A-Za-z0-9\\-]+)"), "Lumia $1", 0, 0, 0 ] | ||
, [ new RegExp("Symbian"), "Nokia", 0, 0, 0 ] | ||
, [ new RegExp("BB10; ([A-Za-z0-9\\- ]+)\\)"), "BlackBerry $1", 0, 0, 0 ] | ||
, [ new RegExp("(PlayBook).+RIM Tablet OS"), "Blackberry Playbook", 0, 0, 0 ] | ||
, [ new RegExp("(Black[Bb]erry [0-9]+);"), 0, 0, 0, 0 ] | ||
, [ new RegExp("Black[Bb]erry([0-9]+)"), "BlackBerry $1", 0, 0, 0 ] | ||
, [ new RegExp("(Pre)/(\\d+)\\.(\\d+)"), "Palm Pre", 0, 0, 0 ] | ||
, [ new RegExp("(Pixi)/(\\d+)\\.(\\d+)"), "Palm Pixi", 0, 0, 0 ] | ||
, [ new RegExp("(Touchpad)/(\\d+)\\.(\\d+)"), "HP Touchpad", 0, 0, 0 ] | ||
, [ new RegExp("HPiPAQ([A-Za-z0-9]+)/(\\d+).(\\d+)"), "HP iPAQ $1", 0, 0, 0 ] | ||
, [ new RegExp("Palm([A-Za-z0-9]+)"), "Palm $1", 0, 0, 0 ] | ||
, [ new RegExp("Treo([A-Za-z0-9]+)"), "Palm Treo $1", 0, 0, 0 ] | ||
, [ new RegExp("webOS.*(P160UNA)/(\\d+).(\\d+)"), "HP Veer", 0, 0, 0 ] | ||
, [ new RegExp("(PlayStation Portable)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(PlayStation Vita)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(AppleTV)"), "AppleTV", 0, 0, 0 ] | ||
, [ new RegExp("(iPad) Simulator;"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(iPad);"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(iPod);"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(iPhone) Simulator;"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(iPhone);"), 0, 0, 0, 0 ] | ||
, [ new RegExp("acer_([A-Za-z0-9]+)_"), "Acer $1", 0, 0, 0 ] | ||
, [ new RegExp("acer_([A-Za-z0-9]+)_"), "Acer $1", 0, 0, 0 ] | ||
, [ new RegExp("Amoi\\-([A-Za-z0-9]+)"), "Amoi $1", 0, 0, 0 ] | ||
, [ new RegExp("AMOI\\-([A-Za-z0-9]+)"), "Amoi $1", 0, 0, 0 ] | ||
, [ new RegExp("Asus\\-([A-Za-z0-9]+)"), "Asus $1", 0, 0, 0 ] | ||
, [ new RegExp("ASUS\\-([A-Za-z0-9]+)"), "Asus $1", 0, 0, 0 ] | ||
, [ new RegExp("BIRD\\-([A-Za-z0-9]+)"), "Bird $1", 0, 0, 0 ] | ||
, [ new RegExp("BIRD\\.([A-Za-z0-9]+)"), "Bird $1", 0, 0, 0 ] | ||
, [ new RegExp("BIRD ([A-Za-z0-9]+)"), "Bird $1", 0, 0, 0 ] | ||
, [ new RegExp("Dell ([A-Za-z0-9]+)"), "Dell $1", 0, 0, 0 ] | ||
, [ new RegExp("DoCoMo/2\\.0 ([A-Za-z0-9]+)"), "DoCoMo $1", 0, 0, 0 ] | ||
, [ new RegExp("([A-Za-z0-9]+)_W\\;FOMA"), "DoCoMo $1", 0, 0, 0 ] | ||
, [ new RegExp("([A-Za-z0-9]+)\\;FOMA"), "DoCoMo $1", 0, 0, 0 ] | ||
, [ new RegExp("vodafone([A-Za-z0-9]+)"), "Huawei Vodafone $1", 0, 0, 0 ] | ||
, [ new RegExp("i\\-mate ([A-Za-z0-9]+)"), "i-mate $1", 0, 0, 0 ] | ||
, [ new RegExp("Kyocera\\-([A-Za-z0-9]+)"), "Kyocera $1", 0, 0, 0 ] | ||
, [ new RegExp("KWC\\-([A-Za-z0-9]+)"), "Kyocera $1", 0, 0, 0 ] | ||
, [ new RegExp("Lenovo\\-([A-Za-z0-9]+)"), "Lenovo $1", 0, 0, 0 ] | ||
, [ new RegExp("Lenovo_([A-Za-z0-9]+)"), "Lenovo $1", 0, 0, 0 ] | ||
, [ new RegExp("LG/([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ] | ||
, [ new RegExp("LG-LG([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ] | ||
, [ new RegExp("LGE-LG([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ] | ||
, [ new RegExp("LGE VX([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ] | ||
, [ new RegExp("LG ([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ] | ||
, [ new RegExp("LGE LG\\-AX([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ] | ||
, [ new RegExp("LG\\-([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ] | ||
, [ new RegExp("LGE\\-([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ] | ||
, [ new RegExp("LG([A-Za-z0-9]+)"), "LG $1", 0, 0, 0 ] | ||
, [ new RegExp("(KIN)\\.One (\\d+)\\.(\\d+)"), "Microsoft $1", 0, 0, 0 ] | ||
, [ new RegExp("(KIN)\\.Two (\\d+)\\.(\\d+)"), "Microsoft $1", 0, 0, 0 ] | ||
, [ new RegExp("(Motorola)\\-([A-Za-z0-9]+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("MOTO\\-([A-Za-z0-9]+)"), "Motorola $1", 0, 0, 0 ] | ||
, [ new RegExp("MOT\\-([A-Za-z0-9]+)"), "Motorola $1", 0, 0, 0 ] | ||
, [ new RegExp("Philips([A-Za-z0-9]+)"), "Philips $1", 0, 0, 0 ] | ||
, [ new RegExp("Philips ([A-Za-z0-9]+)"), "Philips $1", 0, 0, 0 ] | ||
, [ new RegExp("SAMSUNG-([A-Za-z0-9\\-]+)"), "Samsung $1", 0, 0, 0 ] | ||
, [ new RegExp("SAMSUNG\\; ([A-Za-z0-9\\-]+)"), "Samsung $1", 0, 0, 0 ] | ||
, [ new RegExp("Softbank/1\\.0/([A-Za-z0-9]+)"), "Softbank $1", 0, 0, 0 ] | ||
, [ new RegExp("Softbank/2\\.0/([A-Za-z0-9]+)"), "Softbank $1", 0, 0, 0 ] | ||
, [ new RegExp("(PlayStation3 PPC)"), "Playstation 3", 0, 0, 0 ] | ||
, [ new RegExp("(hiptop|avantgo|plucker|xiino|blazer|elaine|up.browser|up.link|mmp|smartphone|midp|wap|vodafone|o2|pocket|mobile|pda)"), "Generic Smartphone", 0, 0, 0 ] | ||
, [ new RegExp("^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\\-|airn|alav|asus|attw|au\\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\\-n|bw\\-u|beck|benq|bilb|blac|c55/|cdm\\-|chtm|capi|comp|cond|craw|dall|dbte|dc\\-s|dica|ds\\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\\-|fly_|g\\-mo|g1 u|g560|gf\\-5|grun|gene|go.w|good|grad|hcit|hd\\-m|hd\\-p|hd\\-t|hei\\-|hp i|hpip|hs\\-c|htc |htc\\-|htca|htcg)"), "Generic Feature Phone", 0, 0, 0 ] | ||
, [ new RegExp("^(htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i\\-20|i\\-go|i\\-ma|i230|iac|iac\\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\\-|klon|lexi|lg g|lg\\-a|lg\\-b|lg\\-c|lg\\-d|lg\\-f|lg\\-g|lg\\-k|lg\\-l|lg\\-m|lg\\-o|lg\\-p|lg\\-s|lg\\-t|lg\\-u|lg\\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\\-|lge/|lynx|leno|m1\\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\\-|nem\\-|newg|neon)"), "Generic Feature Phone", 0, 0, 0 ] | ||
, [ new RegExp("^(netf|noki|nzph|o2 x|o2\\-x|opwv|owg1|opti|oran|ot\\-s|p800|pand|pg\\-1|pg\\-2|pg\\-3|pg\\-6|pg\\-8|pg\\-c|pg13|phil|pn\\-2|pt\\-g|palm|pana|pire|pock|pose|psio|qa\\-a|qc\\-2|qc\\-3|qc\\-5|qc\\-7|qc07|qc12|qc21|qc32|qc60|qci\\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\\-|scp\\-|sdk/|se47|sec\\-|sec0|sec1|semc|sgh\\-|shar|sie\\-|sk\\-0|sl45|slid|smb3|smt5|sp01|sph\\-|spv |spv\\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\\-mo|t218|t250|t600|t610|t618|tcl\\-|tdg\\-|telm|tim\\-|ts70|tsm\\-|tsm3|tsm5|tx\\-9|tagt)"), "Generic Feature Phone", 0, 0, 0 ] | ||
, [ new RegExp("^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\\-|your|zte\\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\\-|webc|whit|wmlb|xda\\-|xda_)"), "Generic Feature Phone", 0, 0, 0 ] | ||
, [ new RegExp("(bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\\-webcrawler|converacrawler|dataparksearch|findlinks)"), "Spider", 0, 0, 0 ] | ||
]; | ||
exports.browser = Object.create(null); | ||
exports.os = [ | ||
[ new RegExp("(Android) (\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Android)\\-(\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Android) Donut"), 0, "1", "2", 0 ] | ||
, [ new RegExp("(Android) Eclair"), 0, "2", "1", 0 ] | ||
, [ new RegExp("(Android) Froyo"), 0, "2", "2", 0 ] | ||
, [ new RegExp("(Android) Gingerbread"), 0, "2", "3", 0 ] | ||
, [ new RegExp("(Android) Honeycomb"), 0, "3", 0, 0 ] | ||
, [ new RegExp("(Silk-Accelerated=[a-z]{4,5})"), "Android", 0, 0, 0 ] | ||
, [ new RegExp("(Windows Phone 6\\.5)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Windows (?:NT 5\\.2|NT 5\\.1))"), "Windows XP", 0, 0, 0 ] | ||
, [ new RegExp("(XBLWP7)"), "Windows Phone OS", 0, 0, 0 ] | ||
, [ new RegExp("(Windows NT 6\\.1)"), "Windows 7", 0, 0, 0 ] | ||
, [ new RegExp("(Windows NT 6\\.0)"), "Windows Vista", 0, 0, 0 ] | ||
, [ new RegExp("(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\\.0|Windows Vista|Windows 2000)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Windows NT 6\\.2; ARM;)"), "Windows RT", 0, 0, 0 ] | ||
, [ new RegExp("(Windows NT 6\\.2)"), "Windows 8", 0, 0, 0 ] | ||
, [ new RegExp("(Windows NT 5\\.0)"), "Windows 2000", 0, 0, 0 ] | ||
, [ new RegExp("(Windows Phone OS) (\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Windows ?Mobile)"), "Windows Mobile", 0, 0, 0 ] | ||
, [ new RegExp("(WinNT4.0)"), "Windows NT 4.0", 0, 0, 0 ] | ||
, [ new RegExp("(Win98)"), "Windows 98", 0, 0, 0 ] | ||
, [ new RegExp("(Tizen)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Mac OS X) (\\d+)[_.](\\d+)(?:[_.](\\d+))?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(?:PPC|Intel) (Mac OS X)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(CPU OS|iPhone OS) (\\d+)_(\\d+)(?:_(\\d+))?"), "iOS", 0, 0, 0 ] | ||
, [ new RegExp("(iPhone|iPad|iPod); Opera"), "iOS", 0, 0, 0 ] | ||
, [ new RegExp("(iPhone|iPad|iPod).*Mac OS X.*Version/(\\d+)\\.(\\d+)"), "iOS", 0, 0, 0 ] | ||
, [ new RegExp("(AppleTV)/(\\d+)\\.(\\d+)"), "ATV OS X", "$1", "$2", 0 ] | ||
, [ new RegExp("(CrOS) [a-z0-9_]+ (\\d+)\\.(\\d+)(?:\\.(\\d+))?"), "Chrome OS", 0, 0, 0 ] | ||
, [ new RegExp("(Debian)-(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Linux Mint)(?:/(\\d+))?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Mandriva)(?: Linux)?/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Symbian[Oo][Ss])/(\\d+)\\.(\\d+)"), "Symbian OS", 0, 0, 0 ] | ||
, [ new RegExp("(Symbian/3).+NokiaBrowser/7\\.3"), "Symbian^3 Anna", 0, 0, 0 ] | ||
, [ new RegExp("(Symbian/3).+NokiaBrowser/7\\.4"), "Symbian^3 Belle", 0, 0, 0 ] | ||
, [ new RegExp("(Symbian/3)"), "Symbian^3", 0, 0, 0 ] | ||
, [ new RegExp("(Series 60|SymbOS|S60)"), "Symbian OS", 0, 0, 0 ] | ||
, [ new RegExp("(MeeGo)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("Symbian [Oo][Ss]"), "Symbian OS", 0, 0, 0 ] | ||
, [ new RegExp("(BB10);.+Version/(\\d+)\\.(\\d+)\\.(\\d+)"), "BlackBerry OS", 0, 0, 0 ] | ||
, [ new RegExp("(Black[Bb]erry)[0-9a-z]+/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), "BlackBerry OS", 0, 0, 0 ] | ||
, [ new RegExp("(Black[Bb]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), "BlackBerry OS", 0, 0, 0 ] | ||
, [ new RegExp("(RIM Tablet OS) (\\d+)\\.(\\d+)\\.(\\d+)"), "BlackBerry Tablet OS", 0, 0, 0 ] | ||
, [ new RegExp("(Play[Bb]ook)"), "BlackBerry Tablet OS", 0, 0, 0 ] | ||
, [ new RegExp("(Black[Bb]erry)"), "Blackberry OS", 0, 0, 0 ] | ||
, [ new RegExp("(GoogleTV) (\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(GoogleTV)\\/\\d+"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(webOS|hpwOS)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"), "webOS", 0, 0, 0 ] | ||
, [ new RegExp("(SUSE|Fedora|Red Hat|PCLinuxOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(SUSE|Fedora|Red Hat|Puppy|PCLinuxOS|CentOS)/(\\d+)\\.(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Red Hat|Slackware)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(PlayStation Vita) (\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Windows|OpenBSD|FreeBSD|NetBSD|Ubuntu|Kubuntu|Android|Arch Linux|CentOS|WeTab|Slackware)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Linux)/(\\d+)\\.(\\d+)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Linux|BSD)"), 0, 0, 0, 0 ] | ||
, [ new RegExp("(Red Hat)"), 0, 0, 0, 0 ] | ||
]; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(SeaMonkey|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[0] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Pale[Mm]oon)/(\\d+)\\.(\\d+)\\.?(\\d+)?"); | ||
parser[1] = "Pale Moon (Firefox Variant)"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[1] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Fennec)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"); | ||
parser[1] = "Firefox Mobile"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[2] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Fennec)/(\\d+)\\.(\\d+)(pre)"); | ||
parser[1] = "Firefox Mobile"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[3] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Fennec)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Firefox Mobile"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[4] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Mobile.*(Firefox)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Firefox Mobile"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[5] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)"); | ||
parser[1] = "Firefox ($1)"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[6] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)(a\\d+[a-z]*)"); | ||
parser[1] = "Firefox Alpha"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[7] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)(b\\d+[a-z]*)"); | ||
parser[1] = "Firefox Beta"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[8] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(a\\d+[a-z]*)"); | ||
parser[1] = "Firefox Alpha"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[9] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(b\\d+[a-z]*)"); | ||
parser[1] = "Firefox Beta"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[10] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"); | ||
parser[1] = "Firefox ($1)"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[11] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "MicroB"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[12] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[13] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Flock)/(\\d+)\\.(\\d+)(b\\d+?)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[14] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[15] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Netscape"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[16] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)"); | ||
parser[1] = "Netscape"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[17] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Netscape"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[18] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(MyIBrow)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "My Internet Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[19] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Opera Tablet).*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[20] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Opera Mobile"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[21] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Opera Mobi"); | ||
parser[1] = "Opera Mobile"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[22] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Opera Mini)/(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[23] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Opera Mini)/att/(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[24] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Opera)/9.80.*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[25] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(hpw|web)OS/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"); | ||
parser[1] = "webOS Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[26] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(luakit)"); | ||
parser[1] = "LuaKit"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[27] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Snowshoe)/(\\d+)\\.(\\d+).(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[28] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[29] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)"); | ||
parser[1] = "Swiftfox"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[30] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)"); | ||
parser[1] = "Swiftfox"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[31] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(rekonq)/(\\d+)\\.(\\d+) Safari"); | ||
parser[1] = "Rekonq"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[32] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("rekonq"); | ||
parser[1] = "Rekonq"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[33] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?"); | ||
parser[1] = "Conkeror"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[34] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Konqueror"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[35] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(WeTab)-Browser"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[36] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Comodo Dragon"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[37] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[38] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Symphony) (\\d+).(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[39] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Minimo)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[40] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(CrMo)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Chrome Mobile"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[41] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(CriOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Chrome Mobile iOS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[42] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Chrome)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+) Mobile"); | ||
parser[1] = "Chrome Mobile"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[43] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(chromeframe)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Chrome Frame"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[44] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(UCBrowser)[ /](\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "UC Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[45] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(UC Browser)[ /](\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[46] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(UC Browser|UCBrowser|UCWEB)(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "UC Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[47] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(SLP Browser)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Tizen Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[48] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Epiphany)/(\\d+)\\.(\\d+).(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[49] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(SE 2\\.X) MetaSr (\\d+)\\.(\\d+)"); | ||
parser[1] = "Sogou Explorer"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[50] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(baidubrowser)[/\\s](\\d+)"); | ||
parser[1] = "Baidu Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[51] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(FlyFlow)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Baidu Explorer"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[52] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Pingdom.com_bot_version_)(\\d+)\\.(\\d+)"); | ||
parser[1] = "PingdomBot"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[53] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(facebookexternalhit)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "FacebookBot"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[54] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Twitterbot)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "TwitterBot"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[55] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Rackspace Monitoring)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "RackspaceBot"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[56] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(PyAMF)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[57] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|WebPilot|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[58] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser)/(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[59] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[60] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iCab|Lunascape|Opera|Android|Jasmine|Polaris) (\\d+)\\.(\\d+)\\.?(\\d+)?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[61] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Kindle)/(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[62] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) Donut"); | ||
parser[1] = 0; | ||
parser[2] = "1"; | ||
parser[3] = "2"; | ||
parser[4] = 0; | ||
exports.browser[63] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) Eclair"); | ||
parser[1] = 0; | ||
parser[2] = "2"; | ||
parser[3] = "1"; | ||
parser[4] = 0; | ||
exports.browser[64] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) Froyo"); | ||
parser[1] = 0; | ||
parser[2] = "2"; | ||
parser[3] = "2"; | ||
parser[4] = 0; | ||
exports.browser[65] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) Gingerbread"); | ||
parser[1] = 0; | ||
parser[2] = "2"; | ||
parser[3] = "3"; | ||
parser[4] = 0; | ||
exports.browser[66] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) Honeycomb"); | ||
parser[1] = 0; | ||
parser[2] = "3"; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[67] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(IEMobile)[ /](\\d+)\\.(\\d+)"); | ||
parser[1] = "IE Mobile"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[68] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(MSIE) (\\d+)\\.(\\d+).*XBLWP7"); | ||
parser[1] = "IE Large Screen"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[69] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[70] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[71] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Obigo)InternetBrowser"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[72] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Obigo)\\-Browser"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[73] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?"); | ||
parser[1] = "Obigo"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[74] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(MAXTHON|Maxthon) (\\d+)\\.(\\d+)"); | ||
parser[1] = "Maxthon"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[75] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Maxthon|MyIE2|Uzbl|Shiira)"); | ||
parser[1] = 0; | ||
parser[2] = "0"; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[76] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("PLAYSTATION 3.+WebKit"); | ||
parser[1] = "NetFront NX"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[77] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("PLAYSTATION 3"); | ||
parser[1] = "NetFront"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[78] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(PlayStation Portable)"); | ||
parser[1] = "NetFront"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[79] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(PlayStation Vita)"); | ||
parser[1] = "NetFront NX"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[80] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("AppleWebKit.+ (NX)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "NetFront NX"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[81] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Nintendo 3DS)"); | ||
parser[1] = "NetFront NX"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[82] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[83] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(NCSA_Mosaic)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "NCSA Mosaic"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[84] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(POLARIS)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Polaris"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[85] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Embider)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Polaris"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[86] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Bon Echo"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[87] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("M?QQBrowser"); | ||
parser[1] = "QQ Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[88] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Mobile Safari"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[89] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPod).*Version/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Mobile Safari"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[90] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPhone).*Version/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Mobile Safari"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[91] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPhone).*Version/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Mobile Safari"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[92] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPad).*Version/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Mobile Safari"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[93] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPad).*Version/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Mobile Safari"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[94] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPod|iPhone|iPad);.*CPU.*OS (\\d+)(?:_\\d+)?_(\\d+).*Mobile"); | ||
parser[1] = "Mobile Safari"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[95] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPod|iPhone|iPad)"); | ||
parser[1] = "Mobile Safari"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[96] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(AvantGo) (\\d+).(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[97] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(OneBrowser)/(\\d+).(\\d+)"); | ||
parser[1] = "ONE Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[98] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Avant)"); | ||
parser[1] = 0; | ||
parser[2] = "1"; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[99] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(QtCarBrowser)"); | ||
parser[1] = 0; | ||
parser[2] = "1"; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[100] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("^(Nokia)"); | ||
parser[1] = "Nokia Services (WAP) Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[101] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)\\.(\\d+)"); | ||
parser[1] = "Nokia Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[102] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)"); | ||
parser[1] = "Nokia Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[103] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(NokiaBrowser)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Nokia Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[104] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(BrowserNG)/(\\d+)\\.(\\d+).(\\d+)"); | ||
parser[1] = "Nokia Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[105] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Series60)/5\\.0"); | ||
parser[1] = "Nokia Browser"; | ||
parser[2] = "7"; | ||
parser[3] = "0"; | ||
parser[4] = 0; | ||
exports.browser[106] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Series60)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Nokia OSS Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[107] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(S40OviBrowser)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Ovi Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[108] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Nokia)[EN]?(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[109] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(BB10);"); | ||
parser[1] = "BlackBerry WebKit"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[110] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "BlackBerry WebKit"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[111] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Black[bB]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "BlackBerry WebKit"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[112] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Black[bB]erry)\\s?(\\d+)"); | ||
parser[1] = "BlackBerry"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[113] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(OmniWeb)/v(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[114] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Blazer)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Palm Blazer"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[115] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Pre)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Palm Pre"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[116] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Links) \\((\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[117] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(QtWeb) Internet Browser/(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[118] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?"); | ||
parser[1] = "Amazon Silk"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[119] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(AppleWebKit)/(\\d+)\\.?(\\d+)?\\+ .* Safari"); | ||
parser[1] = "WebKit Nightly"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[120] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/"); | ||
parser[1] = "Safari"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[121] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Safari)/\\d+"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[122] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(OLPC)/Update(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[123] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(OLPC)/Update()\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = "0"; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[124] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(SEMC\\-Browser)/(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[125] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Teleca)"); | ||
parser[1] = "Teleca Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[126] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Phantom)/V(\\d+)\\.(\\d+)"); | ||
parser[1] = "Phantom Browser"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[127] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(MSIE) (\\d+)\\.(\\d+)"); | ||
parser[1] = "IE"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[128] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(python-requests)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Python Requests"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[129] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Thunderbird)/(\\d+)\\.(\\d+)\\.?(\\d+)?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[130] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Wget)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[131] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(curl)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "cURL"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.browser[132] = parser; | ||
exports.browser.length = 133; | ||
exports.device = Object.create(null); | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("HTC ([A-Z][a-z0-9]+) Build"); | ||
parser[1] = "HTC $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[0] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("HTC ([A-Z][a-z0-9 ]+) \\d+\\.\\d+\\.\\d+\\.\\d+"); | ||
parser[1] = "HTC $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[1] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("HTC_Touch_([A-Za-z0-9]+)"); | ||
parser[1] = "HTC Touch ($1)"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[2] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("USCCHTC(\\d+)"); | ||
parser[1] = "HTC $1 (US Cellular)"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[3] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Sprint APA(9292)"); | ||
parser[1] = "HTC $1 (Sprint)"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[4] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("HTC ([A-Za-z0-9]+ [A-Z])"); | ||
parser[1] = "HTC $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[5] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("HTC[-_/\\s]([A-Za-z0-9]+)"); | ||
parser[1] = "HTC $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[6] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(ADR[A-Za-z0-9]+)"); | ||
parser[1] = "HTC $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[7] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(HTC)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[8] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(QtCarBrowser)"); | ||
parser[1] = "Tesla Model S"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[9] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(SamsungSGHi560)"); | ||
parser[1] = "Samsung SGHi560"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[10] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("SonyEricsson([A-Za-z0-9]+)/"); | ||
parser[1] = "Ericsson $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[11] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("PLAYSTATION 3"); | ||
parser[1] = "PlayStation 3"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[12] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(PlayStation Portable)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[13] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(PlayStation Vita)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[14] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(KFOT Build)"); | ||
parser[1] = "Kindle Fire"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[15] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(KFTT Build)"); | ||
parser[1] = "Kindle Fire HD"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[16] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(KFJWI Build)"); | ||
parser[1] = "Kindle Fire HD 8.9\" WiFi"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[17] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(KFJWA Build)"); | ||
parser[1] = "Kindle Fire HD 8.9\" 4G"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[18] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Kindle Fire)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[19] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Kindle)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[20] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?"); | ||
parser[1] = "Kindle Fire"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[21] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Android[\\- ][\\d]+\\.[\\d]+; [A-Za-z]{2}\\-[A-Za-z]{2}; WOWMobile (.+) Build"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[22] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\-update1; [A-Za-z]{2}\\-[A-Za-z]{2}; (.+) Build"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[23] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; [A-Za-z]{2}\\-[A-Za-z]{2}; (.+) Build"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[24] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+;[A-Za-z]{2}\\-[A-Za-z]{2};(.+) Build"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[25] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Android[\\- ][\\d]+\\.[\\d]+; [A-Za-z]{2}\\-[A-Za-z]{2}; (.+) Build"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[26] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; (.+) Build"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[27] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Android[\\- ][\\d]+\\.[\\d]+; (.+) Build"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[28] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("NokiaN([0-9]+)"); | ||
parser[1] = "Nokia N$1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[29] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("NOKIA([A-Za-z0-9\\v-]+)"); | ||
parser[1] = "Nokia $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[30] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Nokia([A-Za-z0-9\\v-]+)"); | ||
parser[1] = "Nokia $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[31] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("NOKIA ([A-Za-z0-9\\-]+)"); | ||
parser[1] = "Nokia $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[32] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Nokia ([A-Za-z0-9\\-]+)"); | ||
parser[1] = "Nokia $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[33] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Lumia ([A-Za-z0-9\\-]+)"); | ||
parser[1] = "Lumia $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[34] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Symbian"); | ||
parser[1] = "Nokia"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[35] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("BB10; ([A-Za-z0-9\\- ]+)\\)"); | ||
parser[1] = "BlackBerry $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[36] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(PlayBook).+RIM Tablet OS"); | ||
parser[1] = "BlackBerry Playbook"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[37] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Black[Bb]erry ([0-9]+);"); | ||
parser[1] = "BlackBerry $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[38] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Black[Bb]erry([0-9]+)"); | ||
parser[1] = "BlackBerry $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[39] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Black[Bb]erry;"); | ||
parser[1] = "BlackBerry"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[40] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Pre)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Palm Pre"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[41] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Pixi)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Palm Pixi"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[42] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Touch[Pp]ad)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "HP TouchPad"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[43] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("HPiPAQ([A-Za-z0-9]+)/(\\d+).(\\d+)"); | ||
parser[1] = "HP iPAQ $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[44] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Palm([A-Za-z0-9]+)"); | ||
parser[1] = "Palm $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[45] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Treo([A-Za-z0-9]+)"); | ||
parser[1] = "Palm Treo $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[46] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("webOS.*(P160UNA)/(\\d+).(\\d+)"); | ||
parser[1] = "HP Veer"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[47] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(AppleTV)"); | ||
parser[1] = "AppleTV"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[48] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPad) Simulator;"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[49] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPad);"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[50] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPod);"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[51] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPhone) Simulator;"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[52] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPhone);"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[53] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("acer_([A-Za-z0-9]+)_"); | ||
parser[1] = "Acer $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[54] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("acer_([A-Za-z0-9]+)_"); | ||
parser[1] = "Acer $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[55] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("ALCATEL-([A-Za-z0-9]+)"); | ||
parser[1] = "Alcatel $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[56] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Alcatel-([A-Za-z0-9]+)"); | ||
parser[1] = "Alcatel $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[57] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Amoi\\-([A-Za-z0-9]+)"); | ||
parser[1] = "Amoi $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[58] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("AMOI\\-([A-Za-z0-9]+)"); | ||
parser[1] = "Amoi $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[59] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Asus\\-([A-Za-z0-9]+)"); | ||
parser[1] = "Asus $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[60] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("ASUS\\-([A-Za-z0-9]+)"); | ||
parser[1] = "Asus $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[61] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("BIRD\\-([A-Za-z0-9]+)"); | ||
parser[1] = "Bird $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[62] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("BIRD\\.([A-Za-z0-9]+)"); | ||
parser[1] = "Bird $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[63] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("BIRD ([A-Za-z0-9]+)"); | ||
parser[1] = "Bird $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[64] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Dell ([A-Za-z0-9]+)"); | ||
parser[1] = "Dell $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[65] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("DoCoMo/2\\.0 ([A-Za-z0-9]+)"); | ||
parser[1] = "DoCoMo $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[66] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("([A-Za-z0-9]+)_W\\;FOMA"); | ||
parser[1] = "DoCoMo $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[67] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("([A-Za-z0-9]+)\\;FOMA"); | ||
parser[1] = "DoCoMo $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[68] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Huawei([A-Za-z0-9]+)"); | ||
parser[1] = "Huawei $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[69] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("HUAWEI-([A-Za-z0-9]+)"); | ||
parser[1] = "Huawei $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[70] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("vodafone([A-Za-z0-9]+)"); | ||
parser[1] = "Huawei Vodafone $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[71] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("i\\-mate ([A-Za-z0-9]+)"); | ||
parser[1] = "i-mate $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[72] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Kyocera\\-([A-Za-z0-9]+)"); | ||
parser[1] = "Kyocera $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[73] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("KWC\\-([A-Za-z0-9]+)"); | ||
parser[1] = "Kyocera $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[74] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Lenovo\\-([A-Za-z0-9]+)"); | ||
parser[1] = "Lenovo $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[75] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Lenovo_([A-Za-z0-9]+)"); | ||
parser[1] = "Lenovo $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[76] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("LG/([A-Za-z0-9]+)"); | ||
parser[1] = "LG $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[77] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("LG-LG([A-Za-z0-9]+)"); | ||
parser[1] = "LG $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[78] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("LGE-LG([A-Za-z0-9]+)"); | ||
parser[1] = "LG $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[79] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("LGE VX([A-Za-z0-9]+)"); | ||
parser[1] = "LG $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[80] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("LG ([A-Za-z0-9]+)"); | ||
parser[1] = "LG $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[81] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("LGE LG\\-AX([A-Za-z0-9]+)"); | ||
parser[1] = "LG $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[82] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("LG\\-([A-Za-z0-9]+)"); | ||
parser[1] = "LG $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[83] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("LGE\\-([A-Za-z0-9]+)"); | ||
parser[1] = "LG $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[84] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("LG([A-Za-z0-9]+)"); | ||
parser[1] = "LG $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[85] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(KIN)\\.One (\\d+)\\.(\\d+)"); | ||
parser[1] = "Microsoft $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[86] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(KIN)\\.Two (\\d+)\\.(\\d+)"); | ||
parser[1] = "Microsoft $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[87] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Motorola)\\-([A-Za-z0-9]+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[88] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("MOTO\\-([A-Za-z0-9]+)"); | ||
parser[1] = "Motorola $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[89] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("MOT\\-([A-Za-z0-9]+)"); | ||
parser[1] = "Motorola $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[90] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Nintendo WiiU)"); | ||
parser[1] = "Nintendo Wii U"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[91] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Nintendo (DS|3DS|DSi|Wii);"); | ||
parser[1] = "Nintendo $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[92] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Pantech([A-Za-z0-9]+)"); | ||
parser[1] = "Pantech $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[93] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Philips([A-Za-z0-9]+)"); | ||
parser[1] = "Philips $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[94] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Philips ([A-Za-z0-9]+)"); | ||
parser[1] = "Philips $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[95] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("SAMSUNG-([A-Za-z0-9\\-]+)"); | ||
parser[1] = "Samsung $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[96] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("SAMSUNG\\; ([A-Za-z0-9\\-]+)"); | ||
parser[1] = "Samsung $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[97] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Dreamcast"); | ||
parser[1] = "Sega Dreamcast"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[98] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Softbank/1\\.0/([A-Za-z0-9]+)"); | ||
parser[1] = "Softbank $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[99] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Softbank/2\\.0/([A-Za-z0-9]+)"); | ||
parser[1] = "Softbank $1"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[100] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(hiptop|avantgo|plucker|xiino|blazer|elaine|up.browser|up.link|mmp|smartphone|midp|wap|vodafone|o2|pocket|mobile|pda)"); | ||
parser[1] = "Generic Smartphone"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[101] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\\-|airn|alav|asus|attw|au\\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\\-n|bw\\-u|beck|benq|bilb|blac|c55/|cdm\\-|chtm|capi|comp|cond|craw|dall|dbte|dc\\-s|dica|ds\\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\\-|fly_|g\\-mo|g1 u|g560|gf\\-5|grun|gene|go.w|good|grad|hcit|hd\\-m|hd\\-p|hd\\-t|hei\\-|hp i|hpip|hs\\-c|htc |htc\\-|htca|htcg)"); | ||
parser[1] = "Generic Feature Phone"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[102] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("^(htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i\\-20|i\\-go|i\\-ma|i230|iac|iac\\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\\-|klon|lexi|lg g|lg\\-a|lg\\-b|lg\\-c|lg\\-d|lg\\-f|lg\\-g|lg\\-k|lg\\-l|lg\\-m|lg\\-o|lg\\-p|lg\\-s|lg\\-t|lg\\-u|lg\\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\\-|lge/|lynx|leno|m1\\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\\-|nem\\-|newg|neon)"); | ||
parser[1] = "Generic Feature Phone"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[103] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("^(netf|noki|nzph|o2 x|o2\\-x|opwv|owg1|opti|oran|ot\\-s|p800|pand|pg\\-1|pg\\-2|pg\\-3|pg\\-6|pg\\-8|pg\\-c|pg13|phil|pn\\-2|pt\\-g|palm|pana|pire|pock|pose|psio|qa\\-a|qc\\-2|qc\\-3|qc\\-5|qc\\-7|qc07|qc12|qc21|qc32|qc60|qci\\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\\-|scp\\-|sdk/|se47|sec\\-|sec0|sec1|semc|sgh\\-|shar|sie\\-|sk\\-0|sl45|slid|smb3|smt5|sp01|sph\\-|spv |spv\\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\\-mo|t218|t250|t600|t610|t618|tcl\\-|tdg\\-|telm|tim\\-|ts70|tsm\\-|tsm3|tsm5|tx\\-9|tagt)"); | ||
parser[1] = "Generic Feature Phone"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[104] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\\-|your|zte\\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\\-|webc|whit|wmlb|xda\\-|xda_)"); | ||
parser[1] = "Generic Feature Phone"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[105] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\\-webcrawler|converacrawler|dataparksearch|findlinks)"); | ||
parser[1] = "Spider"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.device[106] = parser; | ||
exports.device.length = 107; | ||
exports.os = Object.create(null); | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) (\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[0] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android)\\-(\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[1] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) Donut"); | ||
parser[1] = 0; | ||
parser[2] = "1"; | ||
parser[3] = "2"; | ||
parser[4] = 0; | ||
exports.os[2] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) Eclair"); | ||
parser[1] = 0; | ||
parser[2] = "2"; | ||
parser[3] = "1"; | ||
parser[4] = 0; | ||
exports.os[3] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) Froyo"); | ||
parser[1] = 0; | ||
parser[2] = "2"; | ||
parser[3] = "2"; | ||
parser[4] = 0; | ||
exports.os[4] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) Gingerbread"); | ||
parser[1] = 0; | ||
parser[2] = "2"; | ||
parser[3] = "3"; | ||
parser[4] = 0; | ||
exports.os[5] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Android) Honeycomb"); | ||
parser[1] = 0; | ||
parser[2] = "3"; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[6] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Silk-Accelerated=[a-z]{4,5})"); | ||
parser[1] = "Android"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[7] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows (?:NT 5\\.2|NT 5\\.1))"); | ||
parser[1] = "Windows XP"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[8] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(XBLWP7)"); | ||
parser[1] = "Windows Phone"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[9] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows NT 6\\.1)"); | ||
parser[1] = "Windows 7"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[10] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows NT 6\\.0)"); | ||
parser[1] = "Windows Vista"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[11] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\\.0|Windows Vista|Windows 2000|Windows 3.1)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[12] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows NT 6\\.2; ARM;)"); | ||
parser[1] = "Windows RT"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[13] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows NT 6\\.2)"); | ||
parser[1] = "Windows 8"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[14] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows NT 5\\.0)"); | ||
parser[1] = "Windows 2000"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[15] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows Phone) (\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[16] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows Phone) OS (\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[17] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows ?Mobile)"); | ||
parser[1] = "Windows Mobile"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[18] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(WinNT4.0)"); | ||
parser[1] = "Windows NT 4.0"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[19] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Win98)"); | ||
parser[1] = "Windows 98"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[20] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Tizen)/(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[21] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Mac OS X) (\\d+)[_.](\\d+)(?:[_.](\\d+))?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[22] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Mac_PowerPC"); | ||
parser[1] = "Mac OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[23] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(?:PPC|Intel) (Mac OS X)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[24] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(CPU OS|iPhone OS) (\\d+)_(\\d+)(?:_(\\d+))?"); | ||
parser[1] = "iOS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[25] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPhone|iPad|iPod); Opera"); | ||
parser[1] = "iOS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[26] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(iPhone|iPad|iPod).*Mac OS X.*Version/(\\d+)\\.(\\d+)"); | ||
parser[1] = "iOS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[27] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(AppleTV)/(\\d+)\\.(\\d+)"); | ||
parser[1] = "ATV OS X"; | ||
parser[2] = "$1"; | ||
parser[3] = "$2"; | ||
parser[4] = 0; | ||
exports.os[28] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(CrOS) [a-z0-9_]+ (\\d+)\\.(\\d+)(?:\\.(\\d+))?"); | ||
parser[1] = "Chrome OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[29] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Debian)-(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[30] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Linux Mint)(?:/(\\d+))?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[31] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Mandriva)(?: Linux)?/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[32] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Symbian[Oo][Ss])/(\\d+)\\.(\\d+)"); | ||
parser[1] = "Symbian OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[33] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Symbian/3).+NokiaBrowser/7\\.3"); | ||
parser[1] = "Symbian^3 Anna"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[34] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Symbian/3).+NokiaBrowser/7\\.4"); | ||
parser[1] = "Symbian^3 Belle"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[35] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Symbian/3)"); | ||
parser[1] = "Symbian^3"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[36] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Series 60|SymbOS|S60)"); | ||
parser[1] = "Symbian OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[37] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(MeeGo)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[38] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Symbian [Oo][Ss]"); | ||
parser[1] = "Symbian OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[39] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("Series40;"); | ||
parser[1] = "Nokia Series 40"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[40] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(BB10);.+Version/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "BlackBerry OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[41] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Black[Bb]erry)[0-9a-z]+/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"); | ||
parser[1] = "BlackBerry OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[42] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Black[Bb]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?"); | ||
parser[1] = "BlackBerry OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[43] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(RIM Tablet OS) (\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "BlackBerry Tablet OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[44] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Play[Bb]ook)"); | ||
parser[1] = "BlackBerry Tablet OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[45] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Black[Bb]erry)"); | ||
parser[1] = "BlackBerry OS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[46] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(BREW)[ /](\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[47] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(BREW);"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[48] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Brew MP|BMP)[ /](\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = "Brew MP"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[49] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("BMP;"); | ||
parser[1] = "Brew MP"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[50] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(GoogleTV) (\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[51] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(GoogleTV)\\/\\d+"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[52] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(hpw|web)OS/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"); | ||
parser[1] = "webOS"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[53] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(VRE);"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[54] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(SUSE|Fedora|Red Hat|PCLinuxOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[55] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(SUSE|Fedora|Red Hat|Puppy|PCLinuxOS|CentOS)/(\\d+)\\.(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[56] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Red Hat|Slackware)/(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[57] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Windows|OpenBSD|FreeBSD|NetBSD|Ubuntu|Kubuntu|Android|Arch Linux|CentOS|WeTab|Slackware)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[58] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Linux)/(\\d+)\\.(\\d+)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[59] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Linux|BSD)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[60] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("SunOS"); | ||
parser[1] = "Solaris"; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[61] = parser; | ||
parser = Object.create(null); | ||
parser[0] = new RegExp("(Red Hat)"); | ||
parser[1] = 0; | ||
parser[2] = 0; | ||
parser[3] = 0; | ||
parser[4] = 0; | ||
exports.os[62] = parser; | ||
exports.os.length = 63; |
@@ -30,3 +30,3 @@ 'use strict'; | ||
if (!err && source) { | ||
if (source) { | ||
fs.writeFile(exports.output, source, function idk(err) { | ||
@@ -46,3 +46,3 @@ if (err) { | ||
sources.forEach(function parser(data) { | ||
var data = sources.reduce(function parser(memo, data) { | ||
// Try to repair some of the odd structures that are in the yaml files | ||
@@ -60,52 +60,87 @@ // before parsing it so we generate a uniform structure: | ||
callback(e); | ||
return callback = null; | ||
callback = null; | ||
return memo; | ||
} | ||
[ | ||
{ resource: 'user_agent_parsers', replacement: 'family_replacement' } | ||
, { resource: 'device_parsers', replacement: 'device_replacement' } | ||
, { resource: 'os_parsers', replacement: 'os_replacement' } | ||
].forEach(function parsing(details) { | ||
results[details.resource] = results[details.resource] || []; | ||
// merge the data with the memo; | ||
Object.keys(data).forEach(function (key) { | ||
var results = data[key]; | ||
memo[key] = memo[key] || []; | ||
var resources = data[details.resource] | ||
, resource | ||
, parser; | ||
for (var i = 0, l = results.length; i < l; i++) { | ||
memo[key].push(results[i]); | ||
} | ||
}); | ||
for (var i = 0, l = resources.length; i < l; i++) { | ||
resource = resources[i]; | ||
return memo; | ||
}, {}); | ||
// We need to JSON stringify the data to properly add slashes escape other | ||
// kinds of crap in the RegularExpression. If we don't do thing we get | ||
// some illegal token warnings. | ||
parser = 'new RegExp('+ JSON.stringify(resource.regex) + ')'; | ||
[ | ||
{ | ||
resource: 'user_agent_parsers' | ||
, replacement: 'family_replacement' | ||
, name: 'browser' | ||
} | ||
, { | ||
resource: 'device_parsers' | ||
, replacement: 'device_replacement' | ||
, name: 'device' | ||
} | ||
, { | ||
resource: 'os_parsers' | ||
, replacement: 'os_replacement' | ||
, name: 'os' | ||
} | ||
].forEach(function parsing(details) { | ||
results[details.resource] = results[details.resource] || []; | ||
// Check if we have replacement for the parsed family name | ||
if (resource[details.replacement]) { | ||
parser += ', "'+ resource[details.replacement].replace('"', '\\"') +'"'; | ||
} else { | ||
parser += ', 0'; | ||
} | ||
var resources = data[details.resource] | ||
, name = details.resource.replace('_parsers', '') | ||
, resource | ||
, parser; | ||
if (resource.v1_replacement) { | ||
parser += ', "'+ resource.v1_replacement.replace('"', '\\"') +'"'; | ||
} else { | ||
parser += ', 0'; | ||
} | ||
for (var i = 0, l = resources.length; i < l; i++) { | ||
resource = resources[i]; | ||
if (resource.v2_replacement) { | ||
parser += ', "'+ resource.v2_replacement.replace('"', '\\"') +'"'; | ||
} else { | ||
parser += ', 0'; | ||
} | ||
// We need to JSON stringify the data to properly add slashes escape other | ||
// kinds of crap in the RegularExpression. If we don't do thing we get | ||
// some illegal token warnings. | ||
parser = 'parser = Object.create(null);\n'; | ||
parser += 'parser[0] = new RegExp('+ JSON.stringify(resource.regex) + ');\n'; | ||
if (resource.v3_replacement) { | ||
parser += ', "'+ resource.v3_replacement.replace('"', '\\"') +'"'; | ||
} else { | ||
parser += ', 0'; | ||
} | ||
// Check if we have replacement for the parsed family name | ||
if (resource[details.replacement]) { | ||
parser += 'parser[1] = "'+ resource[details.replacement].replace('"', '\\"') +'";'; | ||
} else { | ||
parser += 'parser[1] = 0;'; | ||
} | ||
results[details.resource].push('[ ' + parser + ' ]'); | ||
parser += '\n'; | ||
if (resource.v1_replacement) { | ||
parser += 'parser[2] = "'+ resource.v1_replacement.replace('"', '\\"') +'";'; | ||
} else { | ||
parser += 'parser[2] = 0;'; | ||
} | ||
}); | ||
parser += '\n'; | ||
if (resource.v2_replacement) { | ||
parser += 'parser[3] = "'+ resource.v2_replacement.replace('"', '\\"') +'";'; | ||
} else { | ||
parser += 'parser[3] = 0;'; | ||
} | ||
parser += '\n'; | ||
if (resource.v3_replacement) { | ||
parser += 'parser[4] = "'+ resource.v3_replacement.replace('"', '\\"') +'";'; | ||
} else { | ||
parser += 'parser[4] = 0;'; | ||
} | ||
parser += '\n'; | ||
parser += 'exports.'+ details.name +'['+ i +'] = parser;'; | ||
results[details.resource].push(parser); | ||
} | ||
}); | ||
@@ -119,5 +154,14 @@ | ||
var regexps = [ | ||
'exports.browser = [\n '+ results.user_agent_parsers.join('\n , ') +'\n];' | ||
, 'exports.device = [\n '+ results.device_parsers.join('\n , ') +'\n];' | ||
, 'exports.os = [\n '+ results.os_parsers.join('\n , ') +'\n];' | ||
'var parser;' | ||
, 'exports.browser = Object.create(null);' | ||
, results.user_agent_parsers.join('\n') | ||
, 'exports.browser.length = '+ results.user_agent_parsers.length +';' | ||
, 'exports.device = Object.create(null);' | ||
, results.device_parsers.join('\n') | ||
, 'exports.device.length = '+ results.device_parsers.length +';' | ||
, 'exports.os = Object.create(null);' | ||
, results.os_parsers.join('\n') | ||
, 'exports.os.length = '+ results.os_parsers.length +';' | ||
].join('\n\n'); | ||
@@ -135,3 +179,3 @@ | ||
try { vm.runInNewContext(regexps, sandbox, 'validating.vm'); } | ||
catch (e) { return callback(e); } | ||
catch (e) { return callback(e, null, regexps); } | ||
@@ -138,0 +182,0 @@ callback(undefined, sandbox.exports, regexps); |
{ | ||
"name": "useragent" | ||
, "version": "2.0.0" | ||
, "version": "2.0.1" | ||
, "description": "Fastest, most accurate & effecient user agent string parser, uses browserscope's research for parsing" | ||
@@ -5,0 +5,0 @@ , "author": "Arnout Kazemier" |
@@ -29,12 +29,12 @@ # useragent - high performance user agent parser for Node.js | ||
Executed benchmark against node module: "useragent" | ||
Count (49), Cycles (4), Elapsed (5.531), Hz (946.8647887795141) | ||
Count (61), Cycles (5), Elapsed (5.559), Hz (1141.3739447904327) | ||
Executed benchmark against node module: "useragent_parser" | ||
Count (25), Cycles (2), Elapsed (5.359), Hz (463.63241573609633) | ||
Count (29), Cycles (3), Elapsed (5.448), Hz (545.6817291171243) | ||
Executed benchmark against node module: "useragent-parser" | ||
Count (13), Cycles (4), Elapsed (5.468), Hz (246.70547120951275) | ||
Count (16), Cycles (4), Elapsed (5.48), Hz (304.5373431830105) | ||
Executed benchmark against node module: "ua-parser" | ||
Count (13), Cycles (3), Elapsed (5.481), Hz (243.57388988788998) | ||
Count (54), Cycles (3), Elapsed (5.512), Hz (1018.7561434659247) | ||
@@ -365,2 +365,4 @@ Module: "useragent" is the user agent fastest parser. | ||
still a string only representation do `agent.os.toString()`. | ||
- `semver` has been removed from the dependencies, so if you are using the | ||
`require('useragent/features')` you need to add it to your own dependencies | ||
@@ -367,0 +369,0 @@ #### Upgrading from 0.1.2 to 1.0.0 |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
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
104288
17
3030
388
6