From 5002ea08468ce07d3eb96b558afc5672e8f014e2 Mon Sep 17 00:00:00 2001 From: Sylvain Gizard Date: Thu, 18 Dec 2014 16:04:08 +0100 Subject: [PATCH 1/5] Rough detection of Sony Xperia phones and tablets --- src/ua-parser.js | 10 ++++-- test/device-test.json | 80 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 8dbf650..4add349 100644 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -484,8 +484,14 @@ /android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7)/i ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [ - /(sony)\s(tablet\s[ps])/i // Sony Tablets - ], [VENDOR, MODEL, [TYPE, TABLET]], [ + /(sony)\s(tablet\s[ps])\sbuild\//i // Sony Tablets + ], [VENDOR, [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [ + + /(sony)?(?:sgp.+)\sbuild\//i // Sony Tablets + ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [ + + /(?:sony)?(?:(?:(?:c|d)\d{4})|(?:so[-l].+))\sbuild\//i // Sony Phones + ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Phone'], [TYPE, MOBILE]], [ /\s(ouya)\s/i, // Ouya /(nintendo)\s([wids3u]+)/i // Nintendo diff --git a/test/device-test.json b/test/device-test.json index e32d587..5618960 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -118,5 +118,85 @@ "model" : "SM-T520", "type" : "tablet" } + }, + { + "desc" : "Sony C5303 (Xperia SP)", + "ua" : "Mozilla/5.0 (Linux; Android 4.3; C5303 Build/12.1.A.1.205) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36", + "expect" : + { + "vendor" : "Sony", + "model" : "Xperia Phone", + "type" : "mobile" + } + }, + { + "desc": " Sony SO-02F (Xperia Z1 F)", + "ua": "Mozilla/5.0 (Linux; Android 4.2.2; SO-02F Build/14.1.H.2.119) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36", + "expect" : + { + "vendor" : "Sony", + "model" : "Xperia Phone", + "type" : "mobile" + } + }, + { + "desc": "Sony D6653 (Xperia Z3)", + "ua": "Mozilla/5.0 (Linux; Android 4.4; D6653 Build/23.0.A.0.376) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36", + "expect" : + { + "vendor" : "Sony", + "model" : "Xperia Phone", + "type" : "mobile" + } + }, + { + "desc": "Sony Xperia SOL25 (ZL2)", + "ua": "Mozilla/5.0 (Linux; U; Android 4.4; SOL25 Build/17.1.1.C.1.64) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", + "expect" : + { + "vendor" : "Sony", + "model" : "Xperia Phone", + "type" : "mobile" + } + }, + { + "desc": "Sony SO-02F (Xperia Z1)", + "ua": "Mozilla/5.0 (Linux; U; Android 4.4; SonySO-02F Build/14.3.B.0.288) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", + "expect" : + { + "vendor" : "Sony", + "model" : "Xperia Phone", + "type" : "mobile" + } + }, + { + "desc": " Sony SGP521 (Xperia Z2 Tablet)", + "ua": "Mozilla/5.0 (Linux; Android 4.4; SGP521 Build/17.1.A.0.432) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36", + "expect" : + { + "vendor" : "Sony", + "model" : "Xperia Tablet", + "type" : "tablet" + } + }, + { + "desc": "Sony Tablet S", + "ua": "Mozilla/5.0 (Linux; U; Android 3.1; Sony Tablet S Build/THMAS10000) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13", + "expect" : + { + "vendor" : "Sony", + "model" : "Xperia Tablet", + "type" : "tablet" + } + }, + { + "desc": "Sony Tablet Z LTE", + "ua": "Mozilla/5.0 (Linux; U; Android 4.1; SonySGP321 Build/10.2.C.0.143) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30", + "expect" : + { + "vendor" : "Sony", + "model" : "Xperia Tablet", + "type" : "tablet" + } } ] From 50c4e3e551295088824192f08b4deea52fa7e7c9 Mon Sep 17 00:00:00 2001 From: Sylvain Gizard Date: Thu, 18 Dec 2014 16:04:24 +0100 Subject: [PATCH 2/5] Trailing whitespace --- src/ua-parser.js | 18 +++++++++--------- test/device-test.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 4add349..c876392 100644 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -2,7 +2,7 @@ * UAParser.js v0.7.3 * Lightweight JavaScript-based User-Agent string parser * https://github.com/faisalman/ua-parser-js - * + * * Copyright © 2012-2014 Faisal Salman * Dual licensed under GPLv2 & MIT */ @@ -260,7 +260,7 @@ ], [[NAME, 'Yandex'], VERSION], [ /(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon - ], [[NAME, /_/g, ' '], VERSION], [ + ], [[NAME, /_/g, ' '], VERSION], [ /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i, // Chrome/OmniWeb/Arora/Tizen/Nokia @@ -556,16 +556,16 @@ /(nexus\s[45])/i, // LG /lg[e;\s\/-]+(\w+)*/i ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [ - + /android.+(ideatab[a-z0-9\-\s]+)/i // Lenovo ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [ - + /linux;.+((jolla));/i // Jolla ], [VENDOR, MODEL, [TYPE, MOBILE]], [ - + /((pebble))app\/[\d\.]+\s/i // Pebble ], [VENDOR, MODEL, [TYPE, WEARABLE]], [ - + /android.+;\s(glass)\s\d/i // Google Glass ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [ @@ -639,7 +639,7 @@ /(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i // iOS ], [[NAME, 'iOS'], [VERSION, /_/g, '.']], [ - /(mac\sos\sx)\s?([\w\s\.]+\w)*/i, + /(mac\sos\sx)\s?([\w\s\.]+\w)*/i, /(macintosh|mac(?=_powerpc)\s)/i // Mac OS ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [ @@ -711,7 +711,7 @@ UAParser.BROWSER = { NAME : NAME, MAJOR : MAJOR, - VERSION : VERSION + VERSION : VERSION }; UAParser.CPU = { ARCHITECTURE : ARCHITECTURE @@ -733,7 +733,7 @@ }; UAParser.OS = { NAME : NAME, - VERSION : VERSION + VERSION : VERSION }; diff --git a/test/device-test.json b/test/device-test.json index 5618960..49262a1 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -72,7 +72,7 @@ { "desc" : "Nokia3xx", "ua" : "Nokia303/14.87 CLDC-1.1", - "expect" : + "expect" : { "vendor" : "Nokia", "model" : "303", From d47e1a5e8e44e0514488fac4b355c402f7af5588 Mon Sep 17 00:00:00 2001 From: Sylvain Gizard Date: Thu, 18 Dec 2014 16:04:31 +0100 Subject: [PATCH 3/5] Update build --- dist/ua-parser.min.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/ua-parser.min.js b/dist/ua-parser.min.js index c61588d..f6da89e 100644 --- a/dist/ua-parser.min.js +++ b/dist/ua-parser.min.js @@ -2,8 +2,8 @@ * UAParser.js v0.7.3 * Lightweight JavaScript-based User-Agent string parser * https://github.com/faisalman/ua-parser-js - * + * * Copyright © 2012-2014 Faisal Salman * Dual licensed under GPLv2 & MIT */ -(function(window,undefined){"use strict";var LIBVERSION="0.7.3",EMPTY="",UNKNOWN="?",FUNC_TYPE="function",UNDEF_TYPE="undefined",OBJ_TYPE="object",MAJOR="major",MODEL="model",NAME="name",TYPE="type",VENDOR="vendor",VERSION="version",ARCHITECTURE="architecture",CONSOLE="console",MOBILE="mobile",TABLET="tablet",SMARTTV="smarttv",WEARABLE="wearable",EMBEDDED="embedded";var util={extend:function(regexes,extensions){for(var i in extensions){if("browser cpu device engine os".indexOf(i)!==-1&&extensions[i].length%2===0){regexes[i]=extensions[i].concat(regexes[i])}}return regexes},has:function(str1,str2){if(typeof str1==="string"){return str2.toLowerCase().indexOf(str1.toLowerCase())!==-1}},lowerize:function(str){return str.toLowerCase()}};var mapper={rgx:function(){var result,i=0,j,k,p,q,matches,match,args=arguments;while(i0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){result[q[0]]=q[1].call(this,match)}else{result[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){result[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{result[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){result[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{result[q]=match?match:undefined}}}}i+=2}return result},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){result[q[0]]=q[1].call(this,match)}else{result[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){result[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{result[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){result[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{result[q]=match?match:undefined}}}}i+=2}return result},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j Date: Thu, 18 Dec 2014 16:09:43 +0100 Subject: [PATCH 4/5] Remove duplicated test --- test/device-test.json | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/test/device-test.json b/test/device-test.json index 49262a1..1a2d1d9 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -159,16 +159,6 @@ "type" : "mobile" } }, - { - "desc": "Sony SO-02F (Xperia Z1)", - "ua": "Mozilla/5.0 (Linux; U; Android 4.4; SonySO-02F Build/14.3.B.0.288) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", - "expect" : - { - "vendor" : "Sony", - "model" : "Xperia Phone", - "type" : "mobile" - } - }, { "desc": " Sony SGP521 (Xperia Z2 Tablet)", "ua": "Mozilla/5.0 (Linux; Android 4.4; SGP521 Build/17.1.A.0.432) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36", From 7d5e50f0089d1d6e5a61c97c9e279bd2dad1ecb8 Mon Sep 17 00:00:00 2001 From: Sylvain Gizard Date: Thu, 18 Dec 2014 16:26:38 +0100 Subject: [PATCH 5/5] Remove duplication --- dist/ua-parser.min.js | 2 +- src/ua-parser.js | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/dist/ua-parser.min.js b/dist/ua-parser.min.js index f6da89e..a8a0579 100644 --- a/dist/ua-parser.min.js +++ b/dist/ua-parser.min.js @@ -6,4 +6,4 @@ * Copyright © 2012-2014 Faisal Salman * Dual licensed under GPLv2 & MIT */ -(function(window,undefined){"use strict";var LIBVERSION="0.7.3",EMPTY="",UNKNOWN="?",FUNC_TYPE="function",UNDEF_TYPE="undefined",OBJ_TYPE="object",STR_TYPE="string",MAJOR="major",MODEL="model",NAME="name",TYPE="type",VENDOR="vendor",VERSION="version",ARCHITECTURE="architecture",CONSOLE="console",MOBILE="mobile",TABLET="tablet",SMARTTV="smarttv",WEARABLE="wearable",EMBEDDED="embedded";var util={extend:function(regexes,extensions){for(var i in extensions){if("browser cpu device engine os".indexOf(i)!==-1&&extensions[i].length%2===0){regexes[i]=extensions[i].concat(regexes[i])}}return regexes},has:function(str1,str2){if(typeof str1==="string"){return str2.toLowerCase().indexOf(str1.toLowerCase())!==-1}else{return false}},lowerize:function(str){return str.toLowerCase()},major:function(version){return typeof version===STR_TYPE?version.split(".")[0]:undefined}};var mapper={rgx:function(){var result,i=0,j,k,p,q,matches,match,args=arguments;while(i0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){result[q[0]]=q[1].call(this,match)}else{result[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){result[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{result[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){result[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{result[q]=match?match:undefined}}}}i+=2}return result},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){result[q[0]]=q[1].call(this,match)}else{result[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){result[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{result[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){result[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{result[q]=match?match:undefined}}}}i+=2}return result},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j