ua-parser-js 0.7.12 → 0.7.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ua-parser-js might be problematic. Click here for more details.
- package/bower.json +1 -1
- package/dist/ua-parser.min.js +3 -2
- package/dist/ua-parser.pack.js +3 -2
- package/package.js +1 -1
- package/package.json +43 -9
- package/readme.md +30 -23
- package/src/ua-parser.js +99 -64
- package/test/browser-test.json +74 -4
- package/test/device-test.json +53 -0
- package/ua-parser-js.jquery.json +1 -1
package/bower.json
CHANGED
package/dist/ua-parser.min.js
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
/**
|
2
|
-
* UAParser.js v0.7.
|
2
|
+
* UAParser.js v0.7.13
|
3
3
|
* Lightweight JavaScript-based User-Agent string parser
|
4
4
|
* https://github.com/faisalman/ua-parser-js
|
5
5
|
*
|
6
6
|
* Copyright © 2012-2016 Faisal Salman <fyzlman@gmail.com>
|
7
7
|
* Dual licensed under GPLv2 & MIT
|
8
|
-
*/(function(e,t){"use strict";var n="0.7.12",r="",i="?",s="function",o="undefined",u="object",a="string",f="major",l="model",c="name",h="type",p="vendor",d="version",v="architecture",m="console",g="mobile",y="tablet",b="smarttv",w="wearable",E="embedded",S={extend:function(e,t){var n={};for(var r in e)t[r]&&t[r].length%2===0?n[r]=t[r].concat(e[r]):n[r]=e[r];return n},has:function(e,t){return typeof e=="string"?t.toLowerCase().indexOf(e.toLowerCase())!==-1:!1},lowerize:function(e){return e.toLowerCase()},major:function(e){return typeof e===a?e.replace(/[^\d\.]/g,"").split(".")[0]:t},trim:function(e){return e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}},x={rgx:function(){var e,n=0,r,i,a,f,l,c,h=arguments;while(n<h.length&&!l){var p=h[n],d=h[n+1];if(typeof e===o){e={};for(a in d)d.hasOwnProperty(a)&&(f=d[a],typeof f===u?e[f[0]]=t:e[f]=t)}r=i=0;while(r<p.length&&!l){l=p[r++].exec(this.getUA());if(!!l)for(a=0;a<d.length;a++)c=l[++i],f=d[a],typeof f===u&&f.length>0?f.length==2?typeof f[1]==s?e[f[0]]=f[1].call(this,c):e[f[0]]=f[1]:f.length==3?typeof f[1]===s&&(!f[1].exec||!f[1].test)?e[f[0]]=c?f[1].call(this,c,f[2]):t:e[f[0]]=c?c.replace(f[1],f[2]):t:f.length==4&&(e[f[0]]=c?f[3].call(this,c.replace(f[1],f[2])):t):e[f]=c?c:t}n+=2}return e},str:function(e,n){for(var r in n)if(typeof n[r]===u&&n[r].length>0){for(var s=0;s<n[r].length;s++)if(S.has(n[r][s],e))return r===i?t:r}else if(S.has(n[r],e))return r===i?t:r;return e}},T={browser:{oldsafari:{version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{amazon:{model:{"Fire Phone":["SD","KF"]}},sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"}}}},N={browser:[[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,/(opera).+version\/([\w\.]+)/i,/(opera)[\/\s]+([\w\.]+)/i],[c,d],[/(opios)[\/\s]+([\w\.]+)/i],[[c,"Opera Mini"],d],[/\s(opr)\/([\w\.]+)/i],[[c,"Opera"],d],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(rekonq)\/([\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs)\/([\w\.-]+)/i],[c,d],[/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i],[[c,"IE"],d],[/(edge)\/((\d+)?[\w\.]+)/i],[c,d],[/(yabrowser)\/([\w\.]+)/i],[[c,"Yandex"],d],[/(comodo_dragon)\/([\w\.]+)/i],[[c,/_/g," "],d],[/(micromessenger)\/([\w\.]+)/i],[[c,"WeChat"],d],[/xiaomi\/miuibrowser\/([\w\.]+)/i],[d,[c,"MIUI Browser"]],[/\swv\).+(chrome)\/([\w\.]+)/i],[[c,/(.+)/,"$1 WebView"],d],[/android.+samsungbrowser\/([\w\.]+)/i,/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i],[d,[c,"Android Browser"]],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i,/(qqbrowser)[\/\s]?([\w\.]+)/i],[c,d],[/(uc\s?browser)[\/\s]?([\w\.]+)/i,/ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i,/juc.+(ucweb)[\/\s]?([\w\.]+)/i],[[c,"UCBrowser"],d],[/(dolfin)\/([\w\.]+)/i],[[c,"Dolphin"],d],[/((?:android.+)crmo|crios)\/([\w\.]+)/i],[[c,"Chrome"],d],[/;fbav\/([\w\.]+);/i],[d,[c,"Facebook"]],[/fxios\/([\w\.-]+)/i],[d,[c,"Firefox"]],[/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],[d,[c,"Mobile Safari"]],[/version\/([\w\.]+).+?(mobile\s?safari|safari)/i],[d,c],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[c,[d,x.str,T.browser.oldsafari.version]],[/(konqueror)\/([\w\.]+)/i,/(webkit|khtml)\/([\w\.]+)/i],[c,d],[/(navigator|netscape)\/([\w\.-]+)/i],[[c,"Netscape"],d],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,/(links)\s\(([\w\.]+)/i,/(gobrowser)\/?([\w\.]+)*/i,/(ice\s?browser)\/v?([\w\._]+)/i,/(mosaic)[\/\s]([\w\.]+)/i],[c,d]],cpu:[[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i],[[v,"amd64"]],[/(ia32(?=;))/i],[[v,S.lowerize]],[/((?:i[346]|x)86)[;\)]/i],[[v,"ia32"]],[/windows\s(ce|mobile);\sppc;/i],[[v,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i],[[v,/ower/,"",S.lowerize]],[/(sun4\w)[;\)]/i],[[v,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+;))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i],[[v,S.lowerize]]],device:[[/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i],[l,p,[h,y]],[/applecoremedia\/[\w\.]+ \((ipad)/],[l,[p,"Apple"],[h,y]],[/(apple\s{0,1}tv)/i],[[l,"Apple TV"],[p,"Apple"]],[/(archos)\s(gamepad2?)/i,/(hp).+(touchpad)/i,/(hp).+(tablet)/i,/(kindle)\/([\w\.]+)/i,/\s(nook)[\w\s]+build\/(\w+)/i,/(dell)\s(strea[kpr\s\d]*[\dko])/i],[p,l,[h,y]],[/(kf[A-z]+)\sbuild\/[\w\.]+.*silk\//i],[l,[p,"Amazon"],[h,y]],[/(sd|kf)[0349hijorstuw]+\sbuild\/[\w\.]+.*silk\//i],[[l,x.str,T.device.amazon.model],[p,"Amazon"],[h,g]],[/\((ip[honed|\s\w*]+);.+(apple)/i],[l,p,[h,g]],[/\((ip[honed|\s\w*]+);/i],[l,[p,"Apple"],[h,g]],[/(blackberry)[\s-]?(\w+)/i,/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola|polytron)[\s_-]?([\w-]+)*/i,/(hp)\s([\w\s]+\w)/i,/(asus)-?(\w+)/i],[p,l,[h,g]],[/\(bb10;\s(\w+)/i],[l,[p,"BlackBerry"],[h,g]],[/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone)/i],[l,[p,"Asus"],[h,y]],[/(sony)\s(tablet\s[ps])\sbuild\//i,/(sony)?(?:sgp.+)\sbuild\//i],[[p,"Sony"],[l,"Xperia Tablet"],[h,y]],[/(?:sony)?(?:(?:(?:c|d)\d{4})|(?:so[-l].+))\sbuild\//i],[[p,"Sony"],[l,"Xperia Phone"],[h,g]],[/\s(ouya)\s/i,/(nintendo)\s([wids3u]+)/i],[p,l,[h,m]],[/android.+;\s(shield)\sbuild/i],[l,[p,"Nvidia"],[h,m]],[/(playstation\s[34portablevi]+)/i],[l,[p,"Sony"],[h,m]],[/(sprint\s(\w+))/i],[[p,x.str,T.device.sprint.vendor],[l,x.str,T.device.sprint.model],[h,g]],[/(lenovo)\s?(S(?:5000|6000)+(?:[-][\w+]))/i],[p,l,[h,y]],[/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i,/(zte)-(\w+)*/i,/(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i],[p,[l,/_/g," "],[h,g]],[/(nexus\s9)/i],[l,[p,"HTC"],[h,y]],[/(nexus\s6p)/i],[l,[p,"Huawei"],[h,g]],[/(microsoft);\s(lumia[\s\w]+)/i],[p,l,[h,g]],[/[\s\(;](xbox(?:\sone)?)[\s\);]/i],[l,[p,"Microsoft"],[h,m]],[/(kin\.[onetw]{3})/i],[[l,/\./g," "],[p,"Microsoft"],[h,g]],[/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?)[\w\s]+build\//i,/mot[\s-]?(\w+)*/i,/(XT\d{3,4}) build\//i,/(nexus\s6)/i],[l,[p,"Motorola"],[h,g]],[/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i],[l,[p,"Motorola"],[h,y]],[/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i],[[p,S.trim],[l,S.trim],[h,b]],[/hbbtv.+maple;(\d+)/i],[[l,/^/,"SmartTV"],[p,"Samsung"],[h,b]],[/\(dtv[\);].+(aquos)/i],[l,[p,"Sharp"],[h,b]],[/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i,/((SM-T\w+))/i],[[p,"Samsung"],l,[h,y]],[/smart-tv.+(samsung)/i],[p,[h,b],l],[/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,/(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,/sec-((sgh\w+))/i],[[p,"Samsung"],l,[h,g]],[/sie-(\w+)*/i],[l,[p,"Siemens"],[h,g]],[/(maemo|nokia).*(n900|lumia\s\d+)/i,/(nokia)[\s_-]?([\w-]+)*/i],[[p,"Nokia"],l,[h,g]],[/android\s3\.[\s\w;-]{10}(a\d{3})/i],[l,[p,"Acer"],[h,y]],[/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i],[[p,"LG"],l,[h,y]],[/(lg) netcast\.tv/i],[p,l,[h,b]],[/(nexus\s[45])/i,/lg[e;\s\/-]+(\w+)*/i],[l,[p,"LG"],[h,g]],[/android.+(ideatab[a-z0-9\-\s]+)/i],[l,[p,"Lenovo"],[h,y]],[/linux;.+((jolla));/i],[p,l,[h,g]],[/((pebble))app\/[\d\.]+\s/i],[p,l,[h,w]],[/android.+;\s(glass)\s\d/i],[l,[p,"Google"],[h,w]],[/android.+(\w+)\s+build\/hm\1/i,/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i,/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d\w)?)\s+build/i],[[l,/_/g," "],[p,"Xiaomi"],[h,g]],[/android.+a000(1)\s+build/i],[l,[p,"OnePlus"],[h,g]],[/\s(tablet)[;\/]/i,/\s(mobile)(?:[;\/]|\ssafari)/i],[[h,S.lowerize],p,l]],engine:[[/windows.+\sedge\/([\w\.]+)/i],[d,[c,"EdgeHTML"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[c,d],[/rv\:([\w\.]+).*(gecko)/i],[d,c]],os:[[/microsoft\s(windows)\s(vista|xp)/i],[c,d],[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s]+\w)*/i,/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[c,[d,x.str,T.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[c,"Windows"],[d,x.str,T.os.windows.version]],[/\((bb)(10);/i],[[c,"BlackBerry"],d],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)[\/\s]([\w\.]+)/i,/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,/linux;.+(sailfish);/i],[c,d],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[c,"Symbian"],d],[/\((series40);/i],[c],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[c,"Firefox OS"],d],[/(nintendo|playstation)\s([wids34portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(mageia|vectorlinux)[;\s]/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[c,d],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[c,"Chromium OS"],d],[/(sunos)\s?([\w\.]+\d)*/i],[[c,"Solaris"],d],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[c,d],[/(haiku)\s(\w+)/i],[c,d],[/(ip[honead]+)(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i],[[c,"iOS"],[d,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i,/(macintosh|mac(?=_powerpc)\s)/i],[[c,"Mac OS"],[d,/_/g,"."]],[/((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,/(unix)\s?([\w\.]+)*/i],[c,d]]},C=function(t,n){if(this instanceof C){var i=t||(e&&e.navigator&&e.navigator.userAgent?e.navigator.userAgent:r),s=n?S.extend(N,n):N;return this.getBrowser=function(){var e=x.rgx.apply(this,s.browser);return e.major=S.major(e.version),e},this.getCPU=function(){return x.rgx.apply(this,s.cpu)},this.getDevice=function(){return x.rgx.apply(this,s.device)},this.getEngine=function(){return x.rgx.apply(this,s.engine)},this.getOS=function(){return x.rgx.apply(this,s.os)},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return i},this.setUA=function(e){return i=e,this},this}return(new C(t,n)).getResult()};C.VERSION=n,C.BROWSER={NAME:c,MAJOR:f,VERSION:d},C.CPU={ARCHITECTURE:v},C.DEVICE={MODEL:l,VENDOR:p,TYPE:h,CONSOLE:m,MOBILE:g,SMARTTV:b,TABLET:y,WEARABLE:w,EMBEDDED:E},C.ENGINE={NAME:c,VERSION:d},C.OS={NAME:c,VERSION:d},typeof exports!==o?(typeof module!==o&&module.exports&&(exports=module.exports=C),exports.UAParser=C):typeof define===s&&define.amd?define(function(){return C}):e.UAParser=C;var k=e.jQuery||e.Zepto;if(typeof k!==o){var L=new C;k.ua=L.getResult(),k.ua.get=function(){return L.getUA()},k.ua.set=function(e){L.setUA(e);var t=L.getResult();for(var n in t)k.ua[n]=t[n]}}})(typeof window=="object"?window:this);
|
8
|
+
*/
|
9
|
+
(function(window,undefined){"use strict";var LIBVERSION="0.7.13",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(i<arrays.length&&!matches){var regex=arrays[i],props=arrays[i+1];j=k=0;while(j<regex.length&&!matches){matches=regex[j++].exec(ua);if(!!matches){for(p=0;p<props.length;p++){match=matches[++k];q=props[p];if(typeof q===OBJ_TYPE&&q.length>0){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<map[i].length;j++){if(util.has(map[i][j],str)){return i===UNKNOWN?undefined:i}}}else if(util.has(map[i],str)){return i===UNKNOWN?undefined:i}}return str}};var maps={browser:{oldsafari:{version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{amazon:{model:{"Fire Phone":["SD","KF"]}},sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2000:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"}}}};var regexes={browser:[[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,/(opera).+version\/([\w\.]+)/i,/(opera)[\/\s]+([\w\.]+)/i],[NAME,VERSION],[/(opios)[\/\s]+([\w\.]+)/i],[[NAME,"Opera Mini"],VERSION],[/\s(opr)\/([\w\.]+)/i],[[NAME,"Opera"],VERSION],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(rekonq)\/([\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser)\/([\w\.-]+)/i],[NAME,VERSION],[/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i],[[NAME,"IE"],VERSION],[/(edge)\/((\d+)?[\w\.]+)/i],[NAME,VERSION],[/(yabrowser)\/([\w\.]+)/i],[[NAME,"Yandex"],VERSION],[/(puffin)\/([\w\.]+)/i],[[NAME,"Puffin"],VERSION],[/(uc\s?browser)[\/\s]?([\w\.]+)/i,/ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i,/juc.+(ucweb)[\/\s]?([\w\.]+)/i,/(ucbrowser)\/([\w\.]+)/i],[[NAME,"UCBrowser"],VERSION],[/(comodo_dragon)\/([\w\.]+)/i],[[NAME,/_/g," "],VERSION],[/(micromessenger)\/([\w\.]+)/i],[[NAME,"WeChat"],VERSION],[/m?(qqbrowser)[\/\s]?([\w\.]+)/i],[NAME,VERSION],[/xiaomi\/miuibrowser\/([\w\.]+)/i],[VERSION,[NAME,"MIUI Browser"]],[/;fbav\/([\w\.]+);/i],[VERSION,[NAME,"Facebook"]],[/(headlesschrome) ([\w\.]+)/i],[VERSION,[NAME,"Chrome Headless"]],[/\swv\).+(chrome)\/([\w\.]+)/i],[[NAME,/(.+)/,"$1 WebView"],VERSION],[/android.+samsungbrowser\/([\w\.]+)/i,/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i],[VERSION,[NAME,"Android Browser"]],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i],[NAME,VERSION],[/(dolfin)\/([\w\.]+)/i],[[NAME,"Dolphin"],VERSION],[/((?:android.+)crmo|crios)\/([\w\.]+)/i],[[NAME,"Chrome"],VERSION],[/(coast)\/([\w\.]+)/i],[[NAME,"Opera Coast"],VERSION],[/fxios\/([\w\.-]+)/i],[VERSION,[NAME,"Firefox"]],[/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],[VERSION,[NAME,"Mobile Safari"]],[/version\/([\w\.]+).+?(mobile\s?safari|safari)/i],[VERSION,NAME],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[NAME,[VERSION,mapper.str,maps.browser.oldsafari.version]],[/(konqueror)\/([\w\.]+)/i,/(webkit|khtml)\/([\w\.]+)/i],[NAME,VERSION],[/(navigator|netscape)\/([\w\.-]+)/i],[[NAME,"Netscape"],VERSION],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,/(links)\s\(([\w\.]+)/i,/(gobrowser)\/?([\w\.]+)*/i,/(ice\s?browser)\/v?([\w\._]+)/i,/(mosaic)[\/\s]([\w\.]+)/i],[NAME,VERSION]],cpu:[[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i],[[ARCHITECTURE,"amd64"]],[/(ia32(?=;))/i],[[ARCHITECTURE,util.lowerize]],[/((?:i[346]|x)86)[;\)]/i],[[ARCHITECTURE,"ia32"]],[/windows\s(ce|mobile);\sppc;/i],[[ARCHITECTURE,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i],[[ARCHITECTURE,/ower/,"",util.lowerize]],[/(sun4\w)[;\)]/i],[[ARCHITECTURE,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+;))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i],[[ARCHITECTURE,util.lowerize]]],device:[[/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i],[MODEL,VENDOR,[TYPE,TABLET]],[/applecoremedia\/[\w\.]+ \((ipad)/],[MODEL,[VENDOR,"Apple"],[TYPE,TABLET]],[/(apple\s{0,1}tv)/i],[[MODEL,"Apple TV"],[VENDOR,"Apple"]],[/(archos)\s(gamepad2?)/i,/(hp).+(touchpad)/i,/(hp).+(tablet)/i,/(kindle)\/([\w\.]+)/i,/\s(nook)[\w\s]+build\/(\w+)/i,/(dell)\s(strea[kpr\s\d]*[\dko])/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(kf[A-z]+)\sbuild\/[\w\.]+.*silk\//i],[MODEL,[VENDOR,"Amazon"],[TYPE,TABLET]],[/(sd|kf)[0349hijorstuw]+\sbuild\/[\w\.]+.*silk\//i],[[MODEL,mapper.str,maps.device.amazon.model],[VENDOR,"Amazon"],[TYPE,MOBILE]],[/\((ip[honed|\s\w*]+);.+(apple)/i],[MODEL,VENDOR,[TYPE,MOBILE]],[/\((ip[honed|\s\w*]+);/i],[MODEL,[VENDOR,"Apple"],[TYPE,MOBILE]],[/(blackberry)[\s-]?(\w+)/i,/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola|polytron)[\s_-]?([\w-]+)*/i,/(hp)\s([\w\s]+\w)/i,/(asus)-?(\w+)/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/\(bb10;\s(\w+)/i],[MODEL,[VENDOR,"BlackBerry"],[TYPE,MOBILE]],[/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone)/i],[MODEL,[VENDOR,"Asus"],[TYPE,TABLET]],[/(sony)\s(tablet\s[ps])\sbuild\//i,/(sony)?(?:sgp.+)\sbuild\//i],[[VENDOR,"Sony"],[MODEL,"Xperia Tablet"],[TYPE,TABLET]],[/(?:sony)?(?:(?:(?:c|d)\d{4})|(?:so[-l].+))\sbuild\//i],[[VENDOR,"Sony"],[MODEL,"Xperia Phone"],[TYPE,MOBILE]],[/\s(ouya)\s/i,/(nintendo)\s([wids3u]+)/i],[VENDOR,MODEL,[TYPE,CONSOLE]],[/android.+;\s(shield)\sbuild/i],[MODEL,[VENDOR,"Nvidia"],[TYPE,CONSOLE]],[/(playstation\s[34portablevi]+)/i],[MODEL,[VENDOR,"Sony"],[TYPE,CONSOLE]],[/(sprint\s(\w+))/i],[[VENDOR,mapper.str,maps.device.sprint.vendor],[MODEL,mapper.str,maps.device.sprint.model],[TYPE,MOBILE]],[/(lenovo)\s?(S(?:5000|6000)+(?:[-][\w+]))/i],[VENDOR,MODEL,[TYPE,TABLET]],[/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i,/(zte)-(\w+)*/i,/(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i],[VENDOR,[MODEL,/_/g," "],[TYPE,MOBILE]],[/(nexus\s9)/i],[MODEL,[VENDOR,"HTC"],[TYPE,TABLET]],[/(nexus\s6p)/i],[MODEL,[VENDOR,"Huawei"],[TYPE,MOBILE]],[/(microsoft);\s(lumia[\s\w]+)/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/[\s\(;](xbox(?:\sone)?)[\s\);]/i],[MODEL,[VENDOR,"Microsoft"],[TYPE,CONSOLE]],[/(kin\.[onetw]{3})/i],[[MODEL,/\./g," "],[VENDOR,"Microsoft"],[TYPE,MOBILE]],[/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?)[\w\s]+build\//i,/mot[\s-]?(\w+)*/i,/(XT\d{3,4}) build\//i,/(nexus\s6)/i],[MODEL,[VENDOR,"Motorola"],[TYPE,MOBILE]],[/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i],[MODEL,[VENDOR,"Motorola"],[TYPE,TABLET]],[/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i],[[VENDOR,util.trim],[MODEL,util.trim],[TYPE,SMARTTV]],[/hbbtv.+maple;(\d+)/i],[[MODEL,/^/,"SmartTV"],[VENDOR,"Samsung"],[TYPE,SMARTTV]],[/\(dtv[\);].+(aquos)/i],[MODEL,[VENDOR,"Sharp"],[TYPE,SMARTTV]],[/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i,/((SM-T\w+))/i],[[VENDOR,"Samsung"],MODEL,[TYPE,TABLET]],[/smart-tv.+(samsung)/i],[VENDOR,[TYPE,SMARTTV],MODEL],[/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,/(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,/sec-((sgh\w+))/i],[[VENDOR,"Samsung"],MODEL,[TYPE,MOBILE]],[/sie-(\w+)*/i],[MODEL,[VENDOR,"Siemens"],[TYPE,MOBILE]],[/(maemo|nokia).*(n900|lumia\s\d+)/i,/(nokia)[\s_-]?([\w-]+)*/i],[[VENDOR,"Nokia"],MODEL,[TYPE,MOBILE]],[/android\s3\.[\s\w;-]{10}(a\d{3})/i],[MODEL,[VENDOR,"Acer"],[TYPE,TABLET]],[/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i],[[VENDOR,"LG"],MODEL,[TYPE,TABLET]],[/(lg) netcast\.tv/i],[VENDOR,MODEL,[TYPE,SMARTTV]],[/(nexus\s[45])/i,/lg[e;\s\/-]+(\w+)*/i],[MODEL,[VENDOR,"LG"],[TYPE,MOBILE]],[/android.+(ideatab[a-z0-9\-\s]+)/i],[MODEL,[VENDOR,"Lenovo"],[TYPE,TABLET]],[/linux;.+((jolla));/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/((pebble))app\/[\d\.]+\s/i],[VENDOR,MODEL,[TYPE,WEARABLE]],[/android.+;\s(oppo)\s?([\w\s]+)\sbuild/i],[VENDOR,MODEL,[TYPE,MOBILE]],[/crkey/i],[[MODEL,"Chromecast"],[VENDOR,"Google"]],[/android.+;\s(glass)\s\d/i],[MODEL,[VENDOR,"Google"],[TYPE,WEARABLE]],[/android.+;\s(pixel c)\s/i],[MODEL,[VENDOR,"Google"],[TYPE,TABLET]],[/android.+;\s(pixel xl|pixel)\s/i],[MODEL,[VENDOR,"Google"],[TYPE,MOBILE]],[/android.+(\w+)\s+build\/hm\1/i,/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i,/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d\w)?)\s+build/i],[[MODEL,/_/g," "],[VENDOR,"Xiaomi"],[TYPE,MOBILE]],[/android.+a000(1)\s+build/i],[MODEL,[VENDOR,"OnePlus"],[TYPE,MOBILE]],[/\s(tablet)[;\/]/i,/\s(mobile)(?:[;\/]|\ssafari)/i],[[TYPE,util.lowerize],VENDOR,MODEL]],engine:[[/windows.+\sedge\/([\w\.]+)/i],[VERSION,[NAME,"EdgeHTML"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[NAME,VERSION],[/rv\:([\w\.]+).*(gecko)/i],[VERSION,NAME]],os:[[/microsoft\s(windows)\s(vista|xp)/i],[NAME,VERSION],[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s]+\w)*/i,/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[NAME,[VERSION,mapper.str,maps.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[NAME,"Windows"],[VERSION,mapper.str,maps.os.windows.version]],[/\((bb)(10);/i],[[NAME,"BlackBerry"],VERSION],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)[\/\s]([\w\.]+)/i,/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,/linux;.+(sailfish);/i],[NAME,VERSION],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[NAME,"Symbian"],VERSION],[/\((series40);/i],[NAME],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[NAME,"Firefox OS"],VERSION],[/(nintendo|playstation)\s([wids34portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(mageia|vectorlinux)[;\s]/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[NAME,VERSION],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[NAME,"Chromium OS"],VERSION],[/(sunos)\s?([\w\.]+\d)*/i],[[NAME,"Solaris"],VERSION],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[NAME,VERSION],[/(haiku)\s(\w+)/i],[NAME,VERSION],[/(ip[honead]+)(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i],[[NAME,"iOS"],[VERSION,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i,/(macintosh|mac(?=_powerpc)\s)/i],[[NAME,"Mac OS"],[VERSION,/_/g,"."]],[/((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,/(unix)\s?([\w\.]+)*/i],[NAME,VERSION]]};var Browser=function(name,version){this[NAME]=name;this[VERSION]=version};var CPU=function(arch){this[ARCHITECTURE]=arch};var Device=function(vendor,model,type){this[VENDOR]=vendor;this[MODEL]=model;this[TYPE]=type};var Engine=Browser;var OS=Browser;var UAParser=function(uastring,extensions){if(!(this instanceof UAParser)){return new UAParser(uastring,extensions).getResult()}var ua=uastring||(window&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:EMPTY);var rgxmap=extensions?util.extend(regexes,extensions):regexes;var browser=new Browser;var cpu=new CPU;var device=new Device;var engine=new Engine;var os=new OS;this.getBrowser=function(){mapper.rgx.call(browser,ua,rgxmap.browser);browser.major=util.major(browser.version);return browser};this.getCPU=function(){mapper.rgx.call(cpu,ua,rgxmap.cpu);return cpu};this.getDevice=function(){mapper.rgx.call(device,ua,rgxmap.device);return device};this.getEngine=function(){mapper.rgx.call(engine,ua,rgxmap.engine);return engine};this.getOS=function(){mapper.rgx.call(os,ua,rgxmap.os);return os};this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}};this.getUA=function(){return ua};this.setUA=function(uastring){ua=uastring;browser=new Browser;cpu=new CPU;device=new Device;engine=new Engine;os=new OS;return this};return this};UAParser.VERSION=LIBVERSION;UAParser.BROWSER={NAME:NAME,MAJOR:MAJOR,VERSION:VERSION};UAParser.CPU={ARCHITECTURE:ARCHITECTURE};UAParser.DEVICE={MODEL:MODEL,VENDOR:VENDOR,TYPE:TYPE,CONSOLE:CONSOLE,MOBILE:MOBILE,SMARTTV:SMARTTV,TABLET:TABLET,WEARABLE:WEARABLE,EMBEDDED:EMBEDDED};UAParser.ENGINE={NAME:NAME,VERSION:VERSION};UAParser.OS={NAME:NAME,VERSION:VERSION};if(typeof exports!==UNDEF_TYPE){if(typeof module!==UNDEF_TYPE&&module.exports){exports=module.exports=UAParser}exports.UAParser=UAParser}else{if(typeof define===FUNC_TYPE&&define.amd){define(function(){return UAParser})}else{window.UAParser=UAParser}}var $=window.jQuery||window.Zepto;if(typeof $!==UNDEF_TYPE){var parser=new UAParser;$.ua=parser.getResult();$.ua.get=function(){return parser.getUA()};$.ua.set=function(uastring){parser.setUA(uastring);var result=parser.getResult();for(var prop in result){$.ua[prop]=result[prop]}}}})(typeof window==="object"?window:this);
|
package/dist/ua-parser.pack.js
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
/**
|
2
|
-
* UAParser.js v0.7.
|
2
|
+
* UAParser.js v0.7.13
|
3
3
|
* Lightweight JavaScript-based User-Agent string parser
|
4
4
|
* https://github.com/faisalman/ua-parser-js
|
5
5
|
*
|
6
6
|
* Copyright © 2012-2016 Faisal Salman <fyzlman@gmail.com>
|
7
7
|
* Dual licensed under GPLv2 & MIT
|
8
|
-
*/(function(e,t){"use strict";var n="0.7.12",r="",i="?",s="function",o="undefined",u="object",a="string",f="major",l="model",c="name",h="type",p="vendor",d="version",v="architecture",m="console",g="mobile",y="tablet",b="smarttv",w="wearable",E="embedded",S={extend:function(e,t){var n={};for(var r in e)t[r]&&t[r].length%2===0?n[r]=t[r].concat(e[r]):n[r]=e[r];return n},has:function(e,t){return typeof e=="string"?t.toLowerCase().indexOf(e.toLowerCase())!==-1:!1},lowerize:function(e){return e.toLowerCase()},major:function(e){return typeof e===a?e.replace(/[^\d\.]/g,"").split(".")[0]:t},trim:function(e){return e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}},x={rgx:function(){var e,n=0,r,i,a,f,l,c,h=arguments;while(n<h.length&&!l){var p=h[n],d=h[n+1];if(typeof e===o){e={};for(a in d)d.hasOwnProperty(a)&&(f=d[a],typeof f===u?e[f[0]]=t:e[f]=t)}r=i=0;while(r<p.length&&!l){l=p[r++].exec(this.getUA());if(!!l)for(a=0;a<d.length;a++)c=l[++i],f=d[a],typeof f===u&&f.length>0?f.length==2?typeof f[1]==s?e[f[0]]=f[1].call(this,c):e[f[0]]=f[1]:f.length==3?typeof f[1]===s&&(!f[1].exec||!f[1].test)?e[f[0]]=c?f[1].call(this,c,f[2]):t:e[f[0]]=c?c.replace(f[1],f[2]):t:f.length==4&&(e[f[0]]=c?f[3].call(this,c.replace(f[1],f[2])):t):e[f]=c?c:t}n+=2}return e},str:function(e,n){for(var r in n)if(typeof n[r]===u&&n[r].length>0){for(var s=0;s<n[r].length;s++)if(S.has(n[r][s],e))return r===i?t:r}else if(S.has(n[r],e))return r===i?t:r;return e}},T={browser:{oldsafari:{version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{amazon:{model:{"Fire Phone":["SD","KF"]}},sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"}}}},N={browser:[[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,/(opera).+version\/([\w\.]+)/i,/(opera)[\/\s]+([\w\.]+)/i],[c,d],[/(opios)[\/\s]+([\w\.]+)/i],[[c,"Opera Mini"],d],[/\s(opr)\/([\w\.]+)/i],[[c,"Opera"],d],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(rekonq)\/([\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs)\/([\w\.-]+)/i],[c,d],[/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i],[[c,"IE"],d],[/(edge)\/((\d+)?[\w\.]+)/i],[c,d],[/(yabrowser)\/([\w\.]+)/i],[[c,"Yandex"],d],[/(comodo_dragon)\/([\w\.]+)/i],[[c,/_/g," "],d],[/(micromessenger)\/([\w\.]+)/i],[[c,"WeChat"],d],[/xiaomi\/miuibrowser\/([\w\.]+)/i],[d,[c,"MIUI Browser"]],[/\swv\).+(chrome)\/([\w\.]+)/i],[[c,/(.+)/,"$1 WebView"],d],[/android.+samsungbrowser\/([\w\.]+)/i,/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i],[d,[c,"Android Browser"]],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i,/(qqbrowser)[\/\s]?([\w\.]+)/i],[c,d],[/(uc\s?browser)[\/\s]?([\w\.]+)/i,/ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i,/juc.+(ucweb)[\/\s]?([\w\.]+)/i],[[c,"UCBrowser"],d],[/(dolfin)\/([\w\.]+)/i],[[c,"Dolphin"],d],[/((?:android.+)crmo|crios)\/([\w\.]+)/i],[[c,"Chrome"],d],[/;fbav\/([\w\.]+);/i],[d,[c,"Facebook"]],[/fxios\/([\w\.-]+)/i],[d,[c,"Firefox"]],[/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],[d,[c,"Mobile Safari"]],[/version\/([\w\.]+).+?(mobile\s?safari|safari)/i],[d,c],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[c,[d,x.str,T.browser.oldsafari.version]],[/(konqueror)\/([\w\.]+)/i,/(webkit|khtml)\/([\w\.]+)/i],[c,d],[/(navigator|netscape)\/([\w\.-]+)/i],[[c,"Netscape"],d],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,/(links)\s\(([\w\.]+)/i,/(gobrowser)\/?([\w\.]+)*/i,/(ice\s?browser)\/v?([\w\._]+)/i,/(mosaic)[\/\s]([\w\.]+)/i],[c,d]],cpu:[[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i],[[v,"amd64"]],[/(ia32(?=;))/i],[[v,S.lowerize]],[/((?:i[346]|x)86)[;\)]/i],[[v,"ia32"]],[/windows\s(ce|mobile);\sppc;/i],[[v,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i],[[v,/ower/,"",S.lowerize]],[/(sun4\w)[;\)]/i],[[v,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+;))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i],[[v,S.lowerize]]],device:[[/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i],[l,p,[h,y]],[/applecoremedia\/[\w\.]+ \((ipad)/],[l,[p,"Apple"],[h,y]],[/(apple\s{0,1}tv)/i],[[l,"Apple TV"],[p,"Apple"]],[/(archos)\s(gamepad2?)/i,/(hp).+(touchpad)/i,/(hp).+(tablet)/i,/(kindle)\/([\w\.]+)/i,/\s(nook)[\w\s]+build\/(\w+)/i,/(dell)\s(strea[kpr\s\d]*[\dko])/i],[p,l,[h,y]],[/(kf[A-z]+)\sbuild\/[\w\.]+.*silk\//i],[l,[p,"Amazon"],[h,y]],[/(sd|kf)[0349hijorstuw]+\sbuild\/[\w\.]+.*silk\//i],[[l,x.str,T.device.amazon.model],[p,"Amazon"],[h,g]],[/\((ip[honed|\s\w*]+);.+(apple)/i],[l,p,[h,g]],[/\((ip[honed|\s\w*]+);/i],[l,[p,"Apple"],[h,g]],[/(blackberry)[\s-]?(\w+)/i,/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola|polytron)[\s_-]?([\w-]+)*/i,/(hp)\s([\w\s]+\w)/i,/(asus)-?(\w+)/i],[p,l,[h,g]],[/\(bb10;\s(\w+)/i],[l,[p,"BlackBerry"],[h,g]],[/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone)/i],[l,[p,"Asus"],[h,y]],[/(sony)\s(tablet\s[ps])\sbuild\//i,/(sony)?(?:sgp.+)\sbuild\//i],[[p,"Sony"],[l,"Xperia Tablet"],[h,y]],[/(?:sony)?(?:(?:(?:c|d)\d{4})|(?:so[-l].+))\sbuild\//i],[[p,"Sony"],[l,"Xperia Phone"],[h,g]],[/\s(ouya)\s/i,/(nintendo)\s([wids3u]+)/i],[p,l,[h,m]],[/android.+;\s(shield)\sbuild/i],[l,[p,"Nvidia"],[h,m]],[/(playstation\s[34portablevi]+)/i],[l,[p,"Sony"],[h,m]],[/(sprint\s(\w+))/i],[[p,x.str,T.device.sprint.vendor],[l,x.str,T.device.sprint.model],[h,g]],[/(lenovo)\s?(S(?:5000|6000)+(?:[-][\w+]))/i],[p,l,[h,y]],[/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i,/(zte)-(\w+)*/i,/(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i],[p,[l,/_/g," "],[h,g]],[/(nexus\s9)/i],[l,[p,"HTC"],[h,y]],[/(nexus\s6p)/i],[l,[p,"Huawei"],[h,g]],[/(microsoft);\s(lumia[\s\w]+)/i],[p,l,[h,g]],[/[\s\(;](xbox(?:\sone)?)[\s\);]/i],[l,[p,"Microsoft"],[h,m]],[/(kin\.[onetw]{3})/i],[[l,/\./g," "],[p,"Microsoft"],[h,g]],[/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?)[\w\s]+build\//i,/mot[\s-]?(\w+)*/i,/(XT\d{3,4}) build\//i,/(nexus\s6)/i],[l,[p,"Motorola"],[h,g]],[/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i],[l,[p,"Motorola"],[h,y]],[/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i],[[p,S.trim],[l,S.trim],[h,b]],[/hbbtv.+maple;(\d+)/i],[[l,/^/,"SmartTV"],[p,"Samsung"],[h,b]],[/\(dtv[\);].+(aquos)/i],[l,[p,"Sharp"],[h,b]],[/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i,/((SM-T\w+))/i],[[p,"Samsung"],l,[h,y]],[/smart-tv.+(samsung)/i],[p,[h,b],l],[/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,/(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,/sec-((sgh\w+))/i],[[p,"Samsung"],l,[h,g]],[/sie-(\w+)*/i],[l,[p,"Siemens"],[h,g]],[/(maemo|nokia).*(n900|lumia\s\d+)/i,/(nokia)[\s_-]?([\w-]+)*/i],[[p,"Nokia"],l,[h,g]],[/android\s3\.[\s\w;-]{10}(a\d{3})/i],[l,[p,"Acer"],[h,y]],[/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i],[[p,"LG"],l,[h,y]],[/(lg) netcast\.tv/i],[p,l,[h,b]],[/(nexus\s[45])/i,/lg[e;\s\/-]+(\w+)*/i],[l,[p,"LG"],[h,g]],[/android.+(ideatab[a-z0-9\-\s]+)/i],[l,[p,"Lenovo"],[h,y]],[/linux;.+((jolla));/i],[p,l,[h,g]],[/((pebble))app\/[\d\.]+\s/i],[p,l,[h,w]],[/android.+;\s(glass)\s\d/i],[l,[p,"Google"],[h,w]],[/android.+(\w+)\s+build\/hm\1/i,/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i,/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d\w)?)\s+build/i],[[l,/_/g," "],[p,"Xiaomi"],[h,g]],[/android.+a000(1)\s+build/i],[l,[p,"OnePlus"],[h,g]],[/\s(tablet)[;\/]/i,/\s(mobile)(?:[;\/]|\ssafari)/i],[[h,S.lowerize],p,l]],engine:[[/windows.+\sedge\/([\w\.]+)/i],[d,[c,"EdgeHTML"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[c,d],[/rv\:([\w\.]+).*(gecko)/i],[d,c]],os:[[/microsoft\s(windows)\s(vista|xp)/i],[c,d],[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s]+\w)*/i,/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[c,[d,x.str,T.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[c,"Windows"],[d,x.str,T.os.windows.version]],[/\((bb)(10);/i],[[c,"BlackBerry"],d],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)[\/\s]([\w\.]+)/i,/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,/linux;.+(sailfish);/i],[c,d],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[c,"Symbian"],d],[/\((series40);/i],[c],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[c,"Firefox OS"],d],[/(nintendo|playstation)\s([wids34portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(mageia|vectorlinux)[;\s]/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[c,d],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[c,"Chromium OS"],d],[/(sunos)\s?([\w\.]+\d)*/i],[[c,"Solaris"],d],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[c,d],[/(haiku)\s(\w+)/i],[c,d],[/(ip[honead]+)(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i],[[c,"iOS"],[d,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i,/(macintosh|mac(?=_powerpc)\s)/i],[[c,"Mac OS"],[d,/_/g,"."]],[/((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,/(unix)\s?([\w\.]+)*/i],[c,d]]},C=function(t,n){if(this instanceof C){var i=t||(e&&e.navigator&&e.navigator.userAgent?e.navigator.userAgent:r),s=n?S.extend(N,n):N;return this.getBrowser=function(){var e=x.rgx.apply(this,s.browser);return e.major=S.major(e.version),e},this.getCPU=function(){return x.rgx.apply(this,s.cpu)},this.getDevice=function(){return x.rgx.apply(this,s.device)},this.getEngine=function(){return x.rgx.apply(this,s.engine)},this.getOS=function(){return x.rgx.apply(this,s.os)},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return i},this.setUA=function(e){return i=e,this},this}return(new C(t,n)).getResult()};C.VERSION=n,C.BROWSER={NAME:c,MAJOR:f,VERSION:d},C.CPU={ARCHITECTURE:v},C.DEVICE={MODEL:l,VENDOR:p,TYPE:h,CONSOLE:m,MOBILE:g,SMARTTV:b,TABLET:y,WEARABLE:w,EMBEDDED:E},C.ENGINE={NAME:c,VERSION:d},C.OS={NAME:c,VERSION:d},typeof exports!==o?(typeof module!==o&&module.exports&&(exports=module.exports=C),exports.UAParser=C):typeof define===s&&define.amd?define(function(){return C}):e.UAParser=C;var k=e.jQuery||e.Zepto;if(typeof k!==o){var L=new C;k.ua=L.getResult(),k.ua.get=function(){return L.getUA()},k.ua.set=function(e){L.setUA(e);var t=L.getResult();for(var n in t)k.ua[n]=t[n]}}})(typeof window=="object"?window:this);
|
8
|
+
*/
|
9
|
+
!function(i,s){"use strict";var e="0.7.13",o="",r="?",n="function",a="undefined",t="object",w="string",l="major",d="model",c="name",u="type",m="vendor",p="version",b="architecture",f="console",h="mobile",g="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===w?i.replace(/[^\d\.]/g,"").split(".")[0]:s},trim:function(i){return i.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}},A={rgx:function(i,e){for(var o,r,a,w,l,d,c=0;c<e.length&&!l;){var u=e[c],m=e[c+1];for(o=r=0;o<u.length&&!l;)if(l=u[o++].exec(i))for(a=0;a<m.length;a++)d=l[++r],w=m[a],typeof w===t&&w.length>0?2==w.length?typeof w[1]==n?this[w[0]]=w[1].call(this,d):this[w[0]]=w[1]:3==w.length?typeof w[1]!==n||w[1].exec&&w[1].test?this[w[0]]=d?d.replace(w[1],w[2]):s:this[w[0]]=d?w[1].call(this,d,w[2]):s:4==w.length&&(this[w[0]]=d?w[3].call(this,d.replace(w[1],w[2])):s):this[w]=d?d:s;c+=2}},str:function(i,e){for(var o in e)if(typeof e[o]===t&&e[o].length>0){for(var n=0;n<e[o].length;n++)if(y.has(e[o][n],i))return o===r?s:o}else if(y.has(e[o],i))return o===r?s:o;return i}},E={browser:{oldsafari:{version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{amazon:{model:{"Fire Phone":["SD","KF"]}},sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2000:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"}}}},S={browser:[[/(opera\smini)\/([\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/([\w\.-]+)/i,/(opera).+version\/([\w\.]+)/i,/(opera)[\/\s]+([\w\.]+)/i],[c,p],[/(opios)[\/\s]+([\w\.]+)/i],[[c,"Opera Mini"],p],[/\s(opr)\/([\w\.]+)/i],[[c,"Opera"],p],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i,/(?:ms|\()(ie)\s([\w\.]+)/i,/(rekonq)\/([\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser)\/([\w\.-]+)/i],[c,p],[/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i],[[c,"IE"],p],[/(edge)\/((\d+)?[\w\.]+)/i],[c,p],[/(yabrowser)\/([\w\.]+)/i],[[c,"Yandex"],p],[/(puffin)\/([\w\.]+)/i],[[c,"Puffin"],p],[/(uc\s?browser)[\/\s]?([\w\.]+)/i,/ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i,/juc.+(ucweb)[\/\s]?([\w\.]+)/i,/(ucbrowser)\/([\w\.]+)/i],[[c,"UCBrowser"],p],[/(comodo_dragon)\/([\w\.]+)/i],[[c,/_/g," "],p],[/(micromessenger)\/([\w\.]+)/i],[[c,"WeChat"],p],[/m?(qqbrowser)[\/\s]?([\w\.]+)/i],[c,p],[/xiaomi\/miuibrowser\/([\w\.]+)/i],[p,[c,"MIUI Browser"]],[/;fbav\/([\w\.]+);/i],[p,[c,"Facebook"]],[/(headlesschrome) ([\w\.]+)/i],[p,[c,"Chrome Headless"]],[/\swv\).+(chrome)\/([\w\.]+)/i],[[c,/(.+)/,"$1 WebView"],p],[/android.+samsungbrowser\/([\w\.]+)/i,/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i],[p,[c,"Android Browser"]],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i],[c,p],[/(dolfin)\/([\w\.]+)/i],[[c,"Dolphin"],p],[/((?:android.+)crmo|crios)\/([\w\.]+)/i],[[c,"Chrome"],p],[/(coast)\/([\w\.]+)/i],[[c,"Opera Coast"],p],[/fxios\/([\w\.-]+)/i],[p,[c,"Firefox"]],[/version\/([\w\.]+).+?mobile\/\w+\s(safari)/i],[p,[c,"Mobile Safari"]],[/version\/([\w\.]+).+?(mobile\s?safari|safari)/i],[p,c],[/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i],[c,[p,A.str,E.browser.oldsafari.version]],[/(konqueror)\/([\w\.]+)/i,/(webkit|khtml)\/([\w\.]+)/i],[c,p],[/(navigator|netscape)\/([\w\.-]+)/i],[[c,"Netscape"],p],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i,/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,/(links)\s\(([\w\.]+)/i,/(gobrowser)\/?([\w\.]+)*/i,/(ice\s?browser)\/v?([\w\._]+)/i,/(mosaic)[\/\s]([\w\.]+)/i],[c,p]],cpu:[[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i],[[b,"amd64"]],[/(ia32(?=;))/i],[[b,y.lowerize]],[/((?:i[346]|x)86)[;\)]/i],[[b,"ia32"]],[/windows\s(ce|mobile);\sppc;/i],[[b,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i],[[b,/ower/,"",y.lowerize]],[/(sun4\w)[;\)]/i],[[b,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+;))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i],[[b,y.lowerize]]],device:[[/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i],[d,m,[u,g]],[/applecoremedia\/[\w\.]+ \((ipad)/],[d,[m,"Apple"],[u,g]],[/(apple\s{0,1}tv)/i],[[d,"Apple TV"],[m,"Apple"]],[/(archos)\s(gamepad2?)/i,/(hp).+(touchpad)/i,/(hp).+(tablet)/i,/(kindle)\/([\w\.]+)/i,/\s(nook)[\w\s]+build\/(\w+)/i,/(dell)\s(strea[kpr\s\d]*[\dko])/i],[m,d,[u,g]],[/(kf[A-z]+)\sbuild\/[\w\.]+.*silk\//i],[d,[m,"Amazon"],[u,g]],[/(sd|kf)[0349hijorstuw]+\sbuild\/[\w\.]+.*silk\//i],[[d,A.str,E.device.amazon.model],[m,"Amazon"],[u,h]],[/\((ip[honed|\s\w*]+);.+(apple)/i],[d,m,[u,h]],[/\((ip[honed|\s\w*]+);/i],[d,[m,"Apple"],[u,h]],[/(blackberry)[\s-]?(\w+)/i,/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola|polytron)[\s_-]?([\w-]+)*/i,/(hp)\s([\w\s]+\w)/i,/(asus)-?(\w+)/i],[m,d,[u,h]],[/\(bb10;\s(\w+)/i],[d,[m,"BlackBerry"],[u,h]],[/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone)/i],[d,[m,"Asus"],[u,g]],[/(sony)\s(tablet\s[ps])\sbuild\//i,/(sony)?(?:sgp.+)\sbuild\//i],[[m,"Sony"],[d,"Xperia Tablet"],[u,g]],[/(?:sony)?(?:(?:(?:c|d)\d{4})|(?:so[-l].+))\sbuild\//i],[[m,"Sony"],[d,"Xperia Phone"],[u,h]],[/\s(ouya)\s/i,/(nintendo)\s([wids3u]+)/i],[m,d,[u,f]],[/android.+;\s(shield)\sbuild/i],[d,[m,"Nvidia"],[u,f]],[/(playstation\s[34portablevi]+)/i],[d,[m,"Sony"],[u,f]],[/(sprint\s(\w+))/i],[[m,A.str,E.device.sprint.vendor],[d,A.str,E.device.sprint.model],[u,h]],[/(lenovo)\s?(S(?:5000|6000)+(?:[-][\w+]))/i],[m,d,[u,g]],[/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i,/(zte)-(\w+)*/i,/(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i],[m,[d,/_/g," "],[u,h]],[/(nexus\s9)/i],[d,[m,"HTC"],[u,g]],[/(nexus\s6p)/i],[d,[m,"Huawei"],[u,h]],[/(microsoft);\s(lumia[\s\w]+)/i],[m,d,[u,h]],[/[\s\(;](xbox(?:\sone)?)[\s\);]/i],[d,[m,"Microsoft"],[u,f]],[/(kin\.[onetw]{3})/i],[[d,/\./g," "],[m,"Microsoft"],[u,h]],[/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?(:?\s4g)?)[\w\s]+build\//i,/mot[\s-]?(\w+)*/i,/(XT\d{3,4}) build\//i,/(nexus\s6)/i],[d,[m,"Motorola"],[u,h]],[/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i],[d,[m,"Motorola"],[u,g]],[/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i],[[m,y.trim],[d,y.trim],[u,v]],[/hbbtv.+maple;(\d+)/i],[[d,/^/,"SmartTV"],[m,"Samsung"],[u,v]],[/\(dtv[\);].+(aquos)/i],[d,[m,"Sharp"],[u,v]],[/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i,/((SM-T\w+))/i],[[m,"Samsung"],d,[u,g]],[/smart-tv.+(samsung)/i],[m,[u,v],d],[/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,/(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,/sec-((sgh\w+))/i],[[m,"Samsung"],d,[u,h]],[/sie-(\w+)*/i],[d,[m,"Siemens"],[u,h]],[/(maemo|nokia).*(n900|lumia\s\d+)/i,/(nokia)[\s_-]?([\w-]+)*/i],[[m,"Nokia"],d,[u,h]],[/android\s3\.[\s\w;-]{10}(a\d{3})/i],[d,[m,"Acer"],[u,g]],[/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i],[[m,"LG"],d,[u,g]],[/(lg) netcast\.tv/i],[m,d,[u,v]],[/(nexus\s[45])/i,/lg[e;\s\/-]+(\w+)*/i],[d,[m,"LG"],[u,h]],[/android.+(ideatab[a-z0-9\-\s]+)/i],[d,[m,"Lenovo"],[u,g]],[/linux;.+((jolla));/i],[m,d,[u,h]],[/((pebble))app\/[\d\.]+\s/i],[m,d,[u,x]],[/android.+;\s(oppo)\s?([\w\s]+)\sbuild/i],[m,d,[u,h]],[/crkey/i],[[d,"Chromecast"],[m,"Google"]],[/android.+;\s(glass)\s\d/i],[d,[m,"Google"],[u,x]],[/android.+;\s(pixel c)\s/i],[d,[m,"Google"],[u,g]],[/android.+;\s(pixel xl|pixel)\s/i],[d,[m,"Google"],[u,h]],[/android.+(\w+)\s+build\/hm\1/i,/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i,/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d\w)?)\s+build/i],[[d,/_/g," "],[m,"Xiaomi"],[u,h]],[/android.+a000(1)\s+build/i],[d,[m,"OnePlus"],[u,h]],[/\s(tablet)[;\/]/i,/\s(mobile)(?:[;\/]|\ssafari)/i],[[u,y.lowerize],m,d]],engine:[[/windows.+\sedge\/([\w\.]+)/i],[p,[c,"EdgeHTML"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[c,p],[/rv\:([\w\.]+).*(gecko)/i],[p,c]],os:[[/microsoft\s(windows)\s(vista|xp)/i],[c,p],[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s]+\w)*/i,/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[c,[p,A.str,E.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[c,"Windows"],[p,A.str,E.os.windows.version]],[/\((bb)(10);/i],[[c,"BlackBerry"],p],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)[\/\s]([\w\.]+)/i,/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i,/linux;.+(sailfish);/i],[c,p],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[c,"Symbian"],p],[/\((series40);/i],[c],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[c,"Firefox OS"],p],[/(nintendo|playstation)\s([wids34portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(mageia|vectorlinux)[;\s]/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[c,p],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[c,"Chromium OS"],p],[/(sunos)\s?([\w\.]+\d)*/i],[[c,"Solaris"],p],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[c,p],[/(haiku)\s(\w+)/i],[c,p],[/(ip[honead]+)(?:.*os\s([\w]+)*\slike\smac|;\sopera)/i],[[c,"iOS"],[p,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i,/(macintosh|mac(?=_powerpc)\s)/i],[[c,"Mac OS"],[p,/_/g,"."]],[/((?:open)?solaris)[\/\s-]?([\w\.]+)*/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,/(unix)\s?([\w\.]+)*/i],[c,p]]},T=function(i,s){this[c]=i,this[p]=s},N=function(i){this[b]=i},O=function(i,s,e){this[m]=i,this[d]=s,this[u]=e},z=T,M=T,C=function(s,e){if(!(this instanceof C))return new C(s,e).getResult();var r=s||(i&&i.navigator&&i.navigator.userAgent?i.navigator.userAgent:o),n=e?y.extend(S,e):S,a=new T,t=new N,w=new O,l=new z,d=new M;return this.getBrowser=function(){return A.rgx.call(a,r,n.browser),a.major=y.major(a.version),a},this.getCPU=function(){return A.rgx.call(t,r,n.cpu),t},this.getDevice=function(){return A.rgx.call(w,r,n.device),w},this.getEngine=function(){return A.rgx.call(l,r,n.engine),l},this.getOS=function(){return A.rgx.call(d,r,n.os),d},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return r},this.setUA=function(i){return r=i,a=new T,t=new N,w=new O,l=new z,d=new M,this},this};C.VERSION=e,C.BROWSER={NAME:c,MAJOR:l,VERSION:p},C.CPU={ARCHITECTURE:b},C.DEVICE={MODEL:d,VENDOR:m,TYPE:u,CONSOLE:f,MOBILE:h,SMARTTV:v,TABLET:g,WEARABLE:x,EMBEDDED:k},C.ENGINE={NAME:c,VERSION:p},C.OS={NAME:c,VERSION:p},typeof exports!==a?(typeof module!==a&&module.exports&&(exports=module.exports=C),exports.UAParser=C):typeof define===n&&define.amd?define(function(){return C}):i.UAParser=C;var R=i.jQuery||i.Zepto;if(typeof R!==a){var _=new C;R.ua=_.getResult(),R.ua.get=function(){return _.getUA()},R.ua.set=function(i){_.setUA(i);var s=_.getResult();for(var e in s)R.ua[e]=s[e]}}}("object"==typeof window?window:this);
|
package/package.js
CHANGED
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"title": "UAParser.js",
|
3
3
|
"name": "ua-parser-js",
|
4
|
-
"version": "0.7.
|
4
|
+
"version": "0.7.13",
|
5
5
|
"author": "Faisal Salman <fyzlman@gmail.com> (http://faisalman.com)",
|
6
6
|
"description": "Lightweight JavaScript-based user-agent string parser",
|
7
7
|
"keywords": [
|
@@ -15,34 +15,69 @@
|
|
15
15
|
],
|
16
16
|
"homepage": "http://github.com/faisalman/ua-parser-js",
|
17
17
|
"contributors": [
|
18
|
-
"
|
18
|
+
"Aamir Poonawalla <aamir@urx.com>",
|
19
|
+
"Admas <mollases@users.noreply.github.com>",
|
20
|
+
"algenon <m@antonz.ru>",
|
21
|
+
"Andrea Vaghi <andrea.vaghi@jobrapido.com>",
|
22
|
+
"Anton Zhiyanov <m@antonz.ru>",
|
23
|
+
"Austin Pray <austin@austinpray.com>",
|
19
24
|
"Benjamin Bertrand <bertrand.design@gmail.com>",
|
25
|
+
"boneyao <admin@boneyao.com>",
|
20
26
|
"Carl C Von Lewin <carlchristianlewin@gmail.com>",
|
27
|
+
"CESAR RAMOS <c@imagenproactiva.com>",
|
21
28
|
"Christopher De Cairos <chris.decairos@gmail.com>",
|
22
29
|
"Davit Barbakadze <jayarjo@gmail.com>",
|
30
|
+
"ddivernois <david-emmanuel.divernois@amadeus.com>",
|
31
|
+
"Demis Palma <demis.palma@gmail.com>",
|
23
32
|
"Dmitry Tyschenko <dtyschenko@gmail.com>",
|
24
33
|
"Douglas Li <doug@knotch.it>",
|
25
34
|
"Dumitru Uzun <contact@duzun.me>",
|
26
35
|
"Erik Hesselink <hesselink@gmail.com>",
|
27
36
|
"Fabian Becker <halfdan@xnorfz.de>",
|
37
|
+
"Faisal Salman <fyzlman@gmail.com>",
|
38
|
+
"Frédéric Camblor <fcamblor@gmail.com>",
|
39
|
+
"Grigory Dmitrenko <grigory@snsk.ru>",
|
28
40
|
"Hendrik Helwich <h.helwich@iplabs.de>",
|
29
|
-
"
|
41
|
+
"jackpoll <jackpoll123456@gmail.com>",
|
30
42
|
"Jake Mc <startswithaj@users.noreply.github.com>",
|
31
43
|
"John Tantalo <john.tantalo@gmail.com>",
|
32
44
|
"John Yanarella <jmy@codecatalyst.com>",
|
33
45
|
"Jon Buckley <jon@jbuckley.ca>",
|
34
46
|
"Kendall Buchanan <kendall@kendagriff.com>",
|
35
47
|
"Lee Treveil <leetreveil@gmail.com>",
|
36
|
-
"
|
48
|
+
"leonardo <leofiore@libero.it>",
|
49
|
+
"Levente Balogh <noreply@github.com>",
|
50
|
+
"Liam Quinn <lquinn@blackberry.com>",
|
51
|
+
"Lithin <lithin@webklipper.com>",
|
52
|
+
"Lukas Eipert <leipert@users.noreply.github.com>",
|
53
|
+
"Malash <i@malash.me>",
|
54
|
+
"Martynas <noreply@github.com>",
|
55
|
+
"Maximilian Haupt <mail@maximilianhaupt.com>",
|
37
56
|
"Max Maurer <maxemanuel.maurer@gmail.com>",
|
38
57
|
"Michael Hess <mhess@connectify.me>",
|
39
|
-
"
|
58
|
+
"naoh <noreply@github.com>",
|
59
|
+
"Nik Rolls <nik@rolls.cc>",
|
60
|
+
"niris <nirisix@gmail.com>",
|
61
|
+
"otakuSiD <otakusid@gmail.com>",
|
62
|
+
"Peter Dave Hello <PeterDaveHello@users.noreply.github.com>",
|
63
|
+
"philippsimon <github@philippsimon.de>",
|
64
|
+
"Pieter Hendrickx <pieter.hendrickx@belfius.be>",
|
65
|
+
"Robert Tod <robert@qubit.com>",
|
40
66
|
"Ross Noble <rosshnoble@gmail.com>",
|
41
|
-
"Sandro Sonntag <sandro.sonntag@adorsys.de>"
|
67
|
+
"Sandro Sonntag <sandro.sonntag@adorsys.de>",
|
68
|
+
"sgautrea <shanegautreau@gmail.com>",
|
69
|
+
"Shane Gautreau <sgautrea@opentext.com>",
|
70
|
+
"Shane Thacker <shane@steadymade.com>",
|
71
|
+
"Simon Eisenmann <simon@longsleep.org>",
|
72
|
+
"Simon Lang <me@simonlang.org>",
|
73
|
+
"Sylvain Gizard <sylvain.gizard@gmail.com>",
|
74
|
+
"szchenghuang <szchenghuang@gmail.com>",
|
75
|
+
"Vadim Kurachevsky <vadim@hmvs.org>",
|
76
|
+
"Yun Young-jin <yupmin@yupmin-office-macmini.local>"
|
42
77
|
],
|
43
78
|
"main": "src/ua-parser.js",
|
44
79
|
"scripts": {
|
45
|
-
"build": "uglifyjs src/ua-parser.js
|
80
|
+
"build": "uglifyjs src/ua-parser.js -o dist/ua-parser.min.js --comments '/UAParser\\.js/' && uglifyjs src/ua-parser.js -o dist/ua-parser.pack.js --comments '/UAParser\\.js/' --compress --mangle",
|
46
81
|
"test": "jshint src/ua-parser.js && mocha -R nyan test/test.js",
|
47
82
|
"verup": "node ./node_modules/verup",
|
48
83
|
"version": "node ./node_modules/verup 0"
|
@@ -50,7 +85,6 @@
|
|
50
85
|
"verup": {
|
51
86
|
"files": [
|
52
87
|
"ua-parser-js.jquery.json",
|
53
|
-
"component.json",
|
54
88
|
"bower.json",
|
55
89
|
"package.js",
|
56
90
|
"src/ua-parser.js"
|
@@ -64,7 +98,7 @@
|
|
64
98
|
"jshint": "~1.1.0",
|
65
99
|
"mocha": "~1.8.0",
|
66
100
|
"requirejs": "^2.3.2",
|
67
|
-
"uglify-js": "~
|
101
|
+
"uglify-js": "~2.7.5",
|
68
102
|
"verup": "^1.3.x"
|
69
103
|
},
|
70
104
|
"repository": {
|
package/readme.md
CHANGED
@@ -1,18 +1,26 @@
|
|
1
1
|
# UAParser.js
|
2
2
|
|
3
|
-
<img align="right" src="https://raw.githubusercontent.com/faisalman/ua-parser-js/gh-pages/images/logo.png"> A
|
3
|
+
<img align="right" src="https://raw.githubusercontent.com/faisalman/ua-parser-js/gh-pages/images/logo.png"> 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 accurate than using feature detection.
|
4
4
|
|
5
5
|
[](https://travis-ci.org/faisalman/ua-parser-js)
|
6
|
+
[](https://www.npmjs.com/package/ua-parser-js)
|
6
7
|
[](https://www.npmjs.com/package/ua-parser-js)
|
7
8
|
[](https://bower.io/)
|
8
9
|
[](https://cdnjs.com/libraries/UAParser.js)
|
9
10
|
[](https://gratipay.com/UAParser.js)
|
10
11
|
[](http://flattr.com/thing/3867907/faisalmanua-parser-js-on-GitHub)
|
11
12
|
|
12
|
-
* Author : Faisal Salman <<
|
13
|
+
* Author : Faisal Salman <<f@faisalman.com>>
|
13
14
|
* Demo : http://faisalman.github.io/ua-parser-js
|
14
15
|
* Source : https://github.com/faisalman/ua-parser-js
|
15
16
|
|
17
|
+
# Constructor
|
18
|
+
|
19
|
+
* `new UAParser([uastring][,extensions])`
|
20
|
+
* returns new instance
|
21
|
+
|
22
|
+
* `UAParser([uastring][,extensions])`
|
23
|
+
* returns result object `{ ua: '', browser: {}, cpu: {}, device: {}, engine: {}, os: {} }`
|
16
24
|
|
17
25
|
# Methods
|
18
26
|
|
@@ -21,14 +29,14 @@
|
|
21
29
|
|
22
30
|
```
|
23
31
|
# Possible 'browser.name':
|
24
|
-
Amaya, Android Browser, Arora, Avant, Baidu, Blazer, Bolt, Camino, Chimera,
|
25
|
-
Chromium, Comodo Dragon, Conkeror, Dillo, Dolphin, Doris, Edge,
|
26
|
-
Firebird, Firefox, Flock, GoBrowser, iCab, ICE Browser, IceApe,
|
27
|
-
Iceweasel, IE
|
28
|
-
Lunascape, Lynx, Maemo, Maxthon, Midori, Minimo, MIUI Browser, [Mobile] Safari,
|
32
|
+
Amaya, Android Browser, Arora, Avant, Baidu, Blazer, Bolt, Bowser, Camino, Chimera,
|
33
|
+
Chrome [WebView], Chromium, Comodo Dragon, Conkeror, Dillo, Dolphin, Doris, Edge,
|
34
|
+
Epiphany, Fennec, Firebird, Firefox, Flock, GoBrowser, iCab, ICE Browser, IceApe,
|
35
|
+
IceCat, IceDragon, Iceweasel, IE[Mobile], Iron, Jasmine, K-Meleon, Konqueror, Kindle,
|
36
|
+
Links, Lunascape, Lynx, Maemo, Maxthon, Midori, Minimo, MIUI Browser, [Mobile] Safari,
|
29
37
|
Mosaic, Mozilla, Netfront, Netscape, NetSurf, Nokia, OmniWeb, Opera [Mini/Mobi/Tablet],
|
30
|
-
PhantomJS, Phoenix, Polaris, QQBrowser, RockMelt, Silk, Skyfire, SeaMonkey,
|
31
|
-
Swiftfox, Tizen, UCBrowser, Vivaldi, w3m, WeChat, Yandex
|
38
|
+
PhantomJS, Phoenix, Polaris, QQBrowser, RockMelt, Silk, Skyfire, SeaMonkey, Sleipnir,
|
39
|
+
SlimBrowser, Swiftfox, Tizen, UCBrowser, Vivaldi, w3m, WeChat, Yandex
|
32
40
|
|
33
41
|
# 'browser.version' determined dynamically
|
34
42
|
```
|
@@ -43,8 +51,8 @@ console, mobile, tablet, smarttv, wearable, embedded
|
|
43
51
|
# Possible 'device.vendor':
|
44
52
|
Acer, Alcatel, Amazon, Apple, Archos, Asus, BenQ, BlackBerry, Dell, GeeksPhone,
|
45
53
|
Google, HP, HTC, Huawei, Jolla, Lenovo, LG, Meizu, Microsoft, Motorola, Nexian,
|
46
|
-
Nintendo, Nokia, Nvidia, Ouya, Palm, Panasonic, Polytron, RIM,
|
47
|
-
Siemens, Sony
|
54
|
+
Nintendo, Nokia, Nvidia, OnePlus, Ouya, Palm, Panasonic, Pebble, Polytron, RIM,
|
55
|
+
Samsung, Sharp, Siemens, Sony[Ericsson], Sprint, Xbox, Xiaomi, ZTE
|
48
56
|
|
49
57
|
# 'device.model' determined dynamically
|
50
58
|
```
|
@@ -68,7 +76,7 @@ Tasman, Trident, w3m, WebKit
|
|
68
76
|
AIX, Amiga OS, Android, Arch, Bada, BeOS, BlackBerry, CentOS, Chromium OS, Contiki,
|
69
77
|
Fedora, Firefox OS, FreeBSD, Debian, DragonFly, Gentoo, GNU, Haiku, Hurd, iOS,
|
70
78
|
Joli, Linpus, Linux, Mac OS, Mageia, Mandriva, MeeGo, Minix, Mint, Morph OS, NetBSD,
|
71
|
-
Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PCLinuxOS, Plan9, Playstation, QNX, RedHat,
|
79
|
+
Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PC-BSD, PCLinuxOS, Plan9, Playstation, QNX, RedHat,
|
72
80
|
RIM Tablet OS, RISC OS, Sailfish, Series40, Slackware, Solaris, SUSE, Symbian, Tizen,
|
73
81
|
Ubuntu, UNIX, VectorLinux, WebOS, Windows [Phone/Mobile], Zenwalk
|
74
82
|
|
@@ -80,8 +88,7 @@ Ubuntu, UNIX, VectorLinux, WebOS, Windows [Phone/Mobile], Zenwalk
|
|
80
88
|
|
81
89
|
```
|
82
90
|
# Possible 'cpu.architecture'
|
83
|
-
68k, amd64, arm,
|
84
|
-
ppc, sparc, sparc64
|
91
|
+
68k, amd64, arm[64], avr, ia[32/64], irix[64], mips[64], pa-risc, ppc, sparc[64]
|
85
92
|
```
|
86
93
|
|
87
94
|
* `getResult()`
|
@@ -91,7 +98,8 @@ ppc, sparc, sparc64
|
|
91
98
|
* returns UA string of current instance
|
92
99
|
|
93
100
|
* `setUA(uastring)`
|
94
|
-
* set
|
101
|
+
* set UA string to parse
|
102
|
+
* returns current instance
|
95
103
|
|
96
104
|
|
97
105
|
# Example
|
@@ -237,6 +245,10 @@ console.log($.ua.browser.name); // "Safari"
|
|
237
245
|
console.log($.ua.engine.name); // "Webkit"
|
238
246
|
console.log($.ua.device); // {vendor: "Motorola", model: "Xoom", type: "tablet"}
|
239
247
|
console.log(parseInt($.ua.browser.version.split('.')[0], 10)); // 4
|
248
|
+
|
249
|
+
// Add class to <body> tag
|
250
|
+
// <body class="ua-browser-safari ua-devicetype-tablet">
|
251
|
+
$('body').addClass('ua-browser-' + $.ua.browser.name + ' ua-devicetype-' + $.ua.device.type);
|
240
252
|
```
|
241
253
|
|
242
254
|
## Extending regex patterns
|
@@ -247,7 +259,7 @@ Pass your own regexes to extend the limited matching rules.
|
|
247
259
|
|
248
260
|
```js
|
249
261
|
// Example:
|
250
|
-
var uaString = 'MyOwnBrowser/1.3';
|
262
|
+
var uaString = 'Mozilla/5.0 MyOwnBrowser/1.3';
|
251
263
|
var myOwnRegex = [[/(myownbrowser)\/([\w\.]+)/i], [UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION]];
|
252
264
|
var parser = new UAParser(uaString, { browser: myOwnRegex });
|
253
265
|
console.log(parser.getBrowser()); // {name: "MyOwnBrowser", version: "1.3"}
|
@@ -261,15 +273,10 @@ console.log(parser.getBrowser()); // {name: "MyOwnBrowser", version: "1.3"}
|
|
261
273
|
* Fork and clone this repository
|
262
274
|
* Make some changes as required
|
263
275
|
* Write a unit test to showcase your feature
|
264
|
-
* Run the test suites to make sure the changes you made didn't break anything
|
265
|
-
|
266
|
-
```sh
|
267
|
-
$ npm run test
|
268
|
-
```
|
269
|
-
|
276
|
+
* Run the test suites to make sure the changes you made didn't break anything `$ npm run test`
|
270
277
|
* Commit and push to your own repository
|
271
278
|
* Submit a pull request to this repository under `develop` branch
|
272
|
-
* Profit?
|
279
|
+
* Profit? $$$
|
273
280
|
|
274
281
|
## Build
|
275
282
|
|
package/src/ua-parser.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* UAParser.js v0.7.
|
2
|
+
* UAParser.js v0.7.13
|
3
3
|
* Lightweight JavaScript-based User-Agent string parser
|
4
4
|
* https://github.com/faisalman/ua-parser-js
|
5
5
|
*
|
@@ -16,7 +16,7 @@
|
|
16
16
|
/////////////
|
17
17
|
|
18
18
|
|
19
|
-
var LIBVERSION = '0.7.
|
19
|
+
var LIBVERSION = '0.7.13',
|
20
20
|
EMPTY = '',
|
21
21
|
UNKNOWN = '?',
|
22
22
|
FUNC_TYPE = 'function',
|
@@ -81,35 +81,29 @@
|
|
81
81
|
|
82
82
|
var mapper = {
|
83
83
|
|
84
|
-
rgx : function () {
|
84
|
+
rgx : function (ua, arrays) {
|
85
85
|
|
86
|
-
var result
|
86
|
+
//var result = {},
|
87
|
+
var i = 0, j, k, p, q, matches, match;//, args = arguments;
|
87
88
|
|
88
|
-
|
89
|
-
|
89
|
+
/*// construct object barebones
|
90
|
+
for (p = 0; p < args[1].length; p++) {
|
91
|
+
q = args[1][p];
|
92
|
+
result[typeof q === OBJ_TYPE ? q[0] : q] = undefined;
|
93
|
+
}*/
|
90
94
|
|
91
|
-
|
92
|
-
|
95
|
+
// loop through all regexes maps
|
96
|
+
while (i < arrays.length && !matches) {
|
93
97
|
|
94
|
-
//
|
95
|
-
|
96
|
-
|
97
|
-
for (p in props) {
|
98
|
-
if (props.hasOwnProperty(p)){
|
99
|
-
q = props[p];
|
100
|
-
if (typeof q === OBJ_TYPE) {
|
101
|
-
result[q[0]] = undefined;
|
102
|
-
} else {
|
103
|
-
result[q] = undefined;
|
104
|
-
}
|
105
|
-
}
|
106
|
-
}
|
107
|
-
}
|
98
|
+
var regex = arrays[i], // even sequence (0,2,4,..)
|
99
|
+
props = arrays[i + 1]; // odd sequence (1,3,5,..)
|
100
|
+
j = k = 0;
|
108
101
|
|
109
102
|
// try matching uastring with regexes
|
110
|
-
j = k = 0;
|
111
103
|
while (j < regex.length && !matches) {
|
112
|
-
|
104
|
+
|
105
|
+
matches = regex[j++].exec(ua);
|
106
|
+
|
113
107
|
if (!!matches) {
|
114
108
|
for (p = 0; p < props.length; p++) {
|
115
109
|
match = matches[++k];
|
@@ -119,32 +113,33 @@
|
|
119
113
|
if (q.length == 2) {
|
120
114
|
if (typeof q[1] == FUNC_TYPE) {
|
121
115
|
// assign modified match
|
122
|
-
|
116
|
+
this[q[0]] = q[1].call(this, match);
|
123
117
|
} else {
|
124
118
|
// assign given value, ignore regex match
|
125
|
-
|
119
|
+
this[q[0]] = q[1];
|
126
120
|
}
|
127
121
|
} else if (q.length == 3) {
|
128
122
|
// check whether function or regex
|
129
123
|
if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {
|
130
124
|
// call function (usually string mapper)
|
131
|
-
|
125
|
+
this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;
|
132
126
|
} else {
|
133
127
|
// sanitize match using given regex
|
134
|
-
|
128
|
+
this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;
|
135
129
|
}
|
136
130
|
} else if (q.length == 4) {
|
137
|
-
|
131
|
+
this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;
|
138
132
|
}
|
139
133
|
} else {
|
140
|
-
|
134
|
+
this[q] = match ? match : undefined;
|
141
135
|
}
|
142
136
|
}
|
143
137
|
}
|
144
138
|
}
|
145
139
|
i += 2;
|
146
140
|
}
|
147
|
-
|
141
|
+
//console.log(this);
|
142
|
+
//return this;
|
148
143
|
},
|
149
144
|
|
150
145
|
str : function (str, map) {
|
@@ -259,8 +254,8 @@
|
|
259
254
|
|
260
255
|
// Webkit/KHTML based
|
261
256
|
/(rekonq)\/([\w\.]+)*/i, // Rekonq
|
262
|
-
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs)\/([\w\.-]+)/i
|
263
|
-
// Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS
|
257
|
+
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser)\/([\w\.-]+)/i
|
258
|
+
// Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser
|
264
259
|
], [NAME, VERSION], [
|
265
260
|
|
266
261
|
/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11
|
@@ -272,15 +267,34 @@
|
|
272
267
|
/(yabrowser)\/([\w\.]+)/i // Yandex
|
273
268
|
], [[NAME, 'Yandex'], VERSION], [
|
274
269
|
|
270
|
+
/(puffin)\/([\w\.]+)/i // Puffin
|
271
|
+
], [[NAME, 'Puffin'], VERSION], [
|
272
|
+
|
273
|
+
/(uc\s?browser)[\/\s]?([\w\.]+)/i,
|
274
|
+
/ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i,
|
275
|
+
/juc.+(ucweb)[\/\s]?([\w\.]+)/i,
|
276
|
+
/(ucbrowser)\/([\w\.]+)/i
|
277
|
+
// UCBrowser
|
278
|
+
], [[NAME, 'UCBrowser'], VERSION], [
|
279
|
+
|
275
280
|
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
|
276
281
|
], [[NAME, /_/g, ' '], VERSION], [
|
277
282
|
|
278
283
|
/(micromessenger)\/([\w\.]+)/i // WeChat
|
279
284
|
], [[NAME, 'WeChat'], VERSION], [
|
280
285
|
|
286
|
+
/m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser
|
287
|
+
], [NAME, VERSION], [
|
288
|
+
|
281
289
|
/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
282
290
|
], [VERSION, [NAME, 'MIUI Browser']], [
|
283
291
|
|
292
|
+
/;fbav\/([\w\.]+);/i // Facebook App for iOS & Android
|
293
|
+
], [VERSION, [NAME, 'Facebook']], [
|
294
|
+
|
295
|
+
/(headlesschrome) ([\w\.]+)/i // Chrome Headless
|
296
|
+
], [VERSION, [NAME, 'Chrome Headless']], [
|
297
|
+
|
284
298
|
/\swv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
|
285
299
|
], [[NAME, /(.+)/, '$1 WebView'], VERSION], [
|
286
300
|
|
@@ -288,26 +302,18 @@
|
|
288
302
|
/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
|
289
303
|
], [VERSION, [NAME, 'Android Browser']], [
|
290
304
|
|
291
|
-
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i
|
305
|
+
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i
|
292
306
|
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
293
|
-
/(qqbrowser)[\/\s]?([\w\.]+)/i
|
294
|
-
// QQBrowser
|
295
307
|
], [NAME, VERSION], [
|
296
308
|
|
297
|
-
/(uc\s?browser)[\/\s]?([\w\.]+)/i,
|
298
|
-
/ucweb.+(ucbrowser)[\/\s]?([\w\.]+)/i,
|
299
|
-
/juc.+(ucweb)[\/\s]?([\w\.]+)/i
|
300
|
-
// UCBrowser
|
301
|
-
], [[NAME, 'UCBrowser'], VERSION], [
|
302
|
-
|
303
309
|
/(dolfin)\/([\w\.]+)/i // Dolphin
|
304
310
|
], [[NAME, 'Dolphin'], VERSION], [
|
305
311
|
|
306
312
|
/((?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
|
307
313
|
], [[NAME, 'Chrome'], VERSION], [
|
308
314
|
|
309
|
-
|
310
|
-
], [
|
315
|
+
/(coast)\/([\w\.]+)/i // Opera Coast
|
316
|
+
], [[NAME, 'Opera Coast'], VERSION], [
|
311
317
|
|
312
318
|
/fxios\/([\w\.-]+)/i // Firefox for iOS
|
313
319
|
], [VERSION, [NAME, 'Firefox']], [
|
@@ -620,9 +626,21 @@
|
|
620
626
|
/((pebble))app\/[\d\.]+\s/i // Pebble
|
621
627
|
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
622
628
|
|
629
|
+
/android.+;\s(oppo)\s?([\w\s]+)\sbuild/i // OPPO
|
630
|
+
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
631
|
+
|
632
|
+
/crkey/i // Google Chromecast
|
633
|
+
], [[MODEL, 'Chromecast'], [VENDOR, 'Google']], [
|
634
|
+
|
623
635
|
/android.+;\s(glass)\s\d/i // Google Glass
|
624
636
|
], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
|
625
637
|
|
638
|
+
/android.+;\s(pixel c)\s/i // Google Pixel C
|
639
|
+
], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
|
640
|
+
|
641
|
+
/android.+;\s(pixel xl|pixel)\s/i // Google Pixel
|
642
|
+
], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
|
643
|
+
|
626
644
|
/android.+(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
627
645
|
/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
|
628
646
|
/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d\w)?)\s+build/i // Xiaomi Mi
|
@@ -659,17 +677,6 @@
|
|
659
677
|
/(SM-T311)/i // Samsung Galaxy Tab 3 8.0
|
660
678
|
], [[MODEL, 'Galaxy Tab 3 8.0'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [
|
661
679
|
|
662
|
-
/(R1001)/i // Oppo R1001
|
663
|
-
], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [
|
664
|
-
/(X9006)/i // Oppo Find 7a
|
665
|
-
], [[MODEL, 'Find 7a'], [VENDOR, 'Oppo'], [TYPE, MOBILE]], [
|
666
|
-
/(R2001)/i // Oppo YOYO R2001
|
667
|
-
], [[MODEL, 'Yoyo R2001'], [VENDOR, 'Oppo'], [TYPE, MOBILE]], [
|
668
|
-
/(R815)/i // Oppo Clover R815
|
669
|
-
], [[MODEL, 'Clover R815'], [VENDOR, 'Oppo'], [TYPE, MOBILE]], [
|
670
|
-
/(U707)/i // Oppo Find Way S
|
671
|
-
], [[MODEL, 'Find Way S'], [VENDOR, 'Oppo'], [TYPE, MOBILE]], [
|
672
|
-
|
673
680
|
/(T3C)/i // Advan Vandroid T3C
|
674
681
|
], [MODEL, [VENDOR, 'Advan'], [TYPE, TABLET]], [
|
675
682
|
/(ADVAN T1J\+)/i // Advan Vandroid T1J+
|
@@ -790,6 +797,20 @@
|
|
790
797
|
// Constructor
|
791
798
|
////////////////
|
792
799
|
|
800
|
+
var Browser = function (name, version) {
|
801
|
+
this[NAME] = name;
|
802
|
+
this[VERSION] = version;
|
803
|
+
};
|
804
|
+
var CPU = function (arch) {
|
805
|
+
this[ARCHITECTURE] = arch;
|
806
|
+
};
|
807
|
+
var Device = function (vendor, model, type) {
|
808
|
+
this[VENDOR] = vendor;
|
809
|
+
this[MODEL] = model;
|
810
|
+
this[TYPE] = type;
|
811
|
+
};
|
812
|
+
var Engine = Browser;
|
813
|
+
var OS = Browser;
|
793
814
|
|
794
815
|
var UAParser = function (uastring, extensions) {
|
795
816
|
|
@@ -799,25 +820,34 @@
|
|
799
820
|
|
800
821
|
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
801
822
|
var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
|
823
|
+
var browser = new Browser();
|
824
|
+
var cpu = new CPU();
|
825
|
+
var device = new Device();
|
826
|
+
var engine = new Engine();
|
827
|
+
var os = new OS();
|
802
828
|
|
803
829
|
this.getBrowser = function () {
|
804
|
-
|
805
|
-
browser.major = util.major(browser.version);
|
830
|
+
mapper.rgx.call(browser, ua, rgxmap.browser);
|
831
|
+
browser.major = util.major(browser.version); // deprecated
|
806
832
|
return browser;
|
807
833
|
};
|
808
834
|
this.getCPU = function () {
|
809
|
-
|
835
|
+
mapper.rgx.call(cpu, ua, rgxmap.cpu);
|
836
|
+
return cpu;
|
810
837
|
};
|
811
838
|
this.getDevice = function () {
|
812
|
-
|
839
|
+
mapper.rgx.call(device, ua, rgxmap.device);
|
840
|
+
return device;
|
813
841
|
};
|
814
842
|
this.getEngine = function () {
|
815
|
-
|
843
|
+
mapper.rgx.call(engine, ua, rgxmap.engine);
|
844
|
+
return engine;
|
816
845
|
};
|
817
846
|
this.getOS = function () {
|
818
|
-
|
847
|
+
mapper.rgx.call(os, ua, rgxmap.os);
|
848
|
+
return os;
|
819
849
|
};
|
820
|
-
this.getResult = function() {
|
850
|
+
this.getResult = function () {
|
821
851
|
return {
|
822
852
|
ua : this.getUA(),
|
823
853
|
browser : this.getBrowser(),
|
@@ -832,6 +862,11 @@
|
|
832
862
|
};
|
833
863
|
this.setUA = function (uastring) {
|
834
864
|
ua = uastring;
|
865
|
+
browser = new Browser();
|
866
|
+
cpu = new CPU();
|
867
|
+
device = new Device();
|
868
|
+
engine = new Engine();
|
869
|
+
os = new OS();
|
835
870
|
return this;
|
836
871
|
};
|
837
872
|
return this;
|
@@ -865,7 +900,7 @@
|
|
865
900
|
NAME : NAME,
|
866
901
|
VERSION : VERSION
|
867
902
|
};
|
868
|
-
|
903
|
+
//UAParser.Utils = util;
|
869
904
|
|
870
905
|
///////////
|
871
906
|
// Export
|
@@ -900,7 +935,7 @@
|
|
900
935
|
if (typeof $ !== UNDEF_TYPE) {
|
901
936
|
var parser = new UAParser();
|
902
937
|
$.ua = parser.getResult();
|
903
|
-
$.ua.get = function() {
|
938
|
+
$.ua.get = function () {
|
904
939
|
return parser.getUA();
|
905
940
|
};
|
906
941
|
$.ua.set = function (uastring) {
|
package/test/browser-test.json
CHANGED
@@ -1,4 +1,14 @@
|
|
1
1
|
[
|
2
|
+
{
|
3
|
+
"desc" : "Chrome Headless",
|
4
|
+
"ua" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome Safari/537.36",
|
5
|
+
"expect" :
|
6
|
+
{
|
7
|
+
"name" : "Chrome Headless",
|
8
|
+
"version" : "HeadlessChrome",
|
9
|
+
"major" : ""
|
10
|
+
}
|
11
|
+
},
|
2
12
|
{
|
3
13
|
"desc" : "Android Browser on Galaxy Nexus",
|
4
14
|
"ua" : "Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
|
@@ -99,6 +109,16 @@
|
|
99
109
|
"major" : "0"
|
100
110
|
}
|
101
111
|
},
|
112
|
+
{
|
113
|
+
"desc" : "Bowser",
|
114
|
+
"ua" : "Mozilla/5.0 (iOS; like Mac OS X) AppleWebKit/536.36 (KHTML, like Gecko) not Chrome/27.0.1500.95 Mobile/10B141 Safari/537.36 Bowser/0.2.1",
|
115
|
+
"expect" :
|
116
|
+
{
|
117
|
+
"name" : "Bowser",
|
118
|
+
"version" : "0.2.1",
|
119
|
+
"major" : "0"
|
120
|
+
}
|
121
|
+
},
|
102
122
|
{
|
103
123
|
"desc" : "Camino",
|
104
124
|
"ua" : "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; en; rv:1.9.0.19) Gecko/2011091218 Camino/2.0.9 (like Firefox/3.0.19)",
|
@@ -210,13 +230,23 @@
|
|
210
230
|
}
|
211
231
|
},
|
212
232
|
{
|
213
|
-
"desc" : "Facebook in-App Browser",
|
233
|
+
"desc" : "Facebook in-App Browser for Android",
|
214
234
|
"ua" : "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/35.0.0.48.273;]",
|
215
235
|
"expect" :
|
216
236
|
{
|
217
|
-
"name" : "
|
218
|
-
"version" : "
|
219
|
-
"major" : "
|
237
|
+
"name" : "Facebook",
|
238
|
+
"version" : "35.0.0.48.273",
|
239
|
+
"major" : "35"
|
240
|
+
}
|
241
|
+
},
|
242
|
+
{
|
243
|
+
"desc" : "Facebook in-App Browser for iOS",
|
244
|
+
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E304 [FBAN/FBIOS;FBAV/91.0.0.41.73;FBBV/57050710;FBDV/iPhone8,1;FBMD/iPhone;FBSN/iOS;FBSV/10.3.1;FBSS/2;FBCR/Telekom.de;FBID/phone;FBLC/de_DE;FBOP/5;FBRV/0])",
|
245
|
+
"expect" :
|
246
|
+
{
|
247
|
+
"name" : "Facebook",
|
248
|
+
"version" : "91.0.0.41.73",
|
249
|
+
"major" : "91"
|
220
250
|
}
|
221
251
|
},
|
222
252
|
{
|
@@ -609,6 +639,16 @@
|
|
609
639
|
"major" : "11"
|
610
640
|
}
|
611
641
|
},
|
642
|
+
{
|
643
|
+
"desc" : "Opera Coast",
|
644
|
+
"ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X; en) AppleWebKit/601.1.46 (KHTML, like Gecko) Coast/5.04.110603 Mobile/13F69 Safari/7534.48.3",
|
645
|
+
"expect" :
|
646
|
+
{
|
647
|
+
"name" : "Opera Coast",
|
648
|
+
"version" : "5.04.110603",
|
649
|
+
"major" : "5"
|
650
|
+
}
|
651
|
+
},
|
612
652
|
{
|
613
653
|
"desc" : "PhantomJS",
|
614
654
|
"ua" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.2 Safari/534.34",
|
@@ -639,6 +679,16 @@
|
|
639
679
|
"major" : "6"
|
640
680
|
}
|
641
681
|
},
|
682
|
+
{
|
683
|
+
"desc" : "QQ",
|
684
|
+
"ua" : "Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; OPPO R7s Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.1 Mobile Safari/537.36",
|
685
|
+
"expect" :
|
686
|
+
{
|
687
|
+
"name" : "QQBrowser",
|
688
|
+
"version" : "7.1",
|
689
|
+
"major" : "7"
|
690
|
+
}
|
691
|
+
},
|
642
692
|
{
|
643
693
|
"desc" : "RockMelt",
|
644
694
|
"ua" : "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) RockMelt/0.8.36.78 Chrome/7.0.517.44 Safari/534.7",
|
@@ -729,6 +779,16 @@
|
|
729
779
|
"major" : "1"
|
730
780
|
}
|
731
781
|
},
|
782
|
+
{
|
783
|
+
"desc" : "UC Browser",
|
784
|
+
"ua" : "Mozilla/5.0 (Linux; U; Android 6.0.1; en-US; Lenovo P2a42 Build/MMB29M) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.2.0.915 U3/0.8.0 Mobile Safari/534.30",
|
785
|
+
"expect" :
|
786
|
+
{
|
787
|
+
"name" : "UCBrowser",
|
788
|
+
"version" : "11.2.0.915",
|
789
|
+
"major" : "11"
|
790
|
+
}
|
791
|
+
},
|
732
792
|
{
|
733
793
|
"desc" : "UC Browser on Samsung",
|
734
794
|
"ua" : "Mozilla/5.0 (Java; U; Pt-br; samsung-gt-s5620) UCBrowser8.2.1.144/69/352/UCWEB Mobile UNTRUSTED/1.0",
|
@@ -809,6 +869,16 @@
|
|
809
869
|
"major" : "1"
|
810
870
|
}
|
811
871
|
},
|
872
|
+
{
|
873
|
+
"desc" : "Puffin",
|
874
|
+
"ua" : "Mozilla/5.0 (Linux; Android 6.0.1; Lenovo P2a42 Build/MMB29M; en-us) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Puffin/6.0.8.15804AP",
|
875
|
+
"expect" :
|
876
|
+
{
|
877
|
+
"name" : "Puffin",
|
878
|
+
"version" : "6.0.8.15804AP",
|
879
|
+
"major" : "6"
|
880
|
+
}
|
881
|
+
},
|
812
882
|
{
|
813
883
|
"desc" : "Microsoft Edge",
|
814
884
|
"ua" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0",
|
package/test/device-test.json
CHANGED
@@ -179,6 +179,16 @@
|
|
179
179
|
"type" : "mobile"
|
180
180
|
}
|
181
181
|
},
|
182
|
+
{
|
183
|
+
"desc" : "OPPO R7s",
|
184
|
+
"ua" : "Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; OPPO R7s Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.1 Mobile Safari/537.36",
|
185
|
+
"expect" :
|
186
|
+
{
|
187
|
+
"vendor" : "OPPO",
|
188
|
+
"model" : "R7s",
|
189
|
+
"type" : "mobile"
|
190
|
+
}
|
191
|
+
},
|
182
192
|
{
|
183
193
|
"desc" : "Philips SmartTV",
|
184
194
|
"ua" : "Opera/9.80 HbbTV/1.1.1 (; Philips; ; ; ; ) NETTV/4.0.2; en) Version/11.60",
|
@@ -480,4 +490,47 @@
|
|
480
490
|
"type" : "mobile"
|
481
491
|
}
|
482
492
|
}
|
493
|
+
,
|
494
|
+
{
|
495
|
+
"desc" : "Google Chromecast",
|
496
|
+
"ua" : "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.84 Safari/537.36 CrKey/1.22.79313",
|
497
|
+
"expect" :
|
498
|
+
{
|
499
|
+
"vendor" : "Google",
|
500
|
+
"model" : "Chromecast"
|
501
|
+
}
|
502
|
+
}
|
503
|
+
,
|
504
|
+
{
|
505
|
+
"desc" : "Google Pixel C",
|
506
|
+
"ua" : "Mozilla/5.0 (Linux; Android 7.0; Pixel C Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36",
|
507
|
+
"expect" :
|
508
|
+
{
|
509
|
+
"vendor" : "Google",
|
510
|
+
"model" : "Pixel C",
|
511
|
+
"type" : "tablet"
|
512
|
+
}
|
513
|
+
}
|
514
|
+
,
|
515
|
+
{
|
516
|
+
"desc" : "Google Pixel",
|
517
|
+
"ua" : "Mozilla/5.0 (Linux; Android 7.1; Pixel Build/NDE63V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Mobile Safari/537.36",
|
518
|
+
"expect" :
|
519
|
+
{
|
520
|
+
"vendor" : "Google",
|
521
|
+
"model" : "Pixel",
|
522
|
+
"type" : "mobile"
|
523
|
+
}
|
524
|
+
}
|
525
|
+
,
|
526
|
+
{
|
527
|
+
"desc" : "Google Pixel",
|
528
|
+
"ua" : "Mozilla/5.0 (Linux; Android 7.1; Pixel XL Build/NDE63X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Mobile Safari/537.36",
|
529
|
+
"expect" :
|
530
|
+
{
|
531
|
+
"vendor" : "Google",
|
532
|
+
"model" : "Pixel XL",
|
533
|
+
"type" : "mobile"
|
534
|
+
}
|
535
|
+
}
|
483
536
|
]
|