From 825edbbf91276e5e0843be15b592da090fbc43d4 Mon Sep 17 00:00:00 2001 From: liujunlve Date: Fri, 30 Jul 2021 15:32:56 +0800 Subject: [PATCH 01/20] Fix #509 add support for Internet Explorer 8 --- src/ua-parser.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ua-parser.js b/src/ua-parser.js index 2a623670..3581c9a3 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -114,6 +114,7 @@ // try matching uastring with regexes while (j < regex.length && !matches) { + if (!regex[j]) { break; } matches = regex[j++].exec(ua); if (!!matches) { From 62cc99d7cf56254bf0b131d00136020ba4b4d3f9 Mon Sep 17 00:00:00 2001 From: Paris Morgan Date: Tue, 21 Sep 2021 12:23:49 -0700 Subject: [PATCH 02/20] Samsung Galaxy S20 5G --- src/ua-parser.js | 2 +- test/device-test.json | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 7d8beb67..2f671127 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -371,7 +371,7 @@ // Samsung /\b(sch-i[89]0\d|shw-m380s|sm-[pt]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [ - /\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i, + /\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i, /samsung[- ]([-\w]+)/i, /sec-(sgh\w+)/i ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [ diff --git a/test/device-test.json b/test/device-test.json index ae9392fe..4311a78f 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -1404,6 +1404,15 @@ "type": "mobile" } }, + { + "desc": "Samsung Galaxy S20 5G", + "ua": "Mozilla/5.0 (Linux; Android 10; SCG01) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36", + "expect": { + "vendor": "Samsung", + "model": "SCG01", + "type": "mobile" + } + }, { "desc": "Samsung Galaxy Note 10+", "ua": "Mozilla/5.0 (Linux; Android 9; SM-N976V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.89 Mobile Safari/537.36", From 779b5dc1e578cff44c96c60678f8449bd9018fd7 Mon Sep 17 00:00:00 2001 From: KnifeLemon Date: Tue, 12 Apr 2022 12:57:28 +0900 Subject: [PATCH 03/20] add KakaoTalk App, KakaoStory App regex --- src/ua-parser.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 55c3c8d2..e3403677 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -57,7 +57,8 @@ SONY = 'Sony', XIAOMI = 'Xiaomi', ZEBRA = 'Zebra', - FACEBOOK = 'Facebook'; + FACEBOOK = 'Facebook', + KAKAO = 'Kakao'; /////////// // Helper @@ -287,6 +288,11 @@ /\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS ], [VERSION, [NAME, 'GSA']], [ + / wv\).+(chrome)\/([\w\.]+).+(kakaotalk)/i // KakaoTalk App + ], [[NAME, KAKAO+'Talk'], VERSION], [ + / wv\).+(chrome)\/([\w\.]+).+(kakaostory)/i // KakaoStory App + ], [[NAME, KAKAO+'Story'], VERSION], [ + /headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless ], [VERSION, [NAME, CHROME+' Headless']], [ From 0b423078c8966442fdb617b72a2e0195d5aefb40 Mon Sep 17 00:00:00 2001 From: KnifeLemon Date: Tue, 12 Apr 2022 14:17:48 +0900 Subject: [PATCH 04/20] Add Kakao App, Naver App --- src/ua-parser.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index e3403677..3127a9b2 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -58,7 +58,8 @@ XIAOMI = 'Xiaomi', ZEBRA = 'Zebra', FACEBOOK = 'Facebook', - KAKAO = 'Kakao'; + KAKAO = 'Kakao', + NAVER = 'Naver'; /////////// // Helper @@ -223,6 +224,9 @@ /\bopr\/([\w\.]+)/i // Opera Webkit ], [VERSION, [NAME, OPERA]], [ + /whale\/([-\w\.]+).+NAVER\((.*)\)/i // Naver InApp + ], [VERSION,[NAME, /(.+);\s+(.+);\s+(.+);\s+(.+)/i, NAVER+' $1 $2']], [ + // Mixed /(kindle)\/([\w\.]+)/i, // Kindle /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer @@ -288,10 +292,8 @@ /\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS ], [VERSION, [NAME, 'GSA']], [ - / wv\).+(chrome)\/([\w\.]+).+(kakaotalk)/i // KakaoTalk App - ], [[NAME, KAKAO+'Talk'], VERSION], [ - / wv\).+(chrome)\/([\w\.]+).+(kakaostory)/i // KakaoStory App - ], [[NAME, KAKAO+'Story'], VERSION], [ + / wv\).+chrome\/([\w\.]+).+kakao(.+)\//i // Kakao App + ], [VERSION, [NAME, /(.+)/i, KAKAO+'$1']], [ /headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless ], [VERSION, [NAME, CHROME+' Headless']], [ From 534ba7dd7c7648ac27447b0de7bfad33e733bf4e Mon Sep 17 00:00:00 2001 From: KnifeLemon Date: Tue, 12 Apr 2022 16:21:31 +0900 Subject: [PATCH 05/20] Add iOS Naver, Kakao regex --- src/ua-parser.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 3127a9b2..cdf88eac 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -224,8 +224,9 @@ /\bopr\/([\w\.]+)/i // Opera Webkit ], [VERSION, [NAME, OPERA]], [ - /whale\/([-\w\.]+).+NAVER\((.*)\)/i // Naver InApp - ], [VERSION,[NAME, /(.+);\s+(.+);\s+(.+);\s+(.+)/i, NAVER+' $1 $2']], [ + /Safari\/([-\w\.]+).+NAVER\((.*)\)/i, // Naver InApp for iOS + /whale\/([-\w\.]+).+NAVER\((.*)\)/i // Naver InApp Android + ], [VERSION,[NAME, /(.+); (.+); [0-9]+;.+/i, NAVER+' $1 $2']], [ // Mixed /(kindle)\/([\w\.]+)/i, // Kindle @@ -292,7 +293,8 @@ /\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS ], [VERSION, [NAME, 'GSA']], [ - / wv\).+chrome\/([\w\.]+).+kakao(.+)\//i // Kakao App + /AppleWebKit\/([\w\.]+).+kakao(.*)\s+/i, // Kakao App for iOS + / wv\).+chrome\/([\w\.]+).+kakao(.+)\//i // Kakao App for Android ], [VERSION, [NAME, /(.+)/i, KAKAO+'$1']], [ /headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless From 6fde0d92d60752821f214394f337259589b3187e Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Tue, 8 Nov 2022 15:08:50 +0100 Subject: [PATCH 06/20] Support Panasonic Viera Smart TVs --- src/ua-parser.js | 68 ++++++++++++++++++++++++------------------ test/browser-test.json | 10 +++++++ test/device-test.json | 9 ++++++ test/os-test.json | 9 ++++++ 4 files changed, 67 insertions(+), 29 deletions(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index b47ad236..5faa66c6 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -53,9 +53,11 @@ MICROSOFT = 'Microsoft', MOTOROLA = 'Motorola', OPERA = 'Opera', + PANASONIC = 'Panasonic', SAMSUNG = 'Samsung', SHARP = 'Sharp', SONY = 'Sony', + VIERA = 'Viera', XIAOMI = 'Xiaomi', ZEBRA = 'Zebra', FACEBOOK = 'Facebook'; @@ -295,6 +297,8 @@ / wv\).+(chrome)\/([\w\.]+)/i // Chrome WebView ], [[NAME, CHROME+' WebView'], VERSION], [ + /Panasonic;(VIERA)/i // Panasonic Viera + ], [[NAME, VIERA]], [ /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i // Android Browser ], [VERSION, [NAME, 'Android '+BROWSER]], [ @@ -367,6 +371,35 @@ device : [[ + /////////////////// + // SMARTTVS + /////////////////// + + /smart-tv.+(samsung)/i // Samsung + ], [VENDOR, [TYPE, SMARTTV]], [ + /hbbtv.+maple;(\d+)/i + ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [ + /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i // LG SmartTV + ], [[VENDOR, LG], [TYPE, SMARTTV]], [ + /(apple) ?tv/i // Apple TV + ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [ + /crkey/i // Google Chromecast + ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [ + /droid.+aft(\w)( bui|\))/i // Fire TV + ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [ + /\(dtv[\);].+(aquos)/i, + /(aquos-tv[\w ]+)\)/i // Sharp + ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[ + /(bravia[\w ]+)( bui|\))/i // Sony + ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [ + /(mitv-\w{5}) bui/i // Xiaomi + ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [ + /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku + /hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i // HbbTV devices + ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [ + /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors + ], [[TYPE, SMARTTV]], [ + ////////////////////////// // MOBILES & TABLETS // Ordered by popularity @@ -601,35 +634,6 @@ /\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [ - /////////////////// - // SMARTTVS - /////////////////// - - /smart-tv.+(samsung)/i // Samsung - ], [VENDOR, [TYPE, SMARTTV]], [ - /hbbtv.+maple;(\d+)/i - ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [ - /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i // LG SmartTV - ], [[VENDOR, LG], [TYPE, SMARTTV]], [ - /(apple) ?tv/i // Apple TV - ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [ - /crkey/i // Google Chromecast - ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [ - /droid.+aft(\w)( bui|\))/i // Fire TV - ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [ - /\(dtv[\);].+(aquos)/i, - /(aquos-tv[\w ]+)\)/i // Sharp - ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[ - /(bravia[\w ]+)( bui|\))/i // Sony - ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [ - /(mitv-\w{5}) bui/i // Xiaomi - ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [ - /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku - /hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i // HbbTV devices - ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [ - /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors - ], [[TYPE, SMARTTV]], [ - /////////////////// // WEARABLES /////////////////// @@ -729,10 +733,16 @@ /(cros) [\w]+ ([\w\.]+\w)/i // Chromium OS ], [[NAME, 'Chromium OS'], VERSION],[ + // Smart TVs + /Panasonic;VIERA/i // Panasonic Viera + ], [[NAME, VIERA]], [ + + // Console /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation /(xbox); +xbox ([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S) + // Other /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, // Joli/Palm /(mint)[\/\(\) ]?(\w*)/i, // Mint diff --git a/test/browser-test.json b/test/browser-test.json index bf8163a1..4db45f05 100644 --- a/test/browser-test.json +++ b/test/browser-test.json @@ -1278,6 +1278,16 @@ "major" : "1" } }, + { + "desc" : "Viera", + "ua" : "HbbTV/1.2.1 (;Panasonic;VIERA 2015;3.014;a001-003 4000-0000;)", + "expect" : + { + "name" : "Viera", + "version" : "undefined", + "major" : "undefined" + } + }, { "desc" : "Yandex", "ua" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.5 (KHTML, like Gecko) YaBrowser/1.0.1084.5402 Chrome/19.0.1084.5402 Safari/536.5", diff --git a/test/device-test.json b/test/device-test.json index bad1e50a..235b0e60 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -1431,6 +1431,15 @@ "type": "mobile" } }, + { + "desc": "Panasonic TX-32CSW514 SmartTV", + "ua": "HbbTV/1.2.1 (;Panasonic;VIERA 2015;3.014;a001-003 4000-0000;)", + "expect": { + "vendor": "Panasonic", + "model": "VIERA 2015", + "type": "smarttv" + } + }, { "desc": "Philips SmartTV", "ua": "Opera/9.80 HbbTV/1.1.1 (; Philips; ; ; ; ) NETTV/4.0.2; en) Version/11.60", diff --git a/test/os-test.json b/test/os-test.json index 57a4d8a9..b7b78fec 100644 --- a/test/os-test.json +++ b/test/os-test.json @@ -1043,6 +1043,15 @@ "version" : "undefined" } }, + { + "desc" : "Panasonic Viera", + "ua" : "HbbTV/1.2.1 (;Panasonic;VIERA 2015;3.014;a001-003 4000-0000;)", + "expect" : + { + "name" : "Viera", + "version" : "undefined" + } + }, { "desc" : "HP-UX", "ua" : "Mozilla/5.0 (X11; U; HP-UX 9000/785; es-ES; rv:1.0.1) Gecko/20020827 Netscape/7.0", From 5fd47ee00d4aa01838da870b6fcf965812622291 Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Tue, 8 Nov 2022 15:26:12 +0100 Subject: [PATCH 07/20] Support Panasonic 2018+ smart tvs --- src/ua-parser.js | 2 +- test/device-test.json | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 5faa66c6..f825faff 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -395,7 +395,7 @@ /(mitv-\w{5}) bui/i // Xiaomi ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [ /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku - /hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i // HbbTV devices + /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [ /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors ], [[TYPE, SMARTTV]], [ diff --git a/test/device-test.json b/test/device-test.json index 235b0e60..d6525f20 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -1440,6 +1440,15 @@ "type": "smarttv" } }, + { + "desc": "Panasonic TX-40FXW724 SmartTV", + "ua": "HbbTV/1.4.1 (+DRM;Panasonic;SmartTV2018mid;3.024;4301-0003 0002-0000;SmartTV2018;)", + "expect": { + "vendor": "Panasonic", + "model": "SmartTV2018mid", + "type": "smarttv" + } + }, { "desc": "Philips SmartTV", "ua": "Opera/9.80 HbbTV/1.1.1 (; Philips; ; ; ; ) NETTV/4.0.2; en) Version/11.60", From 98096f14548d12befbb49555447aae953b65d074 Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Tue, 8 Nov 2022 15:28:14 +0100 Subject: [PATCH 08/20] Add test for panasonic 2020 smart tv --- test/device-test.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/device-test.json b/test/device-test.json index d6525f20..154b20e9 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -1449,6 +1449,15 @@ "type": "smarttv" } }, + { + "desc": "Panasonic TX-43HXW904 SmartTV", + "ua": "HbbTV/1.5.1 (+DRM;Panasonic;SmartTV2020mid;3.326;4301-0003 0008-0000;com.panasonic.SmartTV2020mid;)", + "expect": { + "vendor": "Panasonic", + "model": "SmartTV2020mid", + "type": "smarttv" + } + }, { "desc": "Philips SmartTV", "ua": "Opera/9.80 HbbTV/1.1.1 (; Philips; ; ; ; ) NETTV/4.0.2; en) Version/11.60", From 8ffdf232f488a6f59733241ba177538882c8189f Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Tue, 8 Nov 2022 15:30:54 +0100 Subject: [PATCH 09/20] Add test for panasonic SAT receiver --- test/device-test.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/device-test.json b/test/device-test.json index 154b20e9..69323c33 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -1458,6 +1458,15 @@ "type": "smarttv" } }, + { + "desc": "Panasonic DMR-HST130 SAT receiver", + "ua": "HbbTV/1.1.1 (+PVR;Panasonic;DIGA WebKit M8658;3.420;;)", + "expect": { + "vendor": "Panasonic", + "model": "DIGA WebKit M8658", + "type": "smarttv" + } + }, { "desc": "Philips SmartTV", "ua": "Opera/9.80 HbbTV/1.1.1 (; Philips; ; ; ; ) NETTV/4.0.2; en) Version/11.60", From db5567d61487a9940aeceb25eba68bacc1286df4 Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Tue, 8 Nov 2022 15:56:40 +0100 Subject: [PATCH 10/20] Support Loewe Smart TVs --- src/ua-parser.js | 5 ++++- test/device-test.json | 9 +++++++++ test/os-test.json | 9 +++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index f825faff..c9d8655b 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -52,6 +52,7 @@ LG = 'LG', MICROSOFT = 'Microsoft', MOTOROLA = 'Motorola', + NETRANGE= 'Netrange', OPERA = 'Opera', PANASONIC = 'Panasonic', SAMSUNG = 'Samsung', @@ -734,8 +735,10 @@ ], [[NAME, 'Chromium OS'], VERSION],[ // Smart TVs - /Panasonic;VIERA/i // Panasonic Viera + /Panasonic;VIERA/i // Panasonic Viera ], [[NAME, VIERA]], [ + /NETRANGEMMH/i // Netrange + ], [[NAME, NETRANGE]], [ // Console diff --git a/test/device-test.json b/test/device-test.json index 69323c33..f4e4c5b0 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -970,6 +970,15 @@ "type": "smarttv" } }, + { + "desc": "Loewe Smart TV", + "ua": "Mozilla/5.0 (Linux; U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2207.0 LOEWE-SL410/5.2.0.0 HbbTV/1.4.1 (; LOEWE; SL410; LOH/5.2.0.0;;) FVC/3.0 (LOEWE; SL410;) CE-HTML/1.0 Config (L:deu,CC:DEU) NETRANGEMMH", + "expect": { + "vendor": "LOEWE", + "model": "SL410", + "type": "smarttv" + } + }, { "desc": "Meizu M5 Note", "ua": "Mozilla/5.0 (Linux; Android 6.0; M5 Note Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043024 Safari/537.36 MicroMessenger/6.5.7.1040 NetType/WIFI Language/zh_CN", diff --git a/test/os-test.json b/test/os-test.json index b7b78fec..006504cb 100644 --- a/test/os-test.json +++ b/test/os-test.json @@ -1052,6 +1052,15 @@ "version" : "undefined" } }, + { + "desc" : "Netrange Smart TV", + "ua" : "Mozilla/5.0 (Linux; U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2207.0 LOEWE-SL410/5.2.0.0 HbbTV/1.4.1 (; LOEWE; SL410; LOH/5.2.0.0;;) FVC/3.0 (LOEWE; SL410;) CE-HTML/1.0 Config (L:deu,CC:DEU) NETRANGEMMH", + "expect" : + { + "name" : "Netrange", + "version" : "undefined" + } + }, { "desc" : "HP-UX", "ua" : "Mozilla/5.0 (X11; U; HP-UX 9000/785; es-ES; rv:1.0.1) Gecko/20020827 Netscape/7.0", From a8a4e71345b22f7ba0fce024426d046a5da3183c Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Tue, 8 Nov 2022 16:17:57 +0100 Subject: [PATCH 11/20] Add tests for JVC smart tvs --- test/device-test.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/device-test.json b/test/device-test.json index f4e4c5b0..dd2111a4 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -790,6 +790,24 @@ "type": "mobile" } }, + { + "desc": "JVC LT-43V55LFA Smart TV", + "ua": "Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2207.0 OMI/4.9.0.237.DOM3-OPT.245 Model/Vestel-MB211 VSTVB MB200 HbbTV/1.2.1 (; JVC; MB211; 3.19.4.2; _TV_NT72563_2017 SmartTvA/3.0.0", + "expect": { + "vendor": "JVC", + "model": "MB211", + "type": "smarttv" + } + }, + { + "desc": "JVC LT-43V65LUA Smart TV", + "ua": "Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2207.0 OMI/4.9.0.237.DOM3-OPT.245 Model/Vestel-MB130 VSTVB MB100 HbbTV/1.2.1 (; JVC; MB130; 5.7.20.0; _TV_G10_2017;) SmartTvA/3.0.0", + "expect": { + "vendor": "JVC", + "model": "MB130", + "type": "smarttv" + } + }, { "desc": "Lenovo Tab 2", "ua": "Mozilla/5.0 (Linux; Android 5.0.1; Lenovo TAB 2 A7-30HC Build/LRX21M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.157 Safari/537.36", From 528e7aea1cd1a300043e00f0a7299edc348e3afc Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Wed, 9 Nov 2022 11:03:13 +0100 Subject: [PATCH 12/20] Support philips smart tvs --- src/ua-parser.js | 3 +++ test/device-test.json | 27 +++++++++++++++++++++++++++ test/os-test.json | 9 +++++++++ 3 files changed, 39 insertions(+) diff --git a/src/ua-parser.js b/src/ua-parser.js index c9d8655b..d8068a0b 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -53,6 +53,7 @@ MICROSOFT = 'Microsoft', MOTOROLA = 'Motorola', NETRANGE= 'Netrange', + NETTV = 'NetTV', OPERA = 'Opera', PANASONIC = 'Panasonic', SAMSUNG = 'Samsung', @@ -739,6 +740,8 @@ ], [[NAME, VIERA]], [ /NETRANGEMMH/i // Netrange ], [[NAME, NETRANGE]], [ + /nettv\/(\d\.\d.\d)/i // NetTV + ], [VERSION, [NAME, NETTV]], [ // Console diff --git a/test/device-test.json b/test/device-test.json index dd2111a4..136b61e0 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -1503,6 +1503,33 @@ "type": "smarttv" } }, + { + "desc": "Philips 32PFL6606K/02 SmartTV (2011)", + "ua": "Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.1.0; en) Presto/2.6.33 Version/10.70", + "expect": { + "vendor": "Philips", + "model": "", + "type": "smarttv" + } + }, + { + "desc": "Philips 32PFL6606K/02 SmartTV (2013)", + "ua": "Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.1.0; en) Presto/2.6.33 Version/10.70", + "expect": { + "vendor": "Philips", + "model": "", + "type": "smarttv" + } + }, + { + "desc": "Philips 32PHS5301/12 SmartTV (2016)", + "ua": "Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 OPR/29.0.1803.0 OMI/4.5.23.37.MOT2.13 HbbTV/1.2.1 (;Philips;32PHS5301/12;;_TV_MT5800;) Firmware/TPM161E_012.002.045.001 en", + "expect": { + "vendor": "Philips", + "model": "32PHS5301/12", + "type": "smarttv" + } + }, { "desc": "Roku", "ua": "Mozilla/5.0 (Roku) AppleWebKit/537.36 (KHTML, like Gecko) Web/1.1 Safari/537.36", diff --git a/test/os-test.json b/test/os-test.json index 006504cb..e5b13c27 100644 --- a/test/os-test.json +++ b/test/os-test.json @@ -1061,6 +1061,15 @@ "version" : "undefined" } }, + { + "desc" : "NetTV 3.2.1", + "ua" : "Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.1; en) Presto/2.6.33 Version/10.70", + "expect" : + { + "name" : "NetTV", + "version" : "3.2.1" + } + }, { "desc" : "HP-UX", "ua" : "Mozilla/5.0 (X11; U; HP-UX 9000/785; es-ES; rv:1.0.1) Gecko/20020827 Netscape/7.0", From e5942dc505ac219872e0da384dd8e4fbe6a738b6 Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Thu, 10 Nov 2022 09:07:08 +0100 Subject: [PATCH 13/20] Add samsung testcases --- test/device-test.json | 9 +++++++++ test/os-test.json | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/test/device-test.json b/test/device-test.json index 136b61e0..fbdc9f4b 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -1809,6 +1809,15 @@ "type": "smarttv" } }, + { + "desc": "Samsung SmartTV HBBTV", + "ua": "HbbTV/1.5.1 (+DRM;Samsung;SmartTV2021:UAU7000;T-KSU2EDEUC-1506.0;KantSU2e;urn:samsungtv:familyname:21_KANTSU2E_UHD_BASIC:2021;) Tizen/6.0 (+TVPLUS+SmartHubLink) Chrome/76 LaTivu_1.0.1_2021 RVID/17", + "expect": { + "vendor": "Samsung", + "model": "SmartTV2021:UAU7000", + "type": "smarttv" + } + }, { "desc": "Sharp AQUOS-TVX19B", "ua": "Mozilla/5.0 (Linux; Android 9; AQUOS-TVX19B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Mobile Safari/537.36", diff --git a/test/os-test.json b/test/os-test.json index e5b13c27..3408ddd9 100644 --- a/test/os-test.json +++ b/test/os-test.json @@ -197,6 +197,15 @@ "version" : "2.3" } }, + { + "desc" : "Tizen 6.0", + "ua" : "HbbTV/1.5.1 (+DRM;Samsung;SmartTV2021:UAU7000;T-KSU2EDEUC-1506.0;KantSU2e;urn:samsungtv:familyname:21_KANTSU2E_UHD_BASIC:2021;) Tizen/6.0 (+TVPLUS+SmartHubLink) Chrome/76 LaTivu_1.0.1_2021 RVID/17", + "expect" : + { + "name" : "Tizen", + "version" : "6.0" + } + }, { "desc" : "Android", "ua" : "Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; VM670 Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko)", From df7551c9b69d067cb2a14c91849f0c8715c0af86 Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Thu, 10 Nov 2022 11:20:31 +0100 Subject: [PATCH 14/20] Add support for TechniSAT TVs and SATs --- src/ua-parser.js | 2 ++ test/device-test.json | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/ua-parser.js b/src/ua-parser.js index d8068a0b..d3895e06 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -396,6 +396,8 @@ ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [ /(mitv-\w{5}) bui/i // Xiaomi ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [ + /Hbbtv.*(technisat) (.*);/i // TechniSAT + ], [VENDOR, MODEL, [TYPE, SMARTTV]], [ /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [ diff --git a/test/device-test.json b/test/device-test.json index fbdc9f4b..fbcc5441 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -2045,6 +2045,26 @@ "type": "embedded" } }, + { + "desc" : "TechniSAT Digit ISIO S SAT receiver", + "ua" : "Opera/9.80 (Linux sh4; U; HbbTV/1.1.1 (;;;;;); CE-HTML; TechniSat Digit ISIO S; de) Presto/2.9.167 Version/11.50", + "expect" : + { + "vendor": "TechniSat", + "model": "Digit ISIO S", + "type": "smarttv" + } + }, + { + "desc" : "TechniSAT MultyVision SmartTV", + "ua" : "Opera/9.80 (Linux i686; U; HbbTV/1.1.1 (;;;;;); CE-HTML; TechniSat MultyVision ISIO; de) Presto/2.9.167 Version/11.50", + "expect" : + { + "vendor": "TechniSat", + "model": "MultyVision ISIO", + "type": "smarttv" + } + }, { "desc": "Xiaomi 2013023", "ua": "Mozilla/5.0 (Linux; U; Android 4.2.2; en-US; 2013023 Build/HM2013023) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/10.0.1.512 U3/0.8.0 Mobile Safari/533.1", From 5d4ca2b4c2fec8d07218726b0bbc97abfc6c6323 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Tue, 24 Jan 2023 23:28:03 +0700 Subject: [PATCH 15/20] Fix #621 - Detect Oculus Quest Pro --- src/ua-parser.js | 2 +- test/device-test.json | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 9e3c7151..31bc93ae 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -645,7 +645,7 @@ ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [ /droid.+; (wt63?0{2,3})\)/i ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [ - /(quest( 2)?)/i // Oculus Quest + /(quest( 2| pro)?)/i // Oculus Quest ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [ /////////////////// diff --git a/test/device-test.json b/test/device-test.json index 33bfd171..bb295286 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -1206,6 +1206,15 @@ "type": "wearable" } }, + { + "desc": "Oculus Quest Pro", + "ua": "Mozilla/5.0 (X11; Linux x86_64; Quest Pro) AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/24.4.0.22.60.426469926 SamsungBrowser/4.0 Chrome/106.0.5249.181 VR Safari/537.36", + "expect": { + "vendor": "Facebook", + "model": "Quest Pro", + "type": "wearable" + } + }, { "desc": "OnePlus One", "ua": "Mozilla/5.0 (Linux; Android 4.4.4; A0001 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36", From 1a521b867ff5b23d2a75eb5d62e10e22d78998ee Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Wed, 25 Jan 2023 01:05:50 +0700 Subject: [PATCH 16/20] Utilize navigator.userAgentData as a fallback #588 --- src/ua-parser.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ua-parser.js b/src/ua-parser.js index 31bc93ae..1ea23440 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -775,6 +775,7 @@ } var _ua = ua || ((typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY); + var _uach = (typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgentData) ? window.navigator.userAgentData : undefined; var _rgxmap = extensions ? extend(regexes, extensions) : regexes; this.getBrowser = function () { @@ -797,6 +798,9 @@ _device[MODEL] = undefined; _device[TYPE] = undefined; rgxMapper.call(_device, _ua, _rgxmap.device); + if (!_device[TYPE] && _uach && _uach.mobile) { + _device[TYPE] = MOBILE; + } return _device; }; this.getEngine = function () { @@ -811,6 +815,9 @@ _os[NAME] = undefined; _os[VERSION] = undefined; rgxMapper.call(_os, _ua, _rgxmap.os); + if (!_os[NAME] && _uach && _uach.platform != 'Unknown') { + _os[NAME] = _uach.platform.replace(/chrome/i, 'Chromium').replace(/mac/i, 'Mac '); + } return _os; }; this.getResult = function () { From ba0f25c19dcdc7fb41e49b271611536d9fa7b6cf Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Thu, 26 Jan 2023 09:35:54 +0700 Subject: [PATCH 17/20] Improve Kakao/Naver detection + add test --- src/ua-parser.js | 16 ++++----------- test/browser-test.json | 45 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 25afb639..34cabc46 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -58,9 +58,7 @@ SONY = 'Sony', XIAOMI = 'Xiaomi', ZEBRA = 'Zebra', - FACEBOOK = 'Facebook', - KAKAO = 'Kakao', - NAVER = 'Naver'; + FACEBOOK = 'Facebook'; /////////// // Helper @@ -226,10 +224,6 @@ /\bopr\/([\w\.]+)/i // Opera Webkit ], [VERSION, [NAME, OPERA]], [ - /Safari\/([-\w\.]+).+NAVER\((.*)\)/i, // Naver InApp for iOS - /whale\/([-\w\.]+).+NAVER\((.*)\)/i // Naver InApp Android - ], [VERSION,[NAME, /(.+); (.+); [0-9]+;.+/i, NAVER+' $1 $2']], [ - // Mixed /(kindle)\/([\w\.]+)/i, // Kindle /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer @@ -239,7 +233,7 @@ /(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon - /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i, + /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i, // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ /(weibo)__([\d\.]+)/i // Weibo ], [NAME, VERSION], [ @@ -290,6 +284,8 @@ // WebView /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i // Facebook App for iOS & Android ], [[NAME, FACEBOOK], VERSION], [ + /(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App + /(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp /safari (line)\/([\w\.]+)/i, // Line App for iOS /\b(line)\/([\w\.]+)\/iab/i, // Line App for Android /(chromium|instagram)[\/ ]([-\w\.]+)/i // Chromium/Instagram @@ -297,10 +293,6 @@ /\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS ], [VERSION, [NAME, 'GSA']], [ - /AppleWebKit\/([\w\.]+).+kakao(.*)\s+/i, // Kakao App for iOS - / wv\).+chrome\/([\w\.]+).+kakao(.+)\//i // Kakao App for Android - ], [VERSION, [NAME, /(.+)/i, KAKAO+'$1']], [ - /headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless ], [VERSION, [NAME, CHROME+' Headless']], [ diff --git a/test/browser-test.json b/test/browser-test.json index 2be58c21..08f8489c 100644 --- a/test/browser-test.json +++ b/test/browser-test.json @@ -1627,5 +1627,50 @@ "version": "9.0", "major" : "9" } + }, + { + "desc" : "KakaoTalk App Android", + "ua" : "Mozilla/5.0 (Linux; Android 12; SM-G988N Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.79 Mobile Safari/537.36;KAKAOTALK 2409760", + "expect" : { + "name" : "KAKAOTALK", + "version": "2409760", + "major" : "2409760" + } + }, + { + "desc" : "KakaoStory App Android", + "ua" : "Mozilla/5.0 (Linux; Android 12; SM-G988N Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.79 Mobile Safari/537.36 KAKAOSTORY/6.8.3_21046", + "expect" : { + "name" : "KAKAOSTORY", + "version": "6.8.3_21046", + "major" : "6" + } + }, + { + "desc" : "KakaoTalk App iOS", + "ua" : "Mozilla/5.0 (iPhone; CPU; iPhone OS 15_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 BizWebView KAKAOTALK 9.7.6", + "expect" : { + "name" : "KAKAOTALK", + "version": "9.7.6", + "major" : "9" + } + }, + { + "desc" : "Naver App Android", + "ua" : "Mozilla/5.0 (Linux; Android 12; SM-G988N Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/90.0.4430.232 Whale/1.0.0.0 Crosswalk/26.90.3.21 Mobile Safari/537.36 NAVER(inapp; search; 1010; 11.11.2)", + "expect" : { + "name" : "NAVER", + "version": "11.11.2", + "major" : "11" + } + }, + { + "desc" : "Naver App iOS", + "ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/605.1 NAVER(inapp; search; 720; 10.25.0; 11PRO)", + "expect" : { + "name" : "NAVER", + "version": "10.25.0", + "major" : "10" + } } ] From 0b0c7ff6171249f94cafbac4153ae9b9ea704e1f Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Thu, 26 Jan 2023 10:26:38 +0700 Subject: [PATCH 18/20] Fix #619 - Move Sharp up to be checked before Huawei --- src/ua-parser.js | 9 ++++----- test/device-test.json | 9 +++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 34cabc46..99f75077 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -375,7 +375,6 @@ ////////////////////////// // MOBILES & TABLETS - // Ordered by popularity ///////////////////////// // Samsung @@ -396,6 +395,10 @@ /(macintosh);/i ], [MODEL, [VENDOR, APPLE]], [ + // Sharp + /\b(sh-?[altvz]?\d\d[a-ekm]?)/i + ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [ + // Huawei /\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [ @@ -511,10 +514,6 @@ /\bmz-([-\w]{2,})/i ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [ - // Sharp - /\b(sh-?[altvz]?\d\d[a-ekm]?)/i - ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [ - // MIXED /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i, // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron diff --git a/test/device-test.json b/test/device-test.json index bb295286..08874210 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -1764,6 +1764,15 @@ "type": "mobile" } }, + { + "desc": "Sharp Aquos L2", + "ua": "Mozilla/5.0 (Linux; Android 7.0; SH-L02) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Mobile Safari/537.36", + "expect": { + "vendor": "Sharp", + "model": "SH-L02", + "type": "mobile" + } + }, { "desc": "Sharp Aquos R2", "ua": "Mozilla/5.0 (Linux; Android 8.0; SHV42) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.92 Mobile Safari/537.36", From 0cbeb7a82966aac71e7cadb4794669dabd339868 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Thu, 26 Jan 2023 14:03:48 +0700 Subject: [PATCH 19/20] Rearrange the recently added smarttv detection --- readme.md | 36 +++++++++--------- src/ua-parser.js | 83 +++++++++++++++++++----------------------- test/browser-test.json | 2 +- test/device-test.json | 9 +++++ test/os-test.json | 6 +-- 5 files changed, 68 insertions(+), 68 deletions(-) diff --git a/readme.md b/readme.md index 71bb1879..436f038e 100644 --- a/readme.md +++ b/readme.md @@ -80,19 +80,19 @@ The methods are self explanatory, here's a small overview on all the available m # Possible 'browser.name': 2345Explorer, 360 Browser, Amaya, Android Browser, Arora, Avant, Avast, AVG, BIDUBrowser, Baidu, Basilisk, Blazer, Bolt, Brave, Bowser, Camino, Chimera, -Chrome Headless, Chrome WebView, Chrome, Chromium, Comodo Dragon, Dillo, +Chrome Headless, Chrome WebView, Chrome, Chromium, Cobalt, Comodo Dragon, Dillo, Dolphin, Doris, DuckDuckGo, Edge, Electron, Epiphany, Facebook, Falkon, Fennec, Firebird, Firefox [Focus/Reality], Flock, Flow, GSA, GoBrowser, Huawei Browser, ICE Browser, IE, IEMobile, IceApe, IceCat, IceDragon, Iceweasel, Instagram, -Iridium, Iron, Jasmine, K-Meleon, Kindle, Klar, Konqueror, LBBROWSER, Line, -LinkedIn, Links, Lunascape, Lynx, MIUI Browser, Maemo Browser, Maemo, Maxthon, -MetaSr Midori, Minimo, Mobile Safari, Mosaic, Mozilla, NetFront, NetSurf, Netfront, -Netscape, NokiaBrowser, Obigo, Oculus Browser, OmniWeb, Opera Coast, -Opera [Mini/Mobi/Tablet], PaleMoon, PhantomJS, Phoenix, Polaris, Puffin, QQ, -QQBrowser, QQBrowserLite, Quark, QupZilla, RockMelt, Safari, Sailfish Browser, -Samsung Browser, SeaMonkey, Silk, Skyfire, Sleipnir, Slim, SlimBrowser, Swiftfox, -Tesla, Tizen Browser, UCBrowser, UP.Browser, Vivaldi, Waterfox, WeChat, Weibo, -Yandex, baidu, iCab, w3m, Whale Browser... +Iridium, Iron, Jasmine, Kakao[Story/Talk], K-Meleon, Kindle, Klar, Konqueror, +LBBROWSER, Line, LinkedIn, Links, Lunascape, Lynx, MIUI Browser, Maemo Browser, +Maemo, Maxthon, MetaSr Midori, Minimo, Mobile Safari, Mosaic, Mozilla, NetFront, +NetSurf, Netfront, Netscape, NokiaBrowser, Obigo, Oculus Browser, OmniWeb, +Opera Coast, Opera [Mini/Mobi/Tablet], PaleMoon, PhantomJS, Phoenix, Polaris, +Puffin, QQ, QQBrowser, QQBrowserLite, Quark, QupZilla, RockMelt, Safari, +Sailfish Browser, Samsung Browser, SeaMonkey, Silk, Skyfire, Sleipnir, Slim, +SlimBrowser, Swiftfox, Tesla, Tizen Browser, UCBrowser, UP.Browser, Viera, +Vivaldi, Waterfox, WeChat, Weibo, Yandex, baidu, iCab, w3m, Whale Browser... # 'browser.version' determined dynamically ``` @@ -113,10 +113,10 @@ console, mobile, tablet, smarttv, wearable, embedded # Possible 'device.vendor': Acer, Alcatel, Amazon, Apple, Archos, ASUS, AT&T, BenQ, BlackBerry, Dell, -Essential, Fairphone, GeeksPhone, Google, HP, HTC, Huawei, Jolla, Lenovo, LG, -Meizu, Microsoft, Motorola, Nexian, Nintendo, Nokia, Nvidia, OnePlus, OPPO, Ouya, -Palm, Panasonic, Pebble, Polytron, Realme, RIM, Roku, Samsung, Sharp, Siemens, -Sony[Ericsson], Sprint, Tesla, Vivo, Vodafone, Xbox, Xiaomi, Zebra, ZTE, ... +Essential, Facebook, Fairphone, GeeksPhone, Google, HP, HTC, Huawei, Jolla, +Lenovo, LG, Meizu, Microsoft, Motorola, Nexian, Nintendo, Nokia, Nvidia, OnePlus, +OPPO, Ouya, Palm, Panasonic, Pebble, Polytron, Realme, RIM, Roku, Samsung, Sharp, +Siemens, Sony[Ericsson], Sprint, Tesla, Vivo, Vodafone, Xbox, Xiaomi, Zebra, ZTE, ... # 'device.model' determined dynamically ``` @@ -141,10 +141,10 @@ AIX, Amiga OS, Android[-x86], Arch, Bada, BeOS, BlackBerry, CentOS, Chromium OS, Contiki, Fedora, Firefox OS, FreeBSD, Debian, Deepin, DragonFly, elementary OS, Fuchsia, Gentoo, GhostBSD, GNU, Haiku, HarmonyOS, HP-UX, Hurd, iOS, Joli, KaiOS, Linpus, Linspire,Linux, Mac OS, Maemo, Mageia, Mandriva, Manjaro, MeeGo, Minix, -Mint, Morph OS, NetBSD, Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PC-BSD, PCLinuxOS, -Plan9, PlayStation, QNX, Raspbian, RedHat, RIM Tablet OS, RISC OS, Sabayon, -Sailfish, Series40, Slackware, Solaris, SUSE, Symbian, Tizen, Ubuntu, Unix, -VectorLinux, WebOS, Windows [Phone/Mobile], Zenwalk, ... +Mint, Morph OS, NetBSD, NetRange, NetTV, Nintendo, OpenBSD, OpenVMS, OS/2, Palm, +PC-BSD, PCLinuxOS, Plan9, PlayStation, QNX, Raspbian, RedHat, RIM Tablet OS, +RISC OS, Sabayon, Sailfish, Series40, Slackware, Solaris, SUSE, Symbian, Tizen, +Ubuntu, Unix, VectorLinux, Viera, WebOS, Windows [Phone/Mobile], Zenwalk, ... # 'os.version' determined dynamically ``` diff --git a/src/ua-parser.js b/src/ua-parser.js index 45ebee3f..ec23bc94 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -52,10 +52,7 @@ LG = 'LG', MICROSOFT = 'Microsoft', MOTOROLA = 'Motorola', - NETRANGE= 'Netrange', - NETTV = 'NetTV', OPERA = 'Opera', - PANASONIC = 'Panasonic', SAMSUNG = 'Samsung', SHARP = 'Sharp', SONY = 'Sony', @@ -302,8 +299,6 @@ / wv\).+(chrome)\/([\w\.]+)/i // Chrome WebView ], [[NAME, CHROME+' WebView'], VERSION], [ - /Panasonic;(VIERA)/i // Panasonic Viera - ], [[NAME, VIERA]], [ /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i // Android Browser ], [VERSION, [NAME, 'Android '+BROWSER]], [ @@ -338,7 +333,8 @@ // Other /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i, // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser - /(links) \(([\w\.]+)/i // Links + /(links) \(([\w\.]+)/i, // Links + /panasonic;(viera)/i // Panasonic Viera ], [NAME, VERSION], [ /(cobalt)\/([\w\.]+)/i // Cobalt @@ -379,37 +375,6 @@ device : [[ - /////////////////// - // SMARTTVS - /////////////////// - - /smart-tv.+(samsung)/i // Samsung - ], [VENDOR, [TYPE, SMARTTV]], [ - /hbbtv.+maple;(\d+)/i - ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [ - /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i // LG SmartTV - ], [[VENDOR, LG], [TYPE, SMARTTV]], [ - /(apple) ?tv/i // Apple TV - ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [ - /crkey/i // Google Chromecast - ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [ - /droid.+aft(\w)( bui|\))/i // Fire TV - ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [ - /\(dtv[\);].+(aquos)/i, - /(aquos-tv[\w ]+)\)/i // Sharp - ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[ - /(bravia[\w ]+)( bui|\))/i // Sony - ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [ - /(mitv-\w{5}) bui/i // Xiaomi - ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [ - /Hbbtv.*(technisat) (.*);/i // TechniSAT - ], [VENDOR, MODEL, [TYPE, SMARTTV]], [ - /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku - /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices - ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [ - /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors - ], [[TYPE, SMARTTV]], [ - ////////////////////////// // MOBILES & TABLETS ///////////////////////// @@ -539,7 +504,7 @@ // ZTE /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i, - /(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony + /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [ // Acer @@ -631,6 +596,37 @@ /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [ + /////////////////// + // SMARTTVS + /////////////////// + + /smart-tv.+(samsung)/i // Samsung + ], [VENDOR, [TYPE, SMARTTV]], [ + /hbbtv.+maple;(\d+)/i + ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [ + /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i // LG SmartTV + ], [[VENDOR, LG], [TYPE, SMARTTV]], [ + /(apple) ?tv/i // Apple TV + ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [ + /crkey/i // Google Chromecast + ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [ + /droid.+aft(\w)( bui|\))/i // Fire TV + ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [ + /\(dtv[\);].+(aquos)/i, + /(aquos-tv[\w ]+)\)/i // Sharp + ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[ + /(bravia[\w ]+)( bui|\))/i // Sony + ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [ + /(mitv-\w{5}) bui/i // Xiaomi + ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [ + /Hbbtv.*(technisat) (.*);/i // TechniSAT + ], [VENDOR, MODEL, [TYPE, SMARTTV]], [ + /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku + /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices + ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [ + /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors + ], [[TYPE, SMARTTV]], [ + /////////////////// // CONSOLES /////////////////// @@ -745,19 +741,14 @@ ], [[NAME, 'Chromium OS'], VERSION],[ // Smart TVs - /Panasonic;VIERA/i // Panasonic Viera - ], [[NAME, VIERA]], [ - /NETRANGEMMH/i // Netrange - ], [[NAME, NETRANGE]], [ - /nettv\/(\d\.\d.\d)/i // NetTV - ], [VERSION, [NAME, NETTV]], [ - + /panasonic;(viera)/i, // Panasonic Viera + /(netrange)mmh/i, // Netrange + /(nettv)\/(\d+\.[\w\.]+)/i, // NetTV // Console /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation /(xbox); +xbox ([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S) - // Other /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, // Joli/Palm /(mint)[\/\(\) ]?(\w*)/i, // Mint diff --git a/test/browser-test.json b/test/browser-test.json index 440e4d4a..ef0cb34f 100644 --- a/test/browser-test.json +++ b/test/browser-test.json @@ -1283,7 +1283,7 @@ "ua" : "HbbTV/1.2.1 (;Panasonic;VIERA 2015;3.014;a001-003 4000-0000;)", "expect" : { - "name" : "Viera", + "name" : "VIERA", "version" : "undefined", "major" : "undefined" } diff --git a/test/device-test.json b/test/device-test.json index 8dcb4d0c..4f44e84b 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -1476,6 +1476,15 @@ "type": "mobile" } }, + { + "desc": "Panasonic T31", + "ua": "Mozilla/5.0 (Linux; Android 4.2.2; Panasonic T31 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.170 Mobile Safari/537.36 ", + "expect": { + "vendor": "Panasonic", + "model": "T31", + "type": "mobile" + } + }, { "desc": "Panasonic TX-32CSW514 SmartTV", "ua": "HbbTV/1.2.1 (;Panasonic;VIERA 2015;3.014;a001-003 4000-0000;)", diff --git a/test/os-test.json b/test/os-test.json index 3408ddd9..e18d8086 100644 --- a/test/os-test.json +++ b/test/os-test.json @@ -1057,7 +1057,7 @@ "ua" : "HbbTV/1.2.1 (;Panasonic;VIERA 2015;3.014;a001-003 4000-0000;)", "expect" : { - "name" : "Viera", + "name" : "VIERA", "version" : "undefined" } }, @@ -1066,7 +1066,7 @@ "ua" : "Mozilla/5.0 (Linux; U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2207.0 LOEWE-SL410/5.2.0.0 HbbTV/1.4.1 (; LOEWE; SL410; LOH/5.2.0.0;;) FVC/3.0 (LOEWE; SL410;) CE-HTML/1.0 Config (L:deu,CC:DEU) NETRANGEMMH", "expect" : { - "name" : "Netrange", + "name" : "NETRANGE", "version" : "undefined" } }, @@ -1075,7 +1075,7 @@ "ua" : "Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.1; en) Presto/2.6.33 Version/10.70", "expect" : { - "name" : "NetTV", + "name" : "NETTV", "version" : "3.2.1" } }, From f815ca6e9cabce4099103b21423d7a9c4531c57a Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Thu, 26 Jan 2023 14:58:53 +0700 Subject: [PATCH 20/20] Fix #620 - Add new Device: Kobo --- readme.md | 2 +- src/ua-parser.js | 1 + test/device-test.json | 20 +++++++++++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 436f038e..a45e17e8 100644 --- a/readme.md +++ b/readme.md @@ -113,7 +113,7 @@ console, mobile, tablet, smarttv, wearable, embedded # Possible 'device.vendor': Acer, Alcatel, Amazon, Apple, Archos, ASUS, AT&T, BenQ, BlackBerry, Dell, -Essential, Facebook, Fairphone, GeeksPhone, Google, HP, HTC, Huawei, Jolla, +Essential, Facebook, Fairphone, GeeksPhone, Google, HP, HTC, Huawei, Jolla, Kobo, Lenovo, LG, Meizu, Microsoft, Motorola, Nexian, Nintendo, Nokia, Nvidia, OnePlus, OPPO, Ouya, Palm, Panasonic, Pebble, Polytron, Realme, RIM, Roku, Samsung, Sharp, Siemens, Sony[Ericsson], Sprint, Tesla, Vivo, Vodafone, Xbox, Xiaomi, Zebra, ZTE, ... diff --git a/src/ua-parser.js b/src/ua-parser.js index ec23bc94..4a22f671 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -527,6 +527,7 @@ /(oppo) ?([\w ]+) bui/i // OPPO ], [VENDOR, MODEL, [TYPE, MOBILE]], [ + /(kobo)\s(ereader|touch)/i, // Kobo /(archos) (gamepad2?)/i, // Archos /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad /(kindle)\/([\w\.]+)/i, // Kindle diff --git a/test/device-test.json b/test/device-test.json index 4f44e84b..f042a17d 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -817,6 +817,24 @@ "type": "smarttv" } }, + { + "desc": "Kobo eReader", + "ua": "Mozilla/5.0 (Unknown; Linux) AppleWebKit/538.1 (KHTML, like Gecko) Kobo eReader Safari/538.1", + "expect": { + "vendor": "Kobo", + "model": "eReader", + "type": "tablet" + } + }, + { + "desc": "Kobo Touch", + "ua": "Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/538.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/538.1 (Kobo Touch 0377/4.20.14622)", + "expect": { + "vendor": "Kobo", + "model": "Touch", + "type": "tablet" + } + }, { "desc": "Lenovo Tab 2", "ua": "Mozilla/5.0 (Linux; Android 5.0.1; Lenovo TAB 2 A7-30HC Build/LRX21M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.157 Safari/537.36", @@ -826,7 +844,7 @@ "type": "tablet" } }, - { + { "desc": "Lenovo Phone", "ua": "Mozilla/5.0 (Linux; Android 6.0; Lenovo PB2-650M Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.105 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/311.0.0.44.117;]", "expect": {