From 4a6470b707b1295e4b25696afc0a374e03c23bfd Mon Sep 17 00:00:00 2001 From: Faisalman Date: Tue, 20 Mar 2012 15:31:05 +0700 Subject: [PATCH 1/3] Moved windows version mapper function inside mapper object --- package.json | 4 ++-- ua-parser.js | 38 ++++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 75bb217..1de7c76 100644 --- a/package.json +++ b/package.json @@ -7,13 +7,13 @@ "email" : "fyzlman@gmail.com", "url" : "http://faisalman.com" }, - "description" : "a simple user-agent string parser", + "description" : "Lightweight JavaScript-based user-agent parser", "keywords" : [ "user-agent", "parser", "browser" ], - "homepage" : "https://faisalman.github.com/ua-parser-js", + "homepage" : "http://faisalman.github.com/ua-parser-js", "contributors": [ { "name" : "Faisal Salman", diff --git a/ua-parser.js b/ua-parser.js index da88cf4..a05bd4c 100644 --- a/ua-parser.js +++ b/ua-parser.js @@ -1,5 +1,5 @@ // UA-Parser.js v0.1.0 -// JavaScript-based user-agent parser +// Lightweight JavaScript-based user-agent parser // https://github.com/faisalman/ua-parser-js // // Copyright © 2012 Faisalman @@ -49,22 +49,24 @@ function uaparser(uastring){ return i; }; - var winMap = function(){ - switch(arguments[1].toLowerCase()){ - case 'nt 5.0': - return '2000'; - case 'nt 5.1': - case 'nt 5.2': - return 'XP'; - case 'nt 6.0': - return 'Vista'; - case 'nt 6.1': - return '7'; - case 'nt 6.2': - return '8'; - default: - return arguments[1]; - }; + var mapper = { + win : function(){ + switch(arguments[1].toLowerCase()){ + case 'nt 5.0': + return '2000'; + case 'nt 5.1': + case 'nt 5.2': + return 'XP'; + case 'nt 6.0': + return 'Vista'; + case 'nt 6.1': + return '7'; + case 'nt 6.2': + return '8'; + default: + return arguments[1]; + }; + } }; this.ua = uastring || window.navigator.userAgent; @@ -125,7 +127,7 @@ function uaparser(uastring){ // Windows based /(windows\sphone\sos|windows)\s+([\w\.\s]+)*/i, // Windows - ], ['name', ['version', /(nt\s[\d\.]+)/gi, winMap]], [ + ], ['name', ['version', /(nt\s[\d\.]+)/gi, mapper.win]], [ // Mobile/Embedded OS /(blackberry).+version\/([\w\.]+)/i, // Blackberry From 8ba7e754761e6eb0426bbcfd8df1fb9697fe1d49 Mon Sep 17 00:00:00 2001 From: Faisalman Date: Tue, 20 Mar 2012 16:20:50 +0700 Subject: [PATCH 2/3] Make variable name less cryptic --- ua-parser.js | 78 ++++++++++++++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/ua-parser.js b/ua-parser.js index a05bd4c..67ef0bc 100644 --- a/ua-parser.js +++ b/ua-parser.js @@ -1,57 +1,57 @@ -// UA-Parser.js v0.1.0 +// UA-Parser.js v0.1.1 // Lightweight JavaScript-based user-agent parser // https://github.com/faisalman/ua-parser-js // // Copyright © 2012 Faisalman // Licensed under GPLv2 -function uaparser(uastring){ +function uaparser (uastring) { // regexp mapper - var regxMap = function(ua){ - var i, j; - for(j = 1; j < arguments.length; j += 2){ - var rx = arguments[j], - asc = arguments[j+1], - k, l, m, n, o, p; - for(l = 0; l < rx.length; l++){ - m = rx[l].exec(ua); - //console.log(m); - if(!!m){ - k = {}; - o = 1; - for(n = 0; n < asc.length; n++){ - if(typeof asc[n] === 'object' && asc[n].length === 2){ - k[asc[n][0]] = asc[n][1]; - o -= 1; - } else if(typeof asc[n] === 'object' && asc[n].length === 3){ - k[asc[n][0]] = (!!m[n+o]) ? m[n+o].replace(asc[n][1], asc[n][2]) : 'unknown'; + var regxMap = function (ua) { + var result; + var i, j, k, l; + for (i = 1; i < arguments.length; i += 2) { + var regex = arguments[i]; + var props = arguments[i + 1]; + var isMatch = false; + for (j = 0; j < regex.length; j++) { + var match = regex[j].exec(ua); + //console.log(match); + if (!!match) { + result = {}; + l = 1; + for (k = 0; k < props.length; k++) { + if (typeof props[k] === 'object' && props[k].length === 2) { + result[props[k][0]] = props[k][1]; + l -= 1; + } else if (typeof props[k] === 'object' && props[k].length === 3) { + result[props[k][0]] = (!!match[k + l]) ? match[k + l].replace(props[k][1], props[k][2]) : 'unknown'; } else { - k[asc[n]] = (!!m[n+o]) ? m[n+o] : 'unknown'; + result[props[k]] = (!!match[k + l]) ? match[k + l] : 'unknown'; } }; - i = k; - p = true; + isMatch = true; break; } }; - if(!p){ - k = {}; - for(l in asc){ - if(asc.hasOwnProperty(l)){ - k[asc[l]] = 'unknown'; + if (!isMatch) { + result = {}; + for (j in props) { + if (props.hasOwnProperty(j)) { + result[props[j]] = 'unknown'; } }; - i = k; + } else { + break; } - if(p) break; }; - return i; + return result; }; - var mapper = { - win : function(){ - switch(arguments[1].toLowerCase()){ + var mapper = { + win: function (str, match) { + switch (match.toLowerCase()) { case 'nt 5.0': return '2000'; case 'nt 5.1': @@ -64,20 +64,20 @@ function uaparser(uastring){ case 'nt 6.2': return '8'; default: - return arguments[1]; + return match; }; } }; this.ua = uastring || window.navigator.userAgent; - this.getBrowser = function(){ + this.getBrowser = function() { return regxMap(this.ua, [ // Mixed /(kindle)\/((\d+)?[\w\.]+)/i, // Kindle - /(lunascape|maxthon|netfront|jasmine)[\/\s]?((\d+)?[\w\.]+)/i, // Lunascape/Maxthon/Netfront/Jasmine + /(lunpropsape|maxthon|netfront|jasmine)[\/\s]?((\d+)?[\w\.]+)/i, // Lunpropsape/Maxthon/Netfront/Jasmine // Presto based /(opera\smini)\/((\d+)?[\w\.-]+)/i, // Opera Mini @@ -108,7 +108,7 @@ function uaparser(uastring){ ], ['name', 'release', 'version']); }; - this.getEngine = function(){ + this.getEngine = function() { return regxMap(this.ua, [ @@ -121,7 +121,7 @@ function uaparser(uastring){ ], ['version', 'name']); }; - this.getOS = function(){ + this.getOS = function() { return regxMap(this.ua, [ From 0276dd0c4930d6b8207229879ef9975801a9bec7 Mon Sep 17 00:00:00 2001 From: Faisalman Date: Tue, 20 Mar 2012 16:36:51 +0700 Subject: [PATCH 3/3] Changed property name browser.release to browser.major --- readme.md | 25 ++++++++++++++++++++++--- ua-parser.js | 6 +++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index 0fe326b..5be4403 100644 --- a/readme.md +++ b/readme.md @@ -17,8 +17,27 @@ Get detailed type and version of web browser, layout engine, and operating syste