123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- // uaparser by lindsey simon,
- // ported to node by tobie
- // https://github.com/tobie/ua-parser/
- // browserized by paul irish
- (function(exports){
- exports.uaparse = parse;
-
- function parse(ua) {
- for (var i=0; i < parsers.length; i++) {
- var result = parsers[i](ua);
- if (result) { return result; }
- }
- return new UserAgent();
- }
- function UserAgent(family) {
- this.family = family || 'Other';
- }
- UserAgent.prototype.toVersionString = function() {
- var output = '';
- if (this.major != null) {
- output += this.major;
- if (this.minor != null) {
- output += '.' + this.minor;
- if (this.patch != null) {
- output += '.' + this.patch;
- }
- }
- }
- return output;
- };
- UserAgent.prototype.toString = function() {
- var suffix = this.toVersionString();
- if (suffix) { suffix = ' ' + suffix; }
- return this.family + suffix;
- };
-
-
- var regexes = [
- {"pattern":"^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii",
- "v1_replacement":null,
- "family_replacement":"Wii"},
- {"pattern":"(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)",
- "v1_replacement":null,
- "family_replacement":"Firefox ($1)"},
- {"pattern":"(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?",
- "v1_replacement":null,
- "family_replacement":"Firefox ($1)"},
- {"pattern":"(SeaMonkey|Fennec|Camino)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Flock)/(\\d+)\\.(\\d+)(b\\d+?)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Fennec)/(\\d+)\\.(\\d+)(pre)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"Netscape"},
- {"pattern":"(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)",
- "v1_replacement":null,
- "family_replacement":"Netscape"},
- {"pattern":"(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"Netscape"},
- {"pattern":"(MyIBrow)/(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"My Internet Browser"},
- {"pattern":"(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"MicroB"},
- {"pattern":"(Opera)/9.80.*Version\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)",
- "v1_replacement":null,
- "family_replacement":"Swiftfox"},
- {"pattern":"(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)",
- "v1_replacement":null,
- "family_replacement":"Swiftfox"},
- {"pattern":"(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"Konqueror"},
- {"pattern":"(Jasmine|ANTGalio|Midori|Fresco|Lobo|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Vodafone|NetFront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|Iron|Iris)/(\\d+)\\.(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Bolt|Jasmine|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Iron|Space Bison|Stainless|Orca)/(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(iCab|Lunascape|Opera|Android) (\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(IEMobile) (\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"IE Mobile"},
- {"pattern":"(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?",
- "v1_replacement":null,
- "family_replacement":"Obigo"},
- {"pattern":"(MAXTHON|Maxthon) (\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"Maxthon"},
- {"pattern":"(Maxthon|MyIE2|Uzbl|Shiira)",
- "v1_replacement":"0",
- "family_replacement":null},
- {"pattern":"(PLAYSTATION) (\\d+)",
- "v1_replacement":null,
- "family_replacement":"PlayStation"},
- {"pattern":"(PlayStation Portable)[^\\d]+(\\d+).(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Opera)/(\\d+)\\.(\\d+).*Opera Mobi",
- "v1_replacement":null,
- "family_replacement":"Opera Mobile"},
- {"pattern":"(POLARIS)/(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"Polaris"},
- {"pattern":"(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"Bon Echo"},
- {"pattern":"(iPhone) OS (\\d+)_(\\d+)(?:_(\\d+))?",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Avant)",
- "v1_replacement":"1",
- "family_replacement":null},
- {"pattern":"(Nokia)[EN]?(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Black[bB]erry)(\\d+)",
- "v1_replacement":null,
- "family_replacement":"Blackberry"},
- {"pattern":"(OmniWeb)/v(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Blazer)/(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"Palm Blazer"},
- {"pattern":"(Pre)/(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"Palm Pre"},
- {"pattern":"(Links) \\((\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(QtWeb) Internet Browser/(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/",
- "v1_replacement":null,
- "family_replacement":"Safari"},
- {"pattern":"(OLPC)/Update(\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(OLPC)/Update()\\.(\\d+)",
- "v1_replacement":"0",
- "family_replacement":null},
- {"pattern":"(SamsungSGHi560)",
- "v1_replacement":null,
- "family_replacement":"Samsung SGHi560"},
- {"pattern":"^(SonyEricssonK800i)",
- "v1_replacement":null,
- "family_replacement":"Sony Ericsson K800i"},
- {"pattern":"(Teleca Q7)",
- "v1_replacement":null,
- "family_replacement":null},
- {"pattern":"(MSIE) (\\d+)\\.(\\d+)",
- "v1_replacement":null,
- "family_replacement":"IE"}
- ];
-
- var parsers = regexes.map(function(obj) {
- var regexp = new RegExp(obj.pattern),
- famRep = obj.family_replacement,
- v1Rep = obj.v1_replacement;
- function parser(ua) {
- var m = ua.match(regexp);
- if (!m) { return null; }
- var familly = famRep ? famRep.replace('$1', m[1]) : m[1];
- var obj = new UserAgent(familly);
- obj.major = parseInt(v1Rep ? v1Rep : m[2]);
- obj.minor = m[3] ? parseInt(m[3]) : null;
- obj.patch = m[4] ? parseInt(m[4]) : null;
- return obj;
- }
- return parser;
- });
-
-
- })(window);
|