Compare commits

..

14 Commits

Author SHA1 Message Date
Faisalman
3fe07487cd Add OS/2, Plan 9, AIX, QNX 2012-11-07 17:03:23 +07:00
Faisalman
8030aa33f7 Add Mosaic, Chimera, Firebird, Phoenix 2012-11-07 16:32:33 +07:00
Faisalman
99251addfc Exclude the letter 'v' from Omniweb version 2012-11-07 15:25:20 +07:00
Faisalman
610cdb84ae Improve Mac OS detection 2012-11-07 15:22:29 +07:00
Faisalman
31b386c636 Add Baidu, Yandex, UCBrowser. Make Apple & RIM as vendor name 2012-11-06 15:53:17 +07:00
Faisalman
b15b48b1bf Rename Dolfin as Dolphin 2012-11-06 14:22:26 +07:00
Faisalman
58fe246468 Add S60 & OviBrowser 2012-11-06 14:18:28 +07:00
Faisalman
e1d3f25bf8 Get device type defined by Firefox 2012-11-06 12:24:12 +07:00
Faisal Salman
4efb13be3e Return unidentified version as undefined 2012-11-02 18:22:06 +07:00
Faisal Salman
bf9fb794d8 Fix issue #3 for old Safari < 3.0 2012-11-02 17:41:29 +07:00
Faisal Salman
df815d4109 Merge pull request #3 from cadecairos/safari-fix
Fix Safari version detection
2012-11-01 23:50:15 -07:00
Christopher De Cairos
6dcee61a0b Fix Safari version detection 2012-11-01 17:11:07 -04:00
Faisal Salman
0288766544 Check if userAgent property is defined 2012-10-23 17:35:24 +07:00
Faisal Salman
7ea79afc2f Fix issue #2 2012-10-22 16:04:23 +07:00
2 changed files with 103 additions and 56 deletions

View File

