From 2c28b3e97eae059add923f26f4c9361622ae89d3 Mon Sep 17 00:00:00 2001 From: Igor Topal Date: Fri, 8 Sep 2017 17:40:49 +0300 Subject: [PATCH 1/8] Add new Meizu device type (MZ) support, for correctly parsing --- dist/ua-parser.min.js | 2 +- dist/ua-parser.pack.js | 2 +- package.json | 1 + src/ua-parser.js | 4 ++-- test/device-test.json | 10 ++++++++++ 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/dist/ua-parser.min.js b/dist/ua-parser.min.js index f1de7bc..83fcfb4 100644 --- a/dist/ua-parser.min.js +++ b/dist/ua-parser.min.js @@ -6,4 +6,4 @@ * Copyright © 2012-2016 Faisal Salman * Dual licensed under GPLv2 & MIT */ -(function(window,undefined){"use strict";var LIBVERSION="0.7.14",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){var margedRegexes={};for(var i in regexes){if(extensions[i]&&extensions[i].length%2===0){margedRegexes[i]=extensions[i].concat(regexes[i])}else{margedRegexes[i]=regexes[i]}}return margedRegexes},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.replace(/[^\d\.]/g,"").split(".")[0]:undefined},trim:function(str){return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}};var mapper={rgx:function(ua,arrays){var i=0,j,k,p,q,matches,match;while(i0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){this[q[0]]=q[1].call(this,match)}else{this[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){this[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{this[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){this[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{this[q]=match?match:undefined}}}}i+=2}},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){this[q[0]]=q[1].call(this,match)}else{this[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){this[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{this[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){this[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{this[q]=match?match:undefined}}}}i+=2}},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j * Dual licensed under GPLv2 & MIT */ -!function(i,s){"use strict";var e="0.7.14",o="",r="?",n="function",a="undefined",t="object",d="string",l="major",w="model",u="name",c="type",m="vendor",p="version",b="architecture",g="console",f="mobile",h="tablet",v="smarttv",x="wearable",k="embedded",y={extend:function(i,s){var e={};for(var o in i)s[o]&&s[o].length%2===0?e[o]=s[o].concat(i[o]):e[o]=i[o];return e},has:function(i,s){return"string"==typeof i&&s.toLowerCase().indexOf(i.toLowerCase())!==-1},lowerize:function(i){return i.toLowerCase()},major:function(i){return typeof i===d?i.replace(/[^\d\.]/g,"").split(".")[0]:s},trim:function(i){return i.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}},T={rgx:function(i,e){for(var o,r,a,d,l,w,u=0;u0?2==d.length?typeof d[1]==n?this[d[0]]=d[1].call(this,w):this[d[0]]=d[1]:3==d.length?typeof d[1]!==n||d[1].exec&&d[1].test?this[d[0]]=w?w.replace(d[1],d[2]):s:this[d[0]]=w?d[1].call(this,w,d[2]):s:4==d.length&&(this[d[0]]=w?d[3].call(this,w.replace(d[1],d[2])):s):this[d]=w?w:s;u+=2}},str:function(i,e){for(var o in e)if(typeof e[o]===t&&e[o].length>0){for(var n=0;n0?2==d.length?typeof d[1]==n?this[d[0]]=d[1].call(this,w):this[d[0]]=d[1]:3==d.length?typeof d[1]!==n||d[1].exec&&d[1].test?this[d[0]]=w?w.replace(d[1],d[2]):s:this[d[0]]=w?d[1].call(this,w,d[2]):s:4==d.length&&(this[d[0]]=w?d[3].call(this,w.replace(d[1],d[2])):s):this[d]=w?w:s;u+=2}},str:function(i,e){for(var o in e)if(typeof e[o]===t&&e[o].length>0){for(var n=0;n", "Shane Gautreau ", "Shane Thacker ", + "shchotse ", "Simon Eisenmann ", "Simon Lang ", "Sylvain Gizard ", diff --git a/src/ua-parser.js b/src/ua-parser.js index 5e9b11a..e8077aa 100644 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -520,8 +520,8 @@ ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [ /(blackberry)[\s-]?(\w+)/i, // BlackBerry - /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]+)*/i, - // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron + /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|mz|motorola|polytron)[\s_-]?([\w-]+)*/i, + // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/MZ (Meizu)/Motorola/Polytron /(hp)\s([\w\s]+\w)/i, // HP iPAQ /(asus)-?(\w+)/i // Asus ], [VENDOR, MODEL, [TYPE, MOBILE]], [ diff --git a/test/device-test.json b/test/device-test.json index 0660303..1994350 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -129,6 +129,16 @@ "type" : "tablet" } }, + { + "desc" : "Meizu M3S", + "ua" : "Mozilla/5.0 (X11; Linux; Android 5.1; MZ-M3s Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrom/45.0.2454.94 Mobile Safari/537.36", + "expect" : + { + "vendor" : "MZ", + "model" : "M3s", + "type" : "mobile" + } + }, { "desc" : "Microsoft Lumia 950", "ua" : "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/13.10586", From 8c2607aac9ad9692e9c100f594b92a749d824750 Mon Sep 17 00:00:00 2001 From: Cyrille David Date: Thu, 26 Jul 2018 11:36:10 +0200 Subject: [PATCH 2/8] Extract browser names from test/browser-test.json --- browser_names_extraction.txt | 82 ++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 browser_names_extraction.txt diff --git a/browser_names_extraction.txt b/browser_names_extraction.txt new file mode 100644 index 0000000..4770bc0 --- /dev/null +++ b/browser_names_extraction.txt @@ -0,0 +1,82 @@ +2345Explorer, +Android Browser, +Arora, +Avant , +BIDUBrowser, +Basilisk, +Bolt, +Bowser, +Camino, +Chimera, +Chrome Headless, +Chrome WebView, +Chrome, +Chromium, +Dillo, +Dolphin, +Doris, +Edge, +Epiphany, +Facebook, +Fennec, +Firebird, +Firefox, +Flock, +GSA, +GoBrowser, +IE, +IEMobile, +IceCat, +Iceape, +Iceweasel, +Iridium, +K-Meleon, +Kindle, +Konqueror, +LBBROWSER +Line, +Lunascape, +Lynx, +MIUI Browser, +Maemo Browser, +Maxthon, +MetaSr +Midori, +Minimo, +Mobile Safari, +Mosaic, +Mozilla, +NetFront, +Netscape, +NokiaBrowser, +Oculus Browser, +OmniWeb, +Opera Coast, +Opera Mini, +Opera Mobi, +Opera Tablet, +Opera, +PaleMoon, +PhantomJS, +Phoenix, +Polaris, +Puffin, +QQ, +QQBrowser, +QQBrowserLite, +RockMelt, +Safari, +Samsung Browser, +SeaMonkey, +Silk, +Skyfire, +Slim, +Swiftfox, +Tizen Browser, +UCBrowser, +Vivaldi, +Waterfox, +WeChat, +Yandex, +baidu, +iCab, From 58c71a019efa75c8cf83cad64e38653853d97a83 Mon Sep 17 00:00:00 2001 From: Cyrille David Date: Thu, 26 Jul 2018 11:40:11 +0200 Subject: [PATCH 3/8] Merge README list into extraction --- browser_names_extraction.txt | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/browser_names_extraction.txt b/browser_names_extraction.txt index 4770bc0..edef6e6 100644 --- a/browser_names_extraction.txt +++ b/browser_names_extraction.txt @@ -1,17 +1,23 @@ 2345Explorer, +Amaya, Android Browser, Arora, -Avant , +Avant, BIDUBrowser, +Baidu, Basilisk, +Blazer, Bolt, Bowser, Camino, Chimera, Chrome Headless, Chrome WebView, +Chrome [WebView], Chrome, Chromium, +Comodo Dragon, +Conkeror, Dillo, Dolphin, Doris, @@ -24,21 +30,29 @@ Firefox, Flock, GSA, GoBrowser, +ICE Browser, IE, IEMobile, +IE[Mobile], +IceApe, IceCat, +IceDragon, Iceape, Iceweasel, Iridium, +Iron, +Jasmine, K-Meleon, Kindle, Konqueror, LBBROWSER Line, +Links, Lunascape, Lynx, MIUI Browser, Maemo Browser, +Maemo, Maxthon, MetaSr Midori, @@ -47,7 +61,10 @@ Mobile Safari, Mosaic, Mozilla, NetFront, +NetSurf, +Netfront, Netscape, +Nokia, NokiaBrowser, Oculus Browser, OmniWeb, @@ -55,6 +72,7 @@ Opera Coast, Opera Mini, Opera Mobi, Opera Tablet, +Opera [Mini/Mobi/Tablet], Opera, PaleMoon, PhantomJS, @@ -64,19 +82,26 @@ Puffin, QQ, QQBrowser, QQBrowserLite, +Quark, RockMelt, Safari, Samsung Browser, SeaMonkey, Silk, Skyfire, +Sleipnir, Slim, +SlimBrowser, Swiftfox, Tizen Browser, +Tizen, UCBrowser, Vivaldi, Waterfox, WeChat, +Yandex Yandex, +[Mobile] Safari, baidu, iCab, +w3m, From 565d67bbb68cb7abd203a3c07c094d08da46eaa3 Mon Sep 17 00:00:00 2001 From: Cyrille David Date: Thu, 26 Jul 2018 11:42:45 +0200 Subject: [PATCH 4/8] Remove unconsistant (because outdated?) names Only remove names coming from README. --- browser_names_extraction.txt | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/browser_names_extraction.txt b/browser_names_extraction.txt index edef6e6..5fa1412 100644 --- a/browser_names_extraction.txt +++ b/browser_names_extraction.txt @@ -13,11 +13,9 @@ Camino, Chimera, Chrome Headless, Chrome WebView, -Chrome [WebView], Chrome, Chromium, Comodo Dragon, -Conkeror, Dillo, Dolphin, Doris, @@ -33,7 +31,6 @@ GoBrowser, ICE Browser, IE, IEMobile, -IE[Mobile], IceApe, IceCat, IceDragon, @@ -64,7 +61,6 @@ NetFront, NetSurf, Netfront, Netscape, -Nokia, NokiaBrowser, Oculus Browser, OmniWeb, @@ -72,7 +68,6 @@ Opera Coast, Opera Mini, Opera Mobi, Opera Tablet, -Opera [Mini/Mobi/Tablet], Opera, PaleMoon, PhantomJS, @@ -94,14 +89,12 @@ Slim, SlimBrowser, Swiftfox, Tizen Browser, -Tizen, UCBrowser, Vivaldi, Waterfox, WeChat, Yandex Yandex, -[Mobile] Safari, baidu, iCab, -w3m, +w3m From b49865266c9139f5b732e2d4803aa71fa3f42e19 Mon Sep 17 00:00:00 2001 From: Cyrille David Date: Thu, 26 Jul 2018 11:46:52 +0200 Subject: [PATCH 5/8] Update browser names in README --- browser_names_extraction.txt | 100 ----------------------------------- readme.md | 22 ++++---- 2 files changed, 13 insertions(+), 109 deletions(-) delete mode 100644 browser_names_extraction.txt diff --git a/browser_names_extraction.txt b/browser_names_extraction.txt deleted file mode 100644 index 5fa1412..0000000 --- a/browser_names_extraction.txt +++ /dev/null @@ -1,100 +0,0 @@ -2345Explorer, -Amaya, -Android Browser, -Arora, -Avant, -BIDUBrowser, -Baidu, -Basilisk, -Blazer, -Bolt, -Bowser, -Camino, -Chimera, -Chrome Headless, -Chrome WebView, -Chrome, -Chromium, -Comodo Dragon, -Dillo, -Dolphin, -Doris, -Edge, -Epiphany, -Facebook, -Fennec, -Firebird, -Firefox, -Flock, -GSA, -GoBrowser, -ICE Browser, -IE, -IEMobile, -IceApe, -IceCat, -IceDragon, -Iceape, -Iceweasel, -Iridium, -Iron, -Jasmine, -K-Meleon, -Kindle, -Konqueror, -LBBROWSER -Line, -Links, -Lunascape, -Lynx, -MIUI Browser, -Maemo Browser, -Maemo, -Maxthon, -MetaSr -Midori, -Minimo, -Mobile Safari, -Mosaic, -Mozilla, -NetFront, -NetSurf, -Netfront, -Netscape, -NokiaBrowser, -Oculus Browser, -OmniWeb, -Opera Coast, -Opera Mini, -Opera Mobi, -Opera Tablet, -Opera, -PaleMoon, -PhantomJS, -Phoenix, -Polaris, -Puffin, -QQ, -QQBrowser, -QQBrowserLite, -Quark, -RockMelt, -Safari, -Samsung Browser, -SeaMonkey, -Silk, -Skyfire, -Sleipnir, -Slim, -SlimBrowser, -Swiftfox, -Tizen Browser, -UCBrowser, -Vivaldi, -Waterfox, -WeChat, -Yandex -Yandex, -baidu, -iCab, -w3m diff --git a/readme.md b/readme.md index 33e639e..66159bd 100644 --- a/readme.md +++ b/readme.md @@ -27,15 +27,19 @@ ``` # Possible 'browser.name': -Amaya, Android Browser, Arora, Avant, Baidu, Blazer, Bolt, Bowser, Camino, Chimera, -Chrome [WebView], Chromium, Comodo Dragon, Conkeror, Dillo, Dolphin, Doris, Edge, -Epiphany, Fennec, Firebird, Firefox, Flock, GoBrowser, iCab, ICE Browser, IceApe, -IceCat, IceDragon, Iceweasel, IE[Mobile], Iron, Jasmine, K-Meleon, Konqueror, Kindle, -Links, Lunascape, Lynx, Maemo, Maxthon, Midori, Minimo, MIUI Browser, [Mobile] Safari, -Mosaic, Mozilla, Netfront, Netscape, NetSurf, Nokia, OmniWeb, Opera [Mini/Mobi/Tablet], -PhantomJS, Phoenix, Polaris, QQBrowser, QQBrowserLite, Quark, RockMelt, Silk, Skyfire, -SeaMonkey, Sleipnir, SlimBrowser, Swiftfox, Tizen, UCBrowser, Vivaldi, w3m, Waterfox, -WeChat, Yandex +2345Explorer, Amaya, Android Browser, Arora, Avant, BIDUBrowser, Baidu, +Basilisk, Blazer, Bolt, Bowser, Camino, Chimera, Chrome Headless, +Chrome WebView, Chrome, Chromium, Comodo Dragon, Dillo, Dolphin, Doris, Edge, +Epiphany, Facebook, Fennec, Firebird, Firefox, Flock, GSA, GoBrowser, +ICE Browser, IE, IEMobile, IceApe, IceCat, IceDragon, Iceape, Iceweasel, +Iridium, Iron, Jasmine, K-Meleon, Kindle, Konqueror, LBBROWSER Line, Links, +Lunascape, Lynx, MIUI Browser, Maemo Browser, Maemo, Maxthon, MetaSr Midori, +Minimo, Mobile Safari, Mosaic, Mozilla, NetFront, NetSurf, Netfront, Netscape, +NokiaBrowser, Oculus Browser, OmniWeb, Opera Coast, Opera Mini, Opera Mobi, +Opera Tablet, Opera, PaleMoon, PhantomJS, Phoenix, Polaris, Puffin, QQ, +QQBrowser, QQBrowserLite, Quark, RockMelt, Safari, Samsung Browser, SeaMonkey, +Silk, Skyfire, Sleipnir, Slim, SlimBrowser, Swiftfox, Tizen Browser, UCBrowser, +Vivaldi, Waterfox, WeChat, Yandex, baidu, iCab, w3m # 'browser.version' determined dynamically ``` From 76be1cb328a2b9c501ef769c14706eeed7923bcf Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Sat, 8 Sep 2018 14:21:36 +0700 Subject: [PATCH 6/8] Fix test for Meizu device --- test/device-test.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/device-test.json b/test/device-test.json index f18ca1c..340ddb9 100644 --- a/test/device-test.json +++ b/test/device-test.json @@ -138,7 +138,7 @@ "ua" : "Mozilla/5.0 (X11; Linux; Android 5.1; MZ-M3s Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrom/45.0.2454.94 Mobile Safari/537.36", "expect" : { - "vendor" : "MZ", + "vendor" : "Meizu", "model" : "M3s", "type" : "mobile" } From a142c0ee942a1669a802ec0f78d70168aeaa6616 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Sat, 8 Sep 2018 16:13:45 +0700 Subject: [PATCH 7/8] Update filesize description --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 66159bd..a3abd64 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,6 @@ # UAParser.js - A JavaScript-based User-Agent string parser. Can be used either in browser (client-side) or in node.js (server-side) environment. Also available as jQuery/Zepto plugin, Bower/Meteor package, & RequireJS/AMD module. This library aims to identify detailed type of web browser, layout engine, operating system, cpu architecture, and device type/model, entirely from user-agent string with a relatively small footprint (~11KB when minified / ~4KB gzipped). Written in vanilla JavaScript, which means it doesn't require any other library and can be used independently. However, it's not recommended to use this library as browser detection since the result may not be more accurate than using feature detection. + A JavaScript-based User-Agent string parser. Can be used either in browser (client-side) or in node.js (server-side) environment. Also available as jQuery/Zepto plugin, Bower/Meteor package, & RequireJS/AMD module. This library aims to identify detailed type of web browser, layout engine, operating system, cpu architecture, and device type/model, entirely from user-agent string with a relatively small footprint (~17KB when minified / ~6KB gzipped). Written in vanilla JavaScript, which means it doesn't require any other library and can be used independently. However, it's not recommended to use this library as browser detection since the result may not be more accurate than using feature detection. [![Build Status](https://travis-ci.org/faisalman/ua-parser-js.svg?branch=master)](https://travis-ci.org/faisalman/ua-parser-js) [![NPM downloads](https://img.shields.io/npm/dw/ua-parser-js.svg)](https://www.npmjs.com/package/ua-parser-js) From fc4c0df095fb8b7e7b0fb656f0c76f6b394532d3 Mon Sep 17 00:00:00 2001 From: Matthew Origer Date: Fri, 14 Sep 2018 15:57:26 -0500 Subject: [PATCH 8/8] add Brave browser --- src/ua-parser.js | 3 +++ test/browser-test.json | 12 +++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/ua-parser.js b/src/ua-parser.js index 8c306e4..dd82835 100755 --- a/src/ua-parser.js +++ b/src/ua-parser.js @@ -280,6 +280,9 @@ /(micromessenger)\/([\w\.]+)/i // WeChat ], [[NAME, 'WeChat'], VERSION], [ + /(brave)\/([\w\.]+)/i // Brave browser + ], [[NAME, 'Brave'], VERSION], [ + /(qqbrowserlite)\/([\w\.]+)/i // QQBrowserLite ], [NAME, VERSION], [ diff --git a/test/browser-test.json b/test/browser-test.json index 8deb980..fd3dd2e 100644 --- a/test/browser-test.json +++ b/test/browser-test.json @@ -1051,7 +1051,7 @@ "expect" : { "name" : "BIDUBrowser", - "version" : "8.7", + "version" : "8.7", "major" : "8" } }, @@ -1074,5 +1074,15 @@ "version" : "1.1.0", "major" : "1" } + }, + { + "desc" : "Brave Browser", + "ua" : "Brave/4.5.16 CFNetwork/893.13.1 Darwin/17.3.0 (x86_64)", + "expect" : + { + "name" : "Brave", + "version" : "4.5.16", + "major" : "4" + } } ]