ua-parser-js 0.7.18 → 0.7.22
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/.npmignore +28 -0
- package/.travis.yml +1 -1
- package/bower.json +2 -2
- package/dist/ua-parser.min.js +4 -4
- package/dist/ua-parser.pack.js +4 -4
- package/license.md +21 -0
- package/package.js +1 -1
- package/package.json +4 -2
- package/readme.md +58 -50
- package/src/ua-parser.js +98 -279
- package/test/browser-test.json +181 -2
- package/test/cpu-test.json +8 -0
- package/test/device-test.json +258 -4
- package/test/engine-test.json +27 -0
- package/test/os-test.json +30 -3
package/src/ua-parser.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/*!
|
2
|
-
* UAParser.js v0.7.
|
2
|
+
* UAParser.js v0.7.22
|
3
3
|
* Lightweight JavaScript-based User-Agent string parser
|
4
4
|
* https://github.com/faisalman/ua-parser-js
|
5
5
|
*
|
6
|
-
* Copyright © 2012-
|
7
|
-
*
|
6
|
+
* Copyright © 2012-2019 Faisal Salman <f@faisalman.com>
|
7
|
+
* Licensed under MIT License
|
8
8
|
*/
|
9
9
|
|
10
10
|
(function (window, undefined) {
|
@@ -16,7 +16,7 @@
|
|
16
16
|
/////////////
|
17
17
|
|
18
18
|
|
19
|
-
var LIBVERSION = '0.7.
|
19
|
+
var LIBVERSION = '0.7.22',
|
20
20
|
EMPTY = '',
|
21
21
|
UNKNOWN = '?',
|
22
22
|
FUNC_TYPE = 'function',
|
@@ -45,15 +45,15 @@
|
|
45
45
|
|
46
46
|
var util = {
|
47
47
|
extend : function (regexes, extensions) {
|
48
|
-
var
|
48
|
+
var mergedRegexes = {};
|
49
49
|
for (var i in regexes) {
|
50
50
|
if (extensions[i] && extensions[i].length % 2 === 0) {
|
51
|
-
|
51
|
+
mergedRegexes[i] = extensions[i].concat(regexes[i]);
|
52
52
|
} else {
|
53
|
-
|
53
|
+
mergedRegexes[i] = regexes[i];
|
54
54
|
}
|
55
55
|
}
|
56
|
-
return
|
56
|
+
return mergedRegexes;
|
57
57
|
},
|
58
58
|
has : function (str1, str2) {
|
59
59
|
if (typeof str1 === "string") {
|
@@ -83,14 +83,7 @@
|
|
83
83
|
|
84
84
|
rgx : function (ua, arrays) {
|
85
85
|
|
86
|
-
|
87
|
-
var i = 0, j, k, p, q, matches, match;//, args = arguments;
|
88
|
-
|
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
|
-
}*/
|
86
|
+
var i = 0, j, k, p, q, matches, match;
|
94
87
|
|
95
88
|
// loop through all regexes maps
|
96
89
|
while (i < arrays.length && !matches) {
|
@@ -138,8 +131,6 @@
|
|
138
131
|
}
|
139
132
|
i += 2;
|
140
133
|
}
|
141
|
-
// console.log(this);
|
142
|
-
//return this;
|
143
134
|
},
|
144
135
|
|
145
136
|
str : function (str, map) {
|
@@ -246,40 +237,60 @@
|
|
246
237
|
/(kindle)\/([\w\.]+)/i, // Kindle
|
247
238
|
/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]*)/i,
|
248
239
|
// Lunascape/Maxthon/Netfront/Jasmine/Blazer
|
249
|
-
|
250
240
|
// Trident based
|
251
|
-
/(avant\s|iemobile|slim
|
252
|
-
// Avant/IEMobile/SlimBrowser
|
241
|
+
/(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i,
|
242
|
+
// Avant/IEMobile/SlimBrowser
|
243
|
+
/(bidubrowser|baidubrowser)[\/\s]?([\w\.]+)/i, // Baidu Browser
|
253
244
|
/(?:ms|\()(ie)\s([\w\.]+)/i, // Internet Explorer
|
254
245
|
|
255
246
|
// Webkit/KHTML based
|
256
247
|
/(rekonq)\/([\w\.]*)/i, // Rekonq
|
257
|
-
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark)\/([\w\.-]+)/i
|
258
|
-
// Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser
|
248
|
+
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\/([\w\.-]+)/i
|
249
|
+
// Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
|
259
250
|
], [NAME, VERSION], [
|
260
251
|
|
252
|
+
/(konqueror)\/([\w\.]+)/i // Konqueror
|
253
|
+
], [[NAME, 'Konqueror'], VERSION], [
|
254
|
+
|
261
255
|
/(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11
|
262
256
|
], [[NAME, 'IE'], VERSION], [
|
263
257
|
|
264
|
-
/(edge|edgios|
|
258
|
+
/(edge|edgios|edga|edg)\/((\d+)?[\w\.]+)/i // Microsoft Edge
|
265
259
|
], [[NAME, 'Edge'], VERSION], [
|
266
260
|
|
267
261
|
/(yabrowser)\/([\w\.]+)/i // Yandex
|
268
262
|
], [[NAME, 'Yandex'], VERSION], [
|
269
263
|
|
264
|
+
/(Avast)\/([\w\.]+)/i // Avast Secure Browser
|
265
|
+
], [[NAME, 'Avast Secure Browser'], VERSION], [
|
266
|
+
|
267
|
+
/(AVG)\/([\w\.]+)/i // AVG Secure Browser
|
268
|
+
], [[NAME, 'AVG Secure Browser'], VERSION], [
|
269
|
+
|
270
270
|
/(puffin)\/([\w\.]+)/i // Puffin
|
271
271
|
], [[NAME, 'Puffin'], VERSION], [
|
272
272
|
|
273
|
-
/(
|
274
|
-
|
273
|
+
/(focus)\/([\w\.]+)/i // Firefox Focus
|
274
|
+
], [[NAME, 'Firefox Focus'], VERSION], [
|
275
|
+
|
276
|
+
/(opt)\/([\w\.]+)/i // Opera Touch
|
277
|
+
], [[NAME, 'Opera Touch'], VERSION], [
|
278
|
+
|
279
|
+
/((?:[\s\/])uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i // UCBrowser
|
275
280
|
], [[NAME, 'UCBrowser'], VERSION], [
|
276
281
|
|
277
282
|
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
|
278
283
|
], [[NAME, /_/g, ' '], VERSION], [
|
279
284
|
|
285
|
+
/(windowswechat qbcore)\/([\w\.]+)/i // WeChat Desktop for Windows Built-in Browser
|
286
|
+
], [[NAME, 'WeChat(Win) Desktop'], VERSION], [
|
287
|
+
|
280
288
|
/(micromessenger)\/([\w\.]+)/i // WeChat
|
281
289
|
], [[NAME, 'WeChat'], VERSION], [
|
282
290
|
|
291
|
+
/(brave)\/([\w\.]+)/i // Brave browser
|
292
|
+
], [[NAME, 'Brave'], VERSION], [
|
293
|
+
|
283
294
|
/(qqbrowserlite)\/([\w\.]+)/i // QQBrowserLite
|
284
295
|
], [NAME, VERSION], [
|
285
296
|
|
@@ -289,7 +300,7 @@
|
|
289
300
|
/m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser
|
290
301
|
], [NAME, VERSION], [
|
291
302
|
|
292
|
-
/(
|
303
|
+
/(baiduboxapp)[\/\s]?([\w\.]+)/i // Baidu App
|
293
304
|
], [NAME, VERSION], [
|
294
305
|
|
295
306
|
/(2345Explorer)[\/\s]?([\w\.]+)/i // 2345 Browser
|
@@ -298,7 +309,7 @@
|
|
298
309
|
/(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser
|
299
310
|
], [NAME], [
|
300
311
|
|
301
|
-
/(LBBROWSER)/i
|
312
|
+
/(LBBROWSER)/i // LieBao Browser
|
302
313
|
], [NAME], [
|
303
314
|
|
304
315
|
/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
@@ -307,6 +318,10 @@
|
|
307
318
|
/;fbav\/([\w\.]+);/i // Facebook App for iOS & Android
|
308
319
|
], [VERSION, [NAME, 'Facebook']], [
|
309
320
|
|
321
|
+
/safari\s(line)\/([\w\.]+)/i, // Line App for iOS
|
322
|
+
/android.+(line)\/([\w\.]+)\/iab/i // Line App for Android
|
323
|
+
], [NAME, VERSION], [
|
324
|
+
|
310
325
|
/headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless
|
311
326
|
], [VERSION, [NAME, 'Chrome Headless']], [
|
312
327
|
|
@@ -319,6 +334,9 @@
|
|
319
334
|
/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
|
320
335
|
], [VERSION, [NAME, 'Android Browser']], [
|
321
336
|
|
337
|
+
/(sailfishbrowser)\/([\w\.]+)/i // Sailfish Browser
|
338
|
+
], [[NAME, 'Sailfish Browser'], VERSION], [
|
339
|
+
|
322
340
|
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i
|
323
341
|
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
324
342
|
], [NAME, VERSION], [
|
@@ -326,6 +344,9 @@
|
|
326
344
|
/(dolfin)\/([\w\.]+)/i // Dolphin
|
327
345
|
], [[NAME, 'Dolphin'], VERSION], [
|
328
346
|
|
347
|
+
/(qihu|qhbrowser|qihoobrowser|360browser)/i // 360
|
348
|
+
], [[NAME, '360 Browser']], [
|
349
|
+
|
329
350
|
/((?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
|
330
351
|
], [[NAME, 'Chrome'], VERSION], [
|
331
352
|
|
@@ -347,7 +368,6 @@
|
|
347
368
|
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
348
369
|
], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [
|
349
370
|
|
350
|
-
/(konqueror)\/([\w\.]+)/i, // Konqueror
|
351
371
|
/(webkit|khtml)\/([\w\.]+)/i
|
352
372
|
], [NAME, VERSION], [
|
353
373
|
|
@@ -370,117 +390,6 @@
|
|
370
390
|
/(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser
|
371
391
|
/(mosaic)[\/\s]([\w\.]+)/i // Mosaic
|
372
392
|
], [NAME, VERSION]
|
373
|
-
|
374
|
-
/* /////////////////////
|
375
|
-
// Media players BEGIN
|
376
|
-
////////////////////////
|
377
|
-
|
378
|
-
, [
|
379
|
-
|
380
|
-
/(apple(?:coremedia|))\/((\d+)[\w\._]+)/i, // Generic Apple CoreMedia
|
381
|
-
/(coremedia) v((\d+)[\w\._]+)/i
|
382
|
-
], [NAME, VERSION], [
|
383
|
-
|
384
|
-
/(aqualung|lyssna|bsplayer)\/((\d+)?[\w\.-]+)/i // Aqualung/Lyssna/BSPlayer
|
385
|
-
], [NAME, VERSION], [
|
386
|
-
|
387
|
-
/(ares|ossproxy)\s((\d+)[\w\.-]+)/i // Ares/OSSProxy
|
388
|
-
], [NAME, VERSION], [
|
389
|
-
|
390
|
-
/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/((\d+)[\w\.-]+)/i,
|
391
|
-
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
|
392
|
-
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
393
|
-
/(clementine|music player daemon)\s((\d+)[\w\.-]+)/i, // Clementine/MPD
|
394
|
-
/(lg player|nexplayer)\s((\d+)[\d\.]+)/i,
|
395
|
-
/player\/(nexplayer|lg player)\s((\d+)[\w\.-]+)/i // NexPlayer/LG Player
|
396
|
-
], [NAME, VERSION], [
|
397
|
-
/(nexplayer)\s((\d+)[\w\.-]+)/i // Nexplayer
|
398
|
-
], [NAME, VERSION], [
|
399
|
-
|
400
|
-
/(flrp)\/((\d+)[\w\.-]+)/i // Flip Player
|
401
|
-
], [[NAME, 'Flip Player'], VERSION], [
|
402
|
-
|
403
|
-
/(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i
|
404
|
-
// FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit
|
405
|
-
], [NAME], [
|
406
|
-
|
407
|
-
/(gstreamer) souphttpsrc (?:\([^\)]+\)){0,1} libsoup\/((\d+)[\w\.-]+)/i
|
408
|
-
// Gstreamer
|
409
|
-
], [NAME, VERSION], [
|
410
|
-
|
411
|
-
/(htc streaming player)\s[\w_]+\s\/\s((\d+)[\d\.]+)/i, // HTC Streaming Player
|
412
|
-
/(java|python-urllib|python-requests|wget|libcurl)\/((\d+)[\w\.-_]+)/i,
|
413
|
-
// Java/urllib/requests/wget/cURL
|
414
|
-
/(lavf)((\d+)[\d\.]+)/i // Lavf (FFMPEG)
|
415
|
-
], [NAME, VERSION], [
|
416
|
-
|
417
|
-
/(htc_one_s)\/((\d+)[\d\.]+)/i // HTC One S
|
418
|
-
], [[NAME, /_/g, ' '], VERSION], [
|
419
|
-
|
420
|
-
/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+){0,1})/i
|
421
|
-
// MPlayer SVN
|
422
|
-
], [NAME, VERSION], [
|
423
|
-
|
424
|
-
/(mplayer)(?:\s|\/|[unkow-]+)((\d+)[\w\.-]+)/i // MPlayer
|
425
|
-
], [NAME, VERSION], [
|
426
|
-
|
427
|
-
/(mplayer)/i, // MPlayer (no other info)
|
428
|
-
/(yourmuze)/i, // YourMuze
|
429
|
-
/(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
|
430
|
-
], [NAME], [
|
431
|
-
|
432
|
-
/(nero (?:home|scout))\/((\d+)[\w\.-]+)/i // Nero Home/Nero Scout
|
433
|
-
], [NAME, VERSION], [
|
434
|
-
|
435
|
-
/(nokia\d+)\/((\d+)[\w\.-]+)/i // Nokia
|
436
|
-
], [NAME, VERSION], [
|
437
|
-
|
438
|
-
/\s(songbird)\/((\d+)[\w\.-]+)/i // Songbird/Philips-Songbird
|
439
|
-
], [NAME, VERSION], [
|
440
|
-
|
441
|
-
/(winamp)3 version ((\d+)[\w\.-]+)/i, // Winamp
|
442
|
-
/(winamp)\s((\d+)[\w\.-]+)/i,
|
443
|
-
/(winamp)mpeg\/((\d+)[\w\.-]+)/i
|
444
|
-
], [NAME, VERSION], [
|
445
|
-
|
446
|
-
/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
447
|
-
// inlight radio
|
448
|
-
], [NAME], [
|
449
|
-
|
450
|
-
/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/((\d+)[\w\.-]+)/i
|
451
|
-
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
452
|
-
// SoundTap/Totem/Stagefright/Streamium
|
453
|
-
], [NAME, VERSION], [
|
454
|
-
|
455
|
-
/(smp)((\d+)[\d\.]+)/i // SMP
|
456
|
-
], [NAME, VERSION], [
|
457
|
-
|
458
|
-
/(vlc) media player - version ((\d+)[\w\.]+)/i, // VLC Videolan
|
459
|
-
/(vlc)\/((\d+)[\w\.-]+)/i,
|
460
|
-
/(xbmc|gvfs|xine|xmms|irapp)\/((\d+)[\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
|
461
|
-
/(foobar2000)\/((\d+)[\d\.]+)/i, // Foobar2000
|
462
|
-
/(itunes)\/((\d+)[\d\.]+)/i // iTunes
|
463
|
-
], [NAME, VERSION], [
|
464
|
-
|
465
|
-
/(wmplayer)\/((\d+)[\w\.-]+)/i, // Windows Media Player
|
466
|
-
/(windows-media-player)\/((\d+)[\w\.-]+)/i
|
467
|
-
], [[NAME, /-/g, ' '], VERSION], [
|
468
|
-
|
469
|
-
/windows\/((\d+)[\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i
|
470
|
-
// Windows Media Server
|
471
|
-
], [VERSION, [NAME, 'Windows']], [
|
472
|
-
|
473
|
-
/(com\.riseupradioalarm)\/((\d+)[\d\.]*)/i // RiseUP Radio Alarm
|
474
|
-
], [NAME, VERSION], [
|
475
|
-
|
476
|
-
/(rad.io)\s((\d+)[\d\.]+)/i, // Rad.io
|
477
|
-
/(radio.(?:de|at|fr))\s((\d+)[\d\.]+)/i
|
478
|
-
], [[NAME, 'rad.io'], VERSION]
|
479
|
-
|
480
|
-
//////////////////////
|
481
|
-
// Media players END
|
482
|
-
////////////////////*/
|
483
|
-
|
484
393
|
],
|
485
394
|
|
486
395
|
cpu : [[
|
@@ -504,21 +413,21 @@
|
|
504
413
|
/(sun4\w)[;\)]/i // SPARC
|
505
414
|
], [[ARCHITECTURE, 'sparc']], [
|
506
415
|
|
507
|
-
/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d
|
416
|
+
/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+[;l]))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i
|
508
417
|
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
509
418
|
], [[ARCHITECTURE, util.lowerize]]
|
510
419
|
],
|
511
420
|
|
512
421
|
device : [[
|
513
422
|
|
514
|
-
/\((ipad|playbook);[\w\s\)
|
423
|
+
/\((ipad|playbook);[\w\s\),;-]+(rim|apple)/i // iPad/PlayBook
|
515
424
|
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
516
425
|
|
517
426
|
/applecoremedia\/[\w\.]+ \((ipad)/ // iPad
|
518
427
|
], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [
|
519
428
|
|
520
429
|
/(apple\s{0,1}tv)/i // Apple TV
|
521
|
-
], [[MODEL, 'Apple TV'], [VENDOR, 'Apple']], [
|
430
|
+
], [[MODEL, 'Apple TV'], [VENDOR, 'Apple'], [TYPE, SMARTTV]], [
|
522
431
|
|
523
432
|
/(archos)\s(gamepad2?)/i, // Archos
|
524
433
|
/(hp).+(touchpad)/i, // HP TouchPad
|
@@ -532,6 +441,8 @@
|
|
532
441
|
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
533
442
|
/(sd|kf)[0349hijorstuw]+\sbuild\/.+silk\//i // Fire Phone
|
534
443
|
], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
|
444
|
+
/android.+aft([bms])\sbuild/i // Fire TV
|
445
|
+
], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
|
535
446
|
|
536
447
|
/\((ip[honed|\s\w*]+);.+(apple)/i // iPod/iPhone
|
537
448
|
], [MODEL, VENDOR, [TYPE, MOBILE]], [
|
@@ -547,13 +458,13 @@
|
|
547
458
|
/\(bb10;\s(\w+)/i // BlackBerry 10
|
548
459
|
], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
|
549
460
|
// Asus Tablets
|
550
|
-
/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone)/i
|
461
|
+
/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone|p00c)/i
|
551
462
|
], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [
|
552
463
|
|
553
464
|
/(sony)\s(tablet\s[ps])\sbuild\//i, // Sony
|
554
465
|
/(sony)?(?:sgp.+)\sbuild\//i
|
555
466
|
], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [
|
556
|
-
/android.+\s([c-g]\d{4}|so[-l]\w+)\
|
467
|
+
/android.+\s([c-g]\d{4}|so[-l]\w+)(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
557
468
|
], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
558
469
|
|
559
470
|
/\s(ouya)\s/i, // Ouya
|
@@ -569,22 +480,22 @@
|
|
569
480
|
/(sprint\s(\w+))/i // Sprint Phones
|
570
481
|
], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [
|
571
482
|
|
572
|
-
/(
|
573
|
-
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
574
|
-
|
575
|
-
/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i, // HTC
|
483
|
+
/(htc)[;_\s-]+([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC
|
576
484
|
/(zte)-(\w*)/i, // ZTE
|
577
|
-
/(alcatel|geeksphone|
|
578
|
-
// Alcatel/GeeksPhone/
|
485
|
+
/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
|
486
|
+
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
579
487
|
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
580
488
|
|
581
489
|
/(nexus\s9)/i // HTC Nexus 9
|
582
490
|
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
|
583
491
|
|
584
492
|
/d\/huawei([\w\s-]+)[;\)]/i,
|
585
|
-
/(nexus\s6p)/i
|
493
|
+
/(nexus\s6p|vog-l29|ane-lx1|eml-l29|ele-l29)/i // Huawei
|
586
494
|
], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
|
587
495
|
|
496
|
+
/android.+(bah2?-a?[lw]\d{2})/i // Huawei MediaPad
|
497
|
+
], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
|
498
|
+
|
588
499
|
/(microsoft);\s(lumia[\s\w]+)/i // Microsoft Lumia
|
589
500
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
590
501
|
|
@@ -628,7 +539,7 @@
|
|
628
539
|
/(nokia)[\s_-]?([\w-]*)/i
|
629
540
|
], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
|
630
541
|
|
631
|
-
/android
|
542
|
+
/android[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i // Acer
|
632
543
|
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
633
544
|
|
634
545
|
/android.+([vl]k\-?\d{3})\s+build/i // LG Tablet
|
@@ -642,8 +553,12 @@
|
|
642
553
|
/android.+lg(\-?[\d\w]+)\s+build/i
|
643
554
|
], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
|
644
555
|
|
556
|
+
/(lenovo)\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+))/i // Lenovo tablets
|
557
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
645
558
|
/android.+(ideatab[a-z0-9\-\s]+)/i // Lenovo
|
646
559
|
], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
|
560
|
+
/(lenovo)[_\s-]?([\w-]+)/i
|
561
|
+
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
647
562
|
|
648
563
|
/linux;.+((jolla));/i // Jolla
|
649
564
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
@@ -655,29 +570,32 @@
|
|
655
570
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
656
571
|
|
657
572
|
/crkey/i // Google Chromecast
|
658
|
-
], [[MODEL, 'Chromecast'], [VENDOR, 'Google']], [
|
573
|
+
], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [
|
659
574
|
|
660
575
|
/android.+;\s(glass)\s\d/i // Google Glass
|
661
576
|
], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
|
662
577
|
|
663
|
-
/android.+;\s(pixel c)\s/i
|
578
|
+
/android.+;\s(pixel c)[\s)]/i // Google Pixel C
|
664
579
|
], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
|
665
580
|
|
666
|
-
/android.+;\s(pixel xl
|
581
|
+
/android.+;\s(pixel( [23])?( xl)?)[\s)]/i // Google Pixel
|
667
582
|
], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
|
668
583
|
|
669
584
|
/android.+;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
670
585
|
/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
|
671
|
-
/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i,
|
672
|
-
|
586
|
+
/android.+(mi[\s\-_]*(?:a\d|one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i,
|
587
|
+
// Xiaomi Mi
|
588
|
+
/android.+(redmi[\s\-_]*(?:note)?(?:[\s_]?[\w\s]+))\s+build/i // Redmi Phones
|
673
589
|
], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
|
674
|
-
/android.+(mi[\s\-_]*(?:pad)(?:[\s_]
|
590
|
+
/android.+(mi[\s\-_]*(?:pad)(?:[\s_]?[\w\s]+))\s+build/i // Mi Pad tablets
|
675
591
|
],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
|
676
|
-
/android.+;\s(m[1-5]\snote)\sbuild/i // Meizu
|
677
|
-
], [MODEL, [VENDOR, 'Meizu'], [TYPE,
|
592
|
+
/android.+;\s(m[1-5]\snote)\sbuild/i // Meizu
|
593
|
+
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
594
|
+
/(mz)-([\w-]{2,})/i
|
595
|
+
], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [
|
678
596
|
|
679
597
|
/android.+a000(1)\s+build/i, // OnePlus
|
680
|
-
/android.+oneplus\s(a\d{4})\s
|
598
|
+
/android.+oneplus\s(a\d{4})[\s)]/i
|
681
599
|
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
682
600
|
|
683
601
|
/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i // RCA Tablets
|
@@ -723,6 +641,9 @@
|
|
723
641
|
/android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i // LvTel Phones
|
724
642
|
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
725
643
|
|
644
|
+
/android.+;\s(PH-1)\s/i
|
645
|
+
], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1
|
646
|
+
|
726
647
|
/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i // Envizen Tablets
|
727
648
|
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
728
649
|
|
@@ -748,60 +669,11 @@
|
|
748
669
|
/\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
|
749
670
|
], [[TYPE, util.lowerize], VENDOR, MODEL], [
|
750
671
|
|
672
|
+
/[\s\/\(](smart-?tv)[;\)]/i // SmartTV
|
673
|
+
], [[TYPE, SMARTTV]], [
|
674
|
+
|
751
675
|
/(android[\w\.\s\-]{0,9});.+build/i // Generic Android Device
|
752
676
|
], [MODEL, [VENDOR, 'Generic']]
|
753
|
-
|
754
|
-
|
755
|
-
/*//////////////////////////
|
756
|
-
// TODO: move to string map
|
757
|
-
////////////////////////////
|
758
|
-
|
759
|
-
/(C6603)/i // Sony Xperia Z C6603
|
760
|
-
], [[MODEL, 'Xperia Z C6603'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
761
|
-
/(C6903)/i // Sony Xperia Z 1
|
762
|
-
], [[MODEL, 'Xperia Z 1'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
763
|
-
|
764
|
-
/(SM-G900[F|H])/i // Samsung Galaxy S5
|
765
|
-
], [[MODEL, 'Galaxy S5'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
766
|
-
/(SM-G7102)/i // Samsung Galaxy Grand 2
|
767
|
-
], [[MODEL, 'Galaxy Grand 2'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
768
|
-
/(SM-G530H)/i // Samsung Galaxy Grand Prime
|
769
|
-
], [[MODEL, 'Galaxy Grand Prime'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
770
|
-
/(SM-G313HZ)/i // Samsung Galaxy V
|
771
|
-
], [[MODEL, 'Galaxy V'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
772
|
-
/(SM-T805)/i // Samsung Galaxy Tab S 10.5
|
773
|
-
], [[MODEL, 'Galaxy Tab S 10.5'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [
|
774
|
-
/(SM-G800F)/i // Samsung Galaxy S5 Mini
|
775
|
-
], [[MODEL, 'Galaxy S5 Mini'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
776
|
-
/(SM-T311)/i // Samsung Galaxy Tab 3 8.0
|
777
|
-
], [[MODEL, 'Galaxy Tab 3 8.0'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [
|
778
|
-
|
779
|
-
/(T3C)/i // Advan Vandroid T3C
|
780
|
-
], [MODEL, [VENDOR, 'Advan'], [TYPE, TABLET]], [
|
781
|
-
/(ADVAN T1J\+)/i // Advan Vandroid T1J+
|
782
|
-
], [[MODEL, 'Vandroid T1J+'], [VENDOR, 'Advan'], [TYPE, TABLET]], [
|
783
|
-
/(ADVAN S4A)/i // Advan Vandroid S4A
|
784
|
-
], [[MODEL, 'Vandroid S4A'], [VENDOR, 'Advan'], [TYPE, MOBILE]], [
|
785
|
-
|
786
|
-
/(V972M)/i // ZTE V972M
|
787
|
-
], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
|
788
|
-
|
789
|
-
/(i-mobile)\s(IQ\s[\d\.]+)/i // i-mobile IQ
|
790
|
-
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
791
|
-
/(IQ6.3)/i // i-mobile IQ IQ 6.3
|
792
|
-
], [[MODEL, 'IQ 6.3'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [
|
793
|
-
/(i-mobile)\s(i-style\s[\d\.]+)/i // i-mobile i-STYLE
|
794
|
-
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
795
|
-
/(i-STYLE2.1)/i // i-mobile i-STYLE 2.1
|
796
|
-
], [[MODEL, 'i-STYLE 2.1'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [
|
797
|
-
|
798
|
-
/(mobiistar touch LAI 512)/i // mobiistar touch LAI 512
|
799
|
-
], [[MODEL, 'Touch LAI 512'], [VENDOR, 'mobiistar'], [TYPE, MOBILE]], [
|
800
|
-
|
801
|
-
/////////////
|
802
|
-
// END TODO
|
803
|
-
///////////*/
|
804
|
-
|
805
677
|
],
|
806
678
|
|
807
679
|
engine : [[
|
@@ -809,8 +681,12 @@
|
|
809
681
|
/windows.+\sedge\/([\w\.]+)/i // EdgeHTML
|
810
682
|
], [VERSION, [NAME, 'EdgeHTML']], [
|
811
683
|
|
684
|
+
/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i // Blink
|
685
|
+
], [VERSION, [NAME, 'Blink']], [
|
686
|
+
|
812
687
|
/(presto)\/([\w\.]+)/i, // Presto
|
813
|
-
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,
|
688
|
+
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
|
689
|
+
// WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
|
814
690
|
/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
815
691
|
/(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
|
816
692
|
], [NAME, VERSION], [
|
@@ -835,10 +711,9 @@
|
|
835
711
|
/\((bb)(10);/i // BlackBerry 10
|
836
712
|
], [[NAME, 'BlackBerry'], VERSION], [
|
837
713
|
/(blackberry)\w*\/?([\w\.]*)/i, // Blackberry
|
838
|
-
/(tizen)[\/\s]([\w\.]+)/i,
|
839
|
-
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]*)/i
|
840
|
-
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki
|
841
|
-
/linux;.+(sailfish);/i // Sailfish OS
|
714
|
+
/(tizen|kaios)[\/\s]([\w\.]+)/i, // Tizen/KaiOS
|
715
|
+
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i
|
716
|
+
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
|
842
717
|
], [NAME, VERSION], [
|
843
718
|
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i // Symbian
|
844
719
|
], [[NAME, 'Symbian'], VERSION], [
|
@@ -885,8 +760,8 @@
|
|
885
760
|
// Other
|
886
761
|
/((?:open)?solaris)[\/\s-]?([\w\.]*)/i, // Solaris
|
887
762
|
/(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, // AIX
|
888
|
-
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,
|
889
|
-
// Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS
|
763
|
+
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i,
|
764
|
+
// Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia
|
890
765
|
/(unix)\s?([\w\.]*)/i // UNIX
|
891
766
|
], [NAME, VERSION]
|
892
767
|
]
|
@@ -896,22 +771,6 @@
|
|
896
771
|
/////////////////
|
897
772
|
// Constructor
|
898
773
|
////////////////
|
899
|
-
/*
|
900
|
-
var Browser = function (name, version) {
|
901
|
-
this[NAME] = name;
|
902
|
-
this[VERSION] = version;
|
903
|
-
};
|
904
|
-
var CPU = function (arch) {
|
905
|
-
this[ARCHITECTURE] = arch;
|
906
|
-
};
|
907
|
-
var Device = function (vendor, model, type) {
|
908
|
-
this[VENDOR] = vendor;
|
909
|
-
this[MODEL] = model;
|
910
|
-
this[TYPE] = type;
|
911
|
-
};
|
912
|
-
var Engine = Browser;
|
913
|
-
var OS = Browser;
|
914
|
-
*/
|
915
774
|
var UAParser = function (uastring, extensions) {
|
916
775
|
|
917
776
|
if (typeof uastring === 'object') {
|
@@ -925,11 +784,6 @@
|
|
925
784
|
|
926
785
|
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
927
786
|
var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
|
928
|
-
//var browser = new Browser();
|
929
|
-
//var cpu = new CPU();
|
930
|
-
//var device = new Device();
|
931
|
-
//var engine = new Engine();
|
932
|
-
//var os = new OS();
|
933
787
|
|
934
788
|
this.getBrowser = function () {
|
935
789
|
var browser = { name: undefined, version: undefined };
|
@@ -972,11 +826,6 @@
|
|
972
826
|
};
|
973
827
|
this.setUA = function (uastring) {
|
974
828
|
ua = uastring;
|
975
|
-
//browser = new Browser();
|
976
|
-
//cpu = new CPU();
|
977
|
-
//device = new Device();
|
978
|
-
//engine = new Engine();
|
979
|
-
//os = new OS();
|
980
829
|
return this;
|
981
830
|
};
|
982
831
|
return this;
|
@@ -1010,7 +859,6 @@
|
|
1010
859
|
NAME : NAME,
|
1011
860
|
VERSION : VERSION
|
1012
861
|
};
|
1013
|
-
//UAParser.Utils = util;
|
1014
862
|
|
1015
863
|
///////////
|
1016
864
|
// Export
|
@@ -1023,39 +871,10 @@
|
|
1023
871
|
if (typeof module !== UNDEF_TYPE && module.exports) {
|
1024
872
|
exports = module.exports = UAParser;
|
1025
873
|
}
|
1026
|
-
// TODO: test!!!!!!!!
|
1027
|
-
/*
|
1028
|
-
if (require && require.main === module && process) {
|
1029
|
-
// cli
|
1030
|
-
var jsonize = function (arr) {
|
1031
|
-
var res = [];
|
1032
|
-
for (var i in arr) {
|
1033
|
-
res.push(new UAParser(arr[i]).getResult());
|
1034
|
-
}
|
1035
|
-
process.stdout.write(JSON.stringify(res, null, 2) + '\n');
|
1036
|
-
};
|
1037
|
-
if (process.stdin.isTTY) {
|
1038
|
-
// via args
|
1039
|
-
jsonize(process.argv.slice(2));
|
1040
|
-
} else {
|
1041
|
-
// via pipe
|
1042
|
-
var str = '';
|
1043
|
-
process.stdin.on('readable', function() {
|
1044
|
-
var read = process.stdin.read();
|
1045
|
-
if (read !== null) {
|
1046
|
-
str += read;
|
1047
|
-
}
|
1048
|
-
});
|
1049
|
-
process.stdin.on('end', function () {
|
1050
|
-
jsonize(str.replace(/\n$/, '').split('\n'));
|
1051
|
-
});
|
1052
|
-
}
|
1053
|
-
}
|
1054
|
-
*/
|
1055
874
|
exports.UAParser = UAParser;
|
1056
875
|
} else {
|
1057
876
|
// requirejs env (optional)
|
1058
|
-
if (typeof(define) ===
|
877
|
+
if (typeof(define) === 'function' && define.amd) {
|
1059
878
|
define(function () {
|
1060
879
|
return UAParser;
|
1061
880
|
});
|
@@ -1071,7 +890,7 @@
|
|
1071
890
|
// jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
|
1072
891
|
// and we should catch that.
|
1073
892
|
var $ = window && (window.jQuery || window.Zepto);
|
1074
|
-
if (
|
893
|
+
if ($ && !$.ua) {
|
1075
894
|
var parser = new UAParser();
|
1076
895
|
$.ua = parser.getResult();
|
1077
896
|
$.ua.get = function () {
|