@@ -1,7 +1,7 @@
{ {
"title": "UA-Parser.JS", "title": "UA-Parser.JS",
"name": "ua-parser-js", "name": "ua-parser-js",
"version": "0.4.3", "version": "0.4.8",
"author": "Faisal Salman <fyzlman@gmail.com> (http://faisalman.com)", "author": "Faisal Salman <fyzlman@gmail.com> (http://faisalman.com)",
"description": "Lightweight JavaScript-based user-agent string parser", "description": "Lightweight JavaScript-based user-agent string parser",
"keywords": [ "keywords": [

View File

@@ -1,4 +1,4 @@
// UA-Parser.JS v0.4.3 // UA-Parser.JS v0.4.8
// Lightweight JavaScript-based User-Agent string parser // Lightweight JavaScript-based User-Agent string parser
// https://github.com/faisalman/ua-parser-js // https://github.com/faisalman/ua-parser-js
// //
@@ -45,7 +45,7 @@
if (typeof props[k] === 'object' && props[k].length === 2) { if (typeof props[k] === 'object' && props[k].length === 2) {
result[props[k][0]] = props[k][1]; result[props[k][0]] = props[k][1];
} else if (typeof props[k] === 'object' && props[k].length === 3) { } else if (typeof props[k] === 'object' && props[k].length === 3) {
if (typeof props[k][1] === 'function') { if (typeof props[k][1] === 'function' && !(props[k][1].exec && props[k][1].test)) {
result[props[k][0]] = m ? props[k][1].call(this, m, props[k][2]) : undefined; result[props[k][0]] = m ? props[k][1].call(this, m, props[k][2]) : undefined;
} else { } else {
result[props[k][0]] = m ? m.replace(props[k][1], props[k][2]) : undefined; result[props[k][0]] = m ? m.replace(props[k][1], props[k][2]) : undefined;
@@ -70,11 +70,11 @@
if (typeof map[i] === 'object' && map[i].length > 0) { if (typeof map[i] === 'object' && map[i].length > 0) {
for (var j = 0; j < map[i].length; j++) { for (var j = 0; j < map[i].length; j++) {
if (str.toLowerCase().indexOf(map[i][j].toLowerCase()) !== -1) { if (str.toLowerCase().indexOf(map[i][j].toLowerCase()) !== -1) {
return i; return (i.toString() === 'undefined') ? undefined : i;
} }
} }
} else if (str.toLowerCase().indexOf(map[i].toLowerCase()) !== -1) { } else if (str.toLowerCase().indexOf(map[i].toLowerCase()) !== -1) {
return i; return (i.toString() === 'undefined') ? undefined : i;
} }
} }
} }
@@ -83,6 +83,25 @@
}; };
var maps = { var maps = {
browser : {
oldsafari : {
major : {
'1' : ['/85', '/125', '/312'],
'2' : ['/412', '/416', '/417', '/419'],
'undefined' : '/'
},
version : {
'1.0' : '/85',
'1.2' : '/125',
'1.3' : '/312',
'2.0' : '/412',
'2.0.2' : '/416',
'2.0.3' : '/417',
'2.0.4' : '/419',
'undefined' : '/'
}
}
},
os : { os : {
windows : { windows : {
version : { version : {
@@ -115,43 +134,65 @@
// Lunascape/Maxthon/Netfront/Jasmine/Blazer // Lunascape/Maxthon/Netfront/Jasmine/Blazer
// Trident based // Trident based
/(avant\sbrowser|iemobile|slimbrowser)[\/\s]?((\d+)?[\w\.]*)/i, // Avant/IEMobile/SlimBrowser /(avant\sbrowser|iemobile|slimbrowser|baidubrowser)[\/\s]?((\d+)?[\w\.]*)/i,
// Avant/IEMobile/SlimBrowser/Baidu
/ms(ie)\s((\d+)?[\w\.]+)/i, // Internet Explorer /ms(ie)\s((\d+)?[\w\.]+)/i, // Internet Explorer
// Webkit/KHTML based // Webkit/KHTML based
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|series60|bolt)\/((\d+)?[\w\.]+)/i, /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|s60|series60|ovibrowser|bolt)\/((\d+)?[\w\.]+)/i,
// Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/S60/Bolt // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/S60/Bolt
/(chrome|omniweb|arora|dolfin|[tizenoka]{5}\s?browser)\/((\d+)?[\w\.]+)/i, /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?((\d+)?[\w\.]+)/i,
// Chrome/OmniWeb/Arora/Dolphin/Tizen/Nokia // Chrome/OmniWeb/Arora/Tizen/Nokia
], ['name', 'version', 'major'], [ ], ['name', 'version', 'major'], [
/(dolfin)\/((\d+)?[\w\.]+)/i // Dolphin
], [['name', 'Dolphin'], 'version', 'major'], [
/(yabrowser)\/((\d+)?[\w\.]+)/i // Yandex
], [['name', 'Yandex'], 'version', 'major'], [
/(?:android.+(crmo|crios))\/((\d+)?[\w\.]+)/i, // Chrome for Android/iOS /(?:android.+(crmo|crios))\/((\d+)?[\w\.]+)/i, // Chrome for Android/iOS
], [['name', 'Chrome'], 'version', 'major'], [ ], [['name', 'Chrome'], 'version', 'major'], [
/(mobile\ssafari|safari|konqueror)\/((\d+)?[\w\.]+)/i, // Safari/Konqueror
/version\/((\d+)?[\w\.]+).+(mobile\s?safari|safari)/i // Safari & Safari Mobile
], ['version', 'major', 'name'], [
/applewebkit.+(mobile\s?safari|safari)((\/[\w\.]+))/i // Safari < 3.0
], ['name', ['major', mapper.string, maps.browser.oldsafari.major], ['version', mapper.string, maps.browser.oldsafari.version]], [
/(konqueror)\/((\d+)?[\w\.]+)/i, // Konqueror
/(applewebkit|khtml)\/((\d+)?[\w\.]+)/i, /(applewebkit|khtml)\/((\d+)?[\w\.]+)/i,
// Gecko based // Gecko based
/(iceweasel|camino|fennec|maemo\sbrowser|minimo)[\/\s]?((\d+)?[\w\.\+]+)/i, /(iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo)[\/\s]?((\d+)?[\w\.\+]+)/i,
// Iceweasel/Camino/Fennec/Maemo/Minimo // Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo
/(firefox|seamonkey|netscape|navigator|k-meleon|icecat|iceape)\/((\d+)?[\w\.]+)/i, /(firefox|seamonkey|netscape|navigator|k-meleon|icecat|iceape|firebird|phoenix)\/((\d+)?[\w\.]+)/i,
// Firefox/SeaMonkey/Netscape/K-Meleon/IceCat/IceApe // Firefox/SeaMonkey/Netscape/K-Meleon/IceCat/IceApe/Firebird/Phoenix
/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla /(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla
// Other // Other
/(uc\s?browser)\/?((\d+)?[\w\.]+)/i, // UCBrowser
/(lynx|dillo|icab|doris)[\/\s]?((\d+)?[\w\.]+)/i, // Lynx/Dillo/iCab/Doris /(lynx|dillo|icab|doris)[\/\s]?((\d+)?[\w\.]+)/i, // Lynx/Dillo/iCab/Doris
/(gobrowser)\/?[\d\.]*/i // GoBrowser /(gobrowser)\/?[\d\.]*/i, // GoBrowser
/(mosaic)[\/\s]((\d+)?[\w\.]+)/i
// Mosaic
], ['name', 'version', 'major'] ], ['name', 'version', 'major']
], ],
device : [[ device : [[
/\(((ipad|playbook));/i, // iPad/PlayBook /\((ipad|playbook);[\w\s\);-]+(rim|apple)/i // iPad/PlayBook
], ['model', 'vendor', ['type', 'Tablet']], [
/(hp).+(touchpad)/i, // HP TouchPad /(hp).+(touchpad)/i, // HP TouchPad
/(kindle)\/([\w\.]+)/i, // Kindle /(kindle)\/([\w\.]+)/i, // Kindle
/\s(nook)[\w\s]+build\/(\w+)/i, // Nook /\s(nook)[\w\s]+build\/(\w+)/i, // Nook
/(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak /(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak
], ['vendor', 'model', ['type', 'Tablet']], [ ], ['vendor', 'model', ['type', 'Tablet']], [
/\(((ip[honed]+));/i, // iPod/iPhone /\((ip[honed]+);.+(apple)/i // iPod/iPhone
], ['model', 'vendor', ['type', 'Mobile']], [
/(blackberry)[\s-]?(\w+)/i, // BlackBerry /(blackberry)[\s-]?(\w+)/i, // BlackBerry
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola)[\s_-]?([\w-]+)*/i, /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola)[\s_-]?([\w-]+)*/i,
// BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Huawei/Meizu/Motorola // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Huawei/Meizu/Motorola
@@ -197,7 +238,10 @@
/android\s3\.[\s\w-;]{10}(lg?)-([06cv9]{3,4})/i // LG /android\s3\.[\s\w-;]{10}(lg?)-([06cv9]{3,4})/i // LG
], [['vendor', 'LG'], 'model', ['type', 'Tablet']], [ ], [['vendor', 'LG'], 'model', ['type', 'Tablet']], [
/(lg)[e;\s-\/]+(\w+)*/i /(lg)[e;\s-\/]+(\w+)*/i
], [['vendor', 'LG'], 'model', ['type', 'Mobile']] ], [['vendor', 'LG'], 'model', ['type', 'Mobile']], [
/(mobile|tablet);.+rv\:.+gecko\//i // Unidentifiable
], ['type', 'vendor', 'model']
], ],
engine : [[ engine : [[
@@ -242,7 +286,7 @@
], [['name', 'Chromium OS'], 'version'],[ ], [['name', 'Chromium OS'], 'version'],[
// Solaris // Solaris
/(sunos)\s?([\w\.\s]+\d)*/i // Solaris /(sunos)\s?([\w\.]+\d)*/i // Solaris
], [['name', 'Solaris'], 'version'], [ ], [['name', 'Solaris'], 'version'], [
// BSD based // BSD based
@@ -252,19 +296,22 @@
/(ip[honead]+).*os\s*([\w]+)*\slike\smac/i // iOS /(ip[honead]+).*os\s*([\w]+)*\slike\smac/i // iOS
], [['name', 'iOS'], ['version', /_/g, '.']], [ ], [['name', 'iOS'], ['version', /_/g, '.']], [
/(mac\sos\sx)\s([\w\s\.]+\w)/i, // Mac OS /(mac\sos\sx)\s?([\d\s\.]+\w)*/i, // Mac OS
], ['name', ['version', /_/g, '.']], [ ], ['name', ['version', /_/g, '.']], [
// Other // Other
/(haiku)\s(\w+)/i, // Haiku /(haiku)\s(\w+)/i, // Haiku
/(macintosh|unix|minix|beos)[\/\s]?()*/i // UNIX/Minix/BeOS /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i, // AIX
/(macintosh|mac(?=_powerpc)|plan\s9|minix|beos|qnx|os\/2)[\/\s]?()*/i,
// Plan9/Minix/BeOS/QNX/OS2
/(unix)\s?([\w\.]+)*/i // UNIX
], ['name', 'version'] ], ['name', 'version']
] ]
}; };
var UAParser = function UAParser (uastring) { var UAParser = function UAParser (uastring) {
var ua = uastring || (typeof window !== 'undefined' ? window.navigator.userAgent : ""); var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : "");
this.getBrowser = function () { this.getBrowser = function () {
return mapper.regex.apply(this, regexes.browser); return mapper.regex.apply(this, regexes.browser);