ua-parser-js 0.7.17 → 0.7.21
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 +6 -2
- package/.travis.yml +1 -1
- package/bower.json +2 -2
- package/dist/ua-parser.min.js +5 -5
- package/dist/ua-parser.pack.js +5 -5
- package/license.md +21 -0
- package/package.js +1 -1
- package/package.json +25 -6
- package/readme.md +55 -46
- package/src/ua-parser.js +158 -322
- package/test/browser-test.json +256 -1
- package/test/cpu-test.json +8 -0
- package/test/device-test.json +286 -5
- 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
|
-
|
2
|
-
* UAParser.js v0.7.
|
1
|
+
/*!
|
2
|
+
* UAParser.js v0.7.21
|
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.21',
|
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) {
|
@@ -244,54 +235,93 @@
|
|
244
235
|
|
245
236
|
// Mixed
|
246
237
|
/(kindle)\/([\w\.]+)/i, // Kindle
|
247
|
-
/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]
|
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
|
-
/(rekonq)\/([\w\.]
|
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
|
247
|
+
/(rekonq)\/([\w\.]*)/i, // Rekonq
|
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)\/((\d+)?[\w\.]+)/i
|
265
|
-
], [NAME, VERSION], [
|
258
|
+
/(edge|edgios|edga|edg)\/((\d+)?[\w\.]+)/i // Microsoft Edge
|
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
|
+
|
294
|
+
/(qqbrowserlite)\/([\w\.]+)/i // QQBrowserLite
|
295
|
+
], [NAME, VERSION], [
|
296
|
+
|
283
297
|
/(QQ)\/([\d\.]+)/i // QQ, aka ShouQ
|
284
298
|
], [NAME, VERSION], [
|
285
299
|
|
286
300
|
/m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser
|
287
301
|
], [NAME, VERSION], [
|
288
302
|
|
303
|
+
/(baiduboxapp)[\/\s]?([\w\.]+)/i // Baidu App
|
304
|
+
], [NAME, VERSION], [
|
305
|
+
|
306
|
+
/(2345Explorer)[\/\s]?([\w\.]+)/i // 2345 Browser
|
307
|
+
], [NAME, VERSION], [
|
308
|
+
|
309
|
+
/(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser
|
310
|
+
], [NAME], [
|
311
|
+
|
312
|
+
/(LBBROWSER)/i // LieBao Browser
|
313
|
+
], [NAME], [
|
314
|
+
|
289
315
|
/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
290
316
|
], [VERSION, [NAME, 'MIUI Browser']], [
|
291
317
|
|
292
318
|
/;fbav\/([\w\.]+);/i // Facebook App for iOS & Android
|
293
319
|
], [VERSION, [NAME, 'Facebook']], [
|
294
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
|
+
|
295
325
|
/headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless
|
296
326
|
], [VERSION, [NAME, 'Chrome Headless']], [
|
297
327
|
|
@@ -304,6 +334,9 @@
|
|
304
334
|
/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
|
305
335
|
], [VERSION, [NAME, 'Android Browser']], [
|
306
336
|
|
337
|
+
/(sailfishbrowser)\/([\w\.]+)/i // Sailfish Browser
|
338
|
+
], [[NAME, 'Sailfish Browser'], VERSION], [
|
339
|
+
|
307
340
|
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i
|
308
341
|
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
309
342
|
], [NAME, VERSION], [
|
@@ -311,6 +344,9 @@
|
|
311
344
|
/(dolfin)\/([\w\.]+)/i // Dolphin
|
312
345
|
], [[NAME, 'Dolphin'], VERSION], [
|
313
346
|
|
347
|
+
/(qihu|qhbrowser|qihoobrowser|360browser)/i // 360
|
348
|
+
], [[NAME, '360 Browser']], [
|
349
|
+
|
314
350
|
/((?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
|
315
351
|
], [[NAME, 'Chrome'], VERSION], [
|
316
352
|
|
@@ -332,7 +368,6 @@
|
|
332
368
|
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
333
369
|
], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [
|
334
370
|
|
335
|
-
/(konqueror)\/([\w\.]+)/i, // Konqueror
|
336
371
|
/(webkit|khtml)\/([\w\.]+)/i
|
337
372
|
], [NAME, VERSION], [
|
338
373
|
|
@@ -342,7 +377,8 @@
|
|
342
377
|
/(swiftfox)/i, // Swiftfox
|
343
378
|
/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
|
344
379
|
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
345
|
-
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)
|
380
|
+
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,
|
381
|
+
|
346
382
|
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
347
383
|
/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla
|
348
384
|
|
@@ -350,121 +386,10 @@
|
|
350
386
|
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,
|
351
387
|
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir
|
352
388
|
/(links)\s\(([\w\.]+)/i, // Links
|
353
|
-
/(gobrowser)\/?([\w\.]
|
389
|
+
/(gobrowser)\/?([\w\.]*)/i, // GoBrowser
|
354
390
|
/(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser
|
355
391
|
/(mosaic)[\/\s]([\w\.]+)/i // Mosaic
|
356
392
|
], [NAME, VERSION]
|
357
|
-
|
358
|
-
/* /////////////////////
|
359
|
-
// Media players BEGIN
|
360
|
-
////////////////////////
|
361
|
-
|
362
|
-
, [
|
363
|
-
|
364
|
-
/(apple(?:coremedia|))\/((\d+)[\w\._]+)/i, // Generic Apple CoreMedia
|
365
|
-
/(coremedia) v((\d+)[\w\._]+)/i
|
366
|
-
], [NAME, VERSION], [
|
367
|
-
|
368
|
-
/(aqualung|lyssna|bsplayer)\/((\d+)?[\w\.-]+)/i // Aqualung/Lyssna/BSPlayer
|
369
|
-
], [NAME, VERSION], [
|
370
|
-
|
371
|
-
/(ares|ossproxy)\s((\d+)[\w\.-]+)/i // Ares/OSSProxy
|
372
|
-
], [NAME, VERSION], [
|
373
|
-
|
374
|
-
/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/((\d+)[\w\.-]+)/i,
|
375
|
-
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
|
376
|
-
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
377
|
-
/(clementine|music player daemon)\s((\d+)[\w\.-]+)/i, // Clementine/MPD
|
378
|
-
/(lg player|nexplayer)\s((\d+)[\d\.]+)/i,
|
379
|
-
/player\/(nexplayer|lg player)\s((\d+)[\w\.-]+)/i // NexPlayer/LG Player
|
380
|
-
], [NAME, VERSION], [
|
381
|
-
/(nexplayer)\s((\d+)[\w\.-]+)/i // Nexplayer
|
382
|
-
], [NAME, VERSION], [
|
383
|
-
|
384
|
-
/(flrp)\/((\d+)[\w\.-]+)/i // Flip Player
|
385
|
-
], [[NAME, 'Flip Player'], VERSION], [
|
386
|
-
|
387
|
-
/(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i
|
388
|
-
// FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit
|
389
|
-
], [NAME], [
|
390
|
-
|
391
|
-
/(gstreamer) souphttpsrc (?:\([^\)]+\)){0,1} libsoup\/((\d+)[\w\.-]+)/i
|
392
|
-
// Gstreamer
|
393
|
-
], [NAME, VERSION], [
|
394
|
-
|
395
|
-
/(htc streaming player)\s[\w_]+\s\/\s((\d+)[\d\.]+)/i, // HTC Streaming Player
|
396
|
-
/(java|python-urllib|python-requests|wget|libcurl)\/((\d+)[\w\.-_]+)/i,
|
397
|
-
// Java/urllib/requests/wget/cURL
|
398
|
-
/(lavf)((\d+)[\d\.]+)/i // Lavf (FFMPEG)
|
399
|
-
], [NAME, VERSION], [
|
400
|
-
|
401
|
-
/(htc_one_s)\/((\d+)[\d\.]+)/i // HTC One S
|
402
|
-
], [[NAME, /_/g, ' '], VERSION], [
|
403
|
-
|
404
|
-
/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+){0,1})/i
|
405
|
-
// MPlayer SVN
|
406
|
-
], [NAME, VERSION], [
|
407
|
-
|
408
|
-
/(mplayer)(?:\s|\/|[unkow-]+)((\d+)[\w\.-]+)/i // MPlayer
|
409
|
-
], [NAME, VERSION], [
|
410
|
-
|
411
|
-
/(mplayer)/i, // MPlayer (no other info)
|
412
|
-
/(yourmuze)/i, // YourMuze
|
413
|
-
/(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
|
414
|
-
], [NAME], [
|
415
|
-
|
416
|
-
/(nero (?:home|scout))\/((\d+)[\w\.-]+)/i // Nero Home/Nero Scout
|
417
|
-
], [NAME, VERSION], [
|
418
|
-
|
419
|
-
/(nokia\d+)\/((\d+)[\w\.-]+)/i // Nokia
|
420
|
-
], [NAME, VERSION], [
|
421
|
-
|
422
|
-
/\s(songbird)\/((\d+)[\w\.-]+)/i // Songbird/Philips-Songbird
|
423
|
-
], [NAME, VERSION], [
|
424
|
-
|
425
|
-
/(winamp)3 version ((\d+)[\w\.-]+)/i, // Winamp
|
426
|
-
/(winamp)\s((\d+)[\w\.-]+)/i,
|
427
|
-
/(winamp)mpeg\/((\d+)[\w\.-]+)/i
|
428
|
-
], [NAME, VERSION], [
|
429
|
-
|
430
|
-
/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
431
|
-
// inlight radio
|
432
|
-
], [NAME], [
|
433
|
-
|
434
|
-
/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/((\d+)[\w\.-]+)/i
|
435
|
-
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
436
|
-
// SoundTap/Totem/Stagefright/Streamium
|
437
|
-
], [NAME, VERSION], [
|
438
|
-
|
439
|
-
/(smp)((\d+)[\d\.]+)/i // SMP
|
440
|
-
], [NAME, VERSION], [
|
441
|
-
|
442
|
-
/(vlc) media player - version ((\d+)[\w\.]+)/i, // VLC Videolan
|
443
|
-
/(vlc)\/((\d+)[\w\.-]+)/i,
|
444
|
-
/(xbmc|gvfs|xine|xmms|irapp)\/((\d+)[\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
|
445
|
-
/(foobar2000)\/((\d+)[\d\.]+)/i, // Foobar2000
|
446
|
-
/(itunes)\/((\d+)[\d\.]+)/i // iTunes
|
447
|
-
], [NAME, VERSION], [
|
448
|
-
|
449
|
-
/(wmplayer)\/((\d+)[\w\.-]+)/i, // Windows Media Player
|
450
|
-
/(windows-media-player)\/((\d+)[\w\.-]+)/i
|
451
|
-
], [[NAME, /-/g, ' '], VERSION], [
|
452
|
-
|
453
|
-
/windows\/((\d+)[\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i
|
454
|
-
// Windows Media Server
|
455
|
-
], [VERSION, [NAME, 'Windows']], [
|
456
|
-
|
457
|
-
/(com\.riseupradioalarm)\/((\d+)[\d\.]*)/i // RiseUP Radio Alarm
|
458
|
-
], [NAME, VERSION], [
|
459
|
-
|
460
|
-
/(rad.io)\s((\d+)[\d\.]+)/i, // Rad.io
|
461
|
-
/(radio.(?:de|at|fr))\s((\d+)[\d\.]+)/i
|
462
|
-
], [[NAME, 'rad.io'], VERSION]
|
463
|
-
|
464
|
-
//////////////////////
|
465
|
-
// Media players END
|
466
|
-
////////////////////*/
|
467
|
-
|
468
393
|
],
|
469
394
|
|
470
395
|
cpu : [[
|
@@ -488,21 +413,21 @@
|
|
488
413
|
/(sun4\w)[;\)]/i // SPARC
|
489
414
|
], [[ARCHITECTURE, 'sparc']], [
|
490
415
|
|
491
|
-
/((?: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
|
492
417
|
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
493
418
|
], [[ARCHITECTURE, util.lowerize]]
|
494
419
|
],
|
495
420
|
|
496
421
|
device : [[
|
497
422
|
|
498
|
-
/\((ipad|playbook);[\w\s\)
|
423
|
+
/\((ipad|playbook);[\w\s\),;-]+(rim|apple)/i // iPad/PlayBook
|
499
424
|
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
500
425
|
|
501
426
|
/applecoremedia\/[\w\.]+ \((ipad)/ // iPad
|
502
427
|
], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [
|
503
428
|
|
504
429
|
/(apple\s{0,1}tv)/i // Apple TV
|
505
|
-
], [[MODEL, 'Apple TV'], [VENDOR, 'Apple']], [
|
430
|
+
], [[MODEL, 'Apple TV'], [VENDOR, 'Apple'], [TYPE, SMARTTV]], [
|
506
431
|
|
507
432
|
/(archos)\s(gamepad2?)/i, // Archos
|
508
433
|
/(hp).+(touchpad)/i, // HP TouchPad
|
@@ -512,10 +437,12 @@
|
|
512
437
|
/(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak
|
513
438
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
514
439
|
|
515
|
-
/(kf[A-z]+)\sbuild
|
440
|
+
/(kf[A-z]+)\sbuild\/.+silk\//i // Kindle Fire HD
|
516
441
|
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
517
|
-
/(sd|kf)[0349hijorstuw]+\sbuild
|
442
|
+
/(sd|kf)[0349hijorstuw]+\sbuild\/.+silk\//i // Fire Phone
|
518
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]], [
|
519
446
|
|
520
447
|
/\((ip[honed|\s\w*]+);.+(apple)/i // iPod/iPhone
|
521
448
|
], [MODEL, VENDOR, [TYPE, MOBILE]], [
|
@@ -523,7 +450,7 @@
|
|
523
450
|
], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
|
524
451
|
|
525
452
|
/(blackberry)[\s-]?(\w+)/i, // BlackBerry
|
526
|
-
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]
|
453
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i,
|
527
454
|
// BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
|
528
455
|
/(hp)\s([\w\s]+\w)/i, // HP iPAQ
|
529
456
|
/(asus)-?(\w+)/i // Asus
|
@@ -531,13 +458,13 @@
|
|
531
458
|
/\(bb10;\s(\w+)/i // BlackBerry 10
|
532
459
|
], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
|
533
460
|
// Asus Tablets
|
534
|
-
/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
|
535
462
|
], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [
|
536
463
|
|
537
464
|
/(sony)\s(tablet\s[ps])\sbuild\//i, // Sony
|
538
465
|
/(sony)?(?:sgp.+)\sbuild\//i
|
539
466
|
], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [
|
540
|
-
/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
|
541
468
|
], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
542
469
|
|
543
470
|
/\s(ouya)\s/i, // Ouya
|
@@ -553,22 +480,22 @@
|
|
553
480
|
/(sprint\s(\w+))/i // Sprint Phones
|
554
481
|
], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [
|
555
482
|
|
556
|
-
/(
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
/(zte)-(\w+)*/i, // ZTE
|
561
|
-
/(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i
|
562
|
-
// Alcatel/GeeksPhone/Lenovo/Nexian/Panasonic/Sony
|
483
|
+
/(htc)[;_\s-]+([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC
|
484
|
+
/(zte)-(\w*)/i, // ZTE
|
485
|
+
/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
|
486
|
+
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
563
487
|
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
564
488
|
|
565
489
|
/(nexus\s9)/i // HTC Nexus 9
|
566
490
|
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
|
567
491
|
|
568
492
|
/d\/huawei([\w\s-]+)[;\)]/i,
|
569
|
-
/(nexus\s6p)/i
|
493
|
+
/(nexus\s6p|vog-l29|ane-lx1|eml-l29)/i // Huawei
|
570
494
|
], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
|
571
495
|
|
496
|
+
/android.+(bah2?-a?[lw]\d{2})/i // Huawei MediaPad
|
497
|
+
], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
|
498
|
+
|
572
499
|
/(microsoft);\s(lumia[\s\w]+)/i // Microsoft Lumia
|
573
500
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
574
501
|
|
@@ -578,8 +505,8 @@
|
|
578
505
|
], [[MODEL, /\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [
|
579
506
|
|
580
507
|
// Motorola
|
581
|
-
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))
|
582
|
-
/mot[\s-]?(\w
|
508
|
+
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i,
|
509
|
+
/mot[\s-]?(\w*)/i,
|
583
510
|
/(XT\d{3,4}) build\//i,
|
584
511
|
/(nexus\s6)/i
|
585
512
|
], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
|
@@ -601,18 +528,18 @@
|
|
601
528
|
/smart-tv.+(samsung)/i
|
602
529
|
], [VENDOR, [TYPE, SMARTTV], MODEL], [
|
603
530
|
/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,
|
604
|
-
/(sam[sung]*)[\s-]*(\w+-?[\w-]*)
|
531
|
+
/(sam[sung]*)[\s-]*(\w+-?[\w-]*)/i,
|
605
532
|
/sec-((sgh\w+))/i
|
606
533
|
], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [
|
607
534
|
|
608
|
-
/sie-(\w
|
535
|
+
/sie-(\w*)/i // Siemens
|
609
536
|
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
610
537
|
|
611
538
|
/(maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia
|
612
|
-
/(nokia)[\s_-]?([\w-]
|
539
|
+
/(nokia)[\s_-]?([\w-]*)/i
|
613
540
|
], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
|
614
541
|
|
615
|
-
/android
|
542
|
+
/android[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i // Acer
|
616
543
|
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
617
544
|
|
618
545
|
/android.+([vl]k\-?\d{3})\s+build/i // LG Tablet
|
@@ -622,12 +549,16 @@
|
|
622
549
|
/(lg) netcast\.tv/i // LG SmartTV
|
623
550
|
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
624
551
|
/(nexus\s[45])/i, // LG
|
625
|
-
/lg[e;\s\/-]+(\w
|
552
|
+
/lg[e;\s\/-]+(\w*)/i,
|
626
553
|
/android.+lg(\-?[\d\w]+)\s+build/i
|
627
554
|
], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
|
628
555
|
|
556
|
+
/(lenovo)\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+))/i // Lenovo tablets
|
557
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
629
558
|
/android.+(ideatab[a-z0-9\-\s]+)/i // Lenovo
|
630
559
|
], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
|
560
|
+
/(lenovo)[_\s-]?([\w-]+)/i
|
561
|
+
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
631
562
|
|
632
563
|
/linux;.+((jolla));/i // Jolla
|
633
564
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
@@ -639,34 +570,38 @@
|
|
639
570
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
640
571
|
|
641
572
|
/crkey/i // Google Chromecast
|
642
|
-
], [[MODEL, 'Chromecast'], [VENDOR, 'Google']], [
|
573
|
+
], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [
|
643
574
|
|
644
575
|
/android.+;\s(glass)\s\d/i // Google Glass
|
645
576
|
], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
|
646
577
|
|
647
|
-
/android.+;\s(pixel c)\s/i
|
578
|
+
/android.+;\s(pixel c)[\s)]/i // Google Pixel C
|
648
579
|
], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
|
649
580
|
|
650
|
-
/android.+;\s(pixel xl
|
581
|
+
/android.+;\s(pixel( [23])?( xl)?)[\s)]/i // Google Pixel
|
651
582
|
], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
|
652
583
|
|
653
|
-
/android
|
584
|
+
/android.+;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
654
585
|
/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i, // Xiaomi Hongmi
|
655
|
-
/android.+(mi[\s\-_]*(?:one|one[\s_]plus|note lte)?[\s_]*(?:\d
|
656
|
-
|
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
|
657
589
|
], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
|
658
|
-
/android.+(mi[\s\-_]*(?:pad)
|
590
|
+
/android.+(mi[\s\-_]*(?:pad)(?:[\s_]*[\w\s]+))\s+build/i // Mi Pad tablets
|
659
591
|
],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
|
660
|
-
/android.+;\s(m[1-5]\snote)\sbuild/i // Meizu
|
661
|
-
], [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]], [
|
662
596
|
|
663
|
-
/android.+a000(1)\s+build/i
|
597
|
+
/android.+a000(1)\s+build/i, // OnePlus
|
598
|
+
/android.+oneplus\s(a\d{4})[\s)]/i
|
664
599
|
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
665
600
|
|
666
601
|
/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i // RCA Tablets
|
667
602
|
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
668
603
|
|
669
|
-
/android.+[
|
604
|
+
/android.+[;\/\s]+(Venue[\d\s]{2,7})\s+build/i // Dell Venue Tablets
|
670
605
|
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
671
606
|
|
672
607
|
/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i // Verizon Tablet
|
@@ -678,8 +613,8 @@
|
|
678
613
|
/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i // Barnes & Noble Tablet
|
679
614
|
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
680
615
|
|
681
|
-
/android
|
682
|
-
], [[VENDOR, 'ZTE'],
|
616
|
+
/android.+;\s(k88)\sbuild/i // ZTE K Series Tablet
|
617
|
+
], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
|
683
618
|
|
684
619
|
/android.+[;\/]\s*(gen\d{3})\s+build.*49h/i // Swiss GEN Mobile
|
685
620
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
@@ -690,26 +625,29 @@
|
|
690
625
|
/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i // Zeki Tablets
|
691
626
|
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
692
627
|
|
693
|
-
/(android).+[;\/]\s+([YR]\d{2}
|
694
|
-
/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(
|
628
|
+
/(android).+[;\/]\s+([YR]\d{2})\s+build/i,
|
629
|
+
/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i // Dragon Touch Tablet
|
695
630
|
], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
|
696
631
|
|
697
|
-
/android.+[;\/]\s*(NS
|
632
|
+
/android.+[;\/]\s*(NS-?\w{0,9})\sbuild/i // Insignia Tablets
|
698
633
|
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
699
634
|
|
700
|
-
/android.+[;\/]\s*((NX|Next)
|
635
|
+
/android.+[;\/]\s*((NX|Next)-?\w{0,9})\s+build/i // NextBook Tablets
|
701
636
|
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
702
637
|
|
703
|
-
/android.+[;\/]\s*(Xtreme\_
|
638
|
+
/android.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
|
704
639
|
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones
|
705
640
|
|
706
|
-
/android.+[;\/]\s*(LVTEL
|
641
|
+
/android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i // LvTel Phones
|
707
642
|
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
708
643
|
|
644
|
+
/android.+;\s(PH-1)\s/i
|
645
|
+
], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1
|
646
|
+
|
709
647
|
/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i // Envizen Tablets
|
710
648
|
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
711
649
|
|
712
|
-
/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(
|
650
|
+
/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(\w{1,9})\s+build/i // Le Pan Tablets
|
713
651
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
714
652
|
|
715
653
|
/android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i // MachSpeed Tablets
|
@@ -724,67 +662,18 @@
|
|
724
662
|
/android.+(KS(.+))\s+build/i // Amazon Kindle Tablets
|
725
663
|
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
726
664
|
|
727
|
-
/android.+(Gigaset)[\s\-]+(Q
|
665
|
+
/android.+(Gigaset)[\s\-]+(Q\w{1,9})\s+build/i // Gigaset Tablets
|
728
666
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
729
667
|
|
730
668
|
/\s(tablet|tab)[;\/]/i, // Unidentifiable Tablet
|
731
669
|
/\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
|
732
670
|
], [[TYPE, util.lowerize], VENDOR, MODEL], [
|
733
671
|
|
734
|
-
/(
|
735
|
-
], [
|
736
|
-
|
737
|
-
|
738
|
-
/*//////////////////////////
|
739
|
-
// TODO: move to string map
|
740
|
-
////////////////////////////
|
741
|
-
|
742
|
-
/(C6603)/i // Sony Xperia Z C6603
|
743
|
-
], [[MODEL, 'Xperia Z C6603'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
744
|
-
/(C6903)/i // Sony Xperia Z 1
|
745
|
-
], [[MODEL, 'Xperia Z 1'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
746
|
-
|
747
|
-
/(SM-G900[F|H])/i // Samsung Galaxy S5
|
748
|
-
], [[MODEL, 'Galaxy S5'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
749
|
-
/(SM-G7102)/i // Samsung Galaxy Grand 2
|
750
|
-
], [[MODEL, 'Galaxy Grand 2'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
751
|
-
/(SM-G530H)/i // Samsung Galaxy Grand Prime
|
752
|
-
], [[MODEL, 'Galaxy Grand Prime'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
753
|
-
/(SM-G313HZ)/i // Samsung Galaxy V
|
754
|
-
], [[MODEL, 'Galaxy V'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
755
|
-
/(SM-T805)/i // Samsung Galaxy Tab S 10.5
|
756
|
-
], [[MODEL, 'Galaxy Tab S 10.5'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [
|
757
|
-
/(SM-G800F)/i // Samsung Galaxy S5 Mini
|
758
|
-
], [[MODEL, 'Galaxy S5 Mini'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
759
|
-
/(SM-T311)/i // Samsung Galaxy Tab 3 8.0
|
760
|
-
], [[MODEL, 'Galaxy Tab 3 8.0'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [
|
761
|
-
|
762
|
-
/(T3C)/i // Advan Vandroid T3C
|
763
|
-
], [MODEL, [VENDOR, 'Advan'], [TYPE, TABLET]], [
|
764
|
-
/(ADVAN T1J\+)/i // Advan Vandroid T1J+
|
765
|
-
], [[MODEL, 'Vandroid T1J+'], [VENDOR, 'Advan'], [TYPE, TABLET]], [
|
766
|
-
/(ADVAN S4A)/i // Advan Vandroid S4A
|
767
|
-
], [[MODEL, 'Vandroid S4A'], [VENDOR, 'Advan'], [TYPE, MOBILE]], [
|
768
|
-
|
769
|
-
/(V972M)/i // ZTE V972M
|
770
|
-
], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
|
771
|
-
|
772
|
-
/(i-mobile)\s(IQ\s[\d\.]+)/i // i-mobile IQ
|
773
|
-
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
774
|
-
/(IQ6.3)/i // i-mobile IQ IQ 6.3
|
775
|
-
], [[MODEL, 'IQ 6.3'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [
|
776
|
-
/(i-mobile)\s(i-style\s[\d\.]+)/i // i-mobile i-STYLE
|
777
|
-
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
778
|
-
/(i-STYLE2.1)/i // i-mobile i-STYLE 2.1
|
779
|
-
], [[MODEL, 'i-STYLE 2.1'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [
|
780
|
-
|
781
|
-
/(mobiistar touch LAI 512)/i // mobiistar touch LAI 512
|
782
|
-
], [[MODEL, 'Touch LAI 512'], [VENDOR, 'mobiistar'], [TYPE, MOBILE]], [
|
783
|
-
|
784
|
-
/////////////
|
785
|
-
// END TODO
|
786
|
-
///////////*/
|
672
|
+
/[\s\/\(](smart-?tv)[;\)]/i // SmartTV
|
673
|
+
], [[TYPE, SMARTTV]], [
|
787
674
|
|
675
|
+
/(android[\w\.\s\-]{0,9});.+build/i // Generic Android Device
|
676
|
+
], [MODEL, [VENDOR, 'Generic']]
|
788
677
|
],
|
789
678
|
|
790
679
|
engine : [[
|
@@ -792,13 +681,17 @@
|
|
792
681
|
/windows.+\sedge\/([\w\.]+)/i // EdgeHTML
|
793
682
|
], [VERSION, [NAME, 'EdgeHTML']], [
|
794
683
|
|
684
|
+
/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i // Blink
|
685
|
+
], [VERSION, [NAME, 'Blink']], [
|
686
|
+
|
795
687
|
/(presto)\/([\w\.]+)/i, // Presto
|
796
|
-
/(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
|
797
690
|
/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
798
691
|
/(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
|
799
692
|
], [NAME, VERSION], [
|
800
693
|
|
801
|
-
/rv\:([\w\.]
|
694
|
+
/rv\:([\w\.]{1,9}).+(gecko)/i // Gecko
|
802
695
|
], [VERSION, NAME]
|
803
696
|
],
|
804
697
|
|
@@ -808,7 +701,7 @@
|
|
808
701
|
/microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes)
|
809
702
|
], [NAME, VERSION], [
|
810
703
|
/(windows)\snt\s6\.2;\s(arm)/i, // Windows RT
|
811
|
-
/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s]
|
704
|
+
/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i, // Windows Phone
|
812
705
|
/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
|
813
706
|
], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
|
814
707
|
/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
|
@@ -817,13 +710,12 @@
|
|
817
710
|
// Mobile/Embedded OS
|
818
711
|
/\((bb)(10);/i // BlackBerry 10
|
819
712
|
], [[NAME, 'BlackBerry'], VERSION], [
|
820
|
-
/(blackberry)\w*\/?([\w\.]
|
821
|
-
/(tizen)[\/\s]([\w\.]+)/i,
|
822
|
-
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]
|
823
|
-
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki
|
824
|
-
/linux;.+(sailfish);/i // Sailfish OS
|
713
|
+
/(blackberry)\w*\/?([\w\.]*)/i, // Blackberry
|
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
|
825
717
|
], [NAME, VERSION], [
|
826
|
-
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]
|
718
|
+
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i // Symbian
|
827
719
|
], [[NAME, 'Symbian'], VERSION], [
|
828
720
|
/\((series40);/i // Series 40
|
829
721
|
], [NAME], [
|
@@ -834,43 +726,43 @@
|
|
834
726
|
/(nintendo|playstation)\s([wids34portablevu]+)/i, // Nintendo/Playstation
|
835
727
|
|
836
728
|
// GNU/Linux based
|
837
|
-
/(mint)[\/\s\(]?(\w
|
729
|
+
/(mint)[\/\s\(]?(\w*)/i, // Mint
|
838
730
|
/(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux
|
839
|
-
/(joli|[kxln]?ubuntu|debian|
|
731
|
+
/(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]*)/i,
|
840
732
|
// Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
|
841
733
|
// Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
|
842
|
-
/(hurd|linux)\s?([\w\.]
|
843
|
-
/(gnu)\s?([\w\.]
|
734
|
+
/(hurd|linux)\s?([\w\.]*)/i, // Hurd/Linux
|
735
|
+
/(gnu)\s?([\w\.]*)/i // GNU
|
844
736
|
], [NAME, VERSION], [
|
845
737
|
|
846
738
|
/(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS
|
847
739
|
], [[NAME, 'Chromium OS'], VERSION],[
|
848
740
|
|
849
741
|
// Solaris
|
850
|
-
/(sunos)\s?([\w
|
742
|
+
/(sunos)\s?([\w\.\d]*)/i // Solaris
|
851
743
|
], [[NAME, 'Solaris'], VERSION], [
|
852
744
|
|
853
745
|
// BSD based
|
854
|
-
/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]
|
746
|
+
/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
|
855
747
|
], [NAME, VERSION],[
|
856
748
|
|
857
|
-
/(haiku)\s(\w+)/i
|
749
|
+
/(haiku)\s(\w+)/i // Haiku
|
858
750
|
], [NAME, VERSION],[
|
859
751
|
|
860
752
|
/cfnetwork\/.+darwin/i,
|
861
|
-
/ip[honead]
|
753
|
+
/ip[honead]{2,4}(?:.*os\s([\w]+)\slike\smac|;\sopera)/i // iOS
|
862
754
|
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
863
755
|
|
864
|
-
/(mac\sos\sx)\s?([\w\s\.]
|
756
|
+
/(mac\sos\sx)\s?([\w\s\.]*)/i,
|
865
757
|
/(macintosh|mac(?=_powerpc)\s)/i // Mac OS
|
866
758
|
], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
|
867
759
|
|
868
760
|
// Other
|
869
|
-
/((?:open)?solaris)[\/\s-]?([\w\.]
|
870
|
-
/(aix)\s((\d)(?=\.|\)|\s)[\w\.]
|
871
|
-
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i,
|
872
|
-
// Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS
|
873
|
-
/(unix)\s?([\w\.]
|
761
|
+
/((?:open)?solaris)[\/\s-]?([\w\.]*)/i, // Solaris
|
762
|
+
/(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, // AIX
|
763
|
+
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i,
|
764
|
+
// Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia
|
765
|
+
/(unix)\s?([\w\.]*)/i // UNIX
|
874
766
|
], [NAME, VERSION]
|
875
767
|
]
|
876
768
|
};
|
@@ -879,22 +771,6 @@
|
|
879
771
|
/////////////////
|
880
772
|
// Constructor
|
881
773
|
////////////////
|
882
|
-
/*
|
883
|
-
var Browser = function (name, version) {
|
884
|
-
this[NAME] = name;
|
885
|
-
this[VERSION] = version;
|
886
|
-
};
|
887
|
-
var CPU = function (arch) {
|
888
|
-
this[ARCHITECTURE] = arch;
|
889
|
-
};
|
890
|
-
var Device = function (vendor, model, type) {
|
891
|
-
this[VENDOR] = vendor;
|
892
|
-
this[MODEL] = model;
|
893
|
-
this[TYPE] = type;
|
894
|
-
};
|
895
|
-
var Engine = Browser;
|
896
|
-
var OS = Browser;
|
897
|
-
*/
|
898
774
|
var UAParser = function (uastring, extensions) {
|
899
775
|
|
900
776
|
if (typeof uastring === 'object') {
|
@@ -908,11 +784,6 @@
|
|
908
784
|
|
909
785
|
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
910
786
|
var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
|
911
|
-
//var browser = new Browser();
|
912
|
-
//var cpu = new CPU();
|
913
|
-
//var device = new Device();
|
914
|
-
//var engine = new Engine();
|
915
|
-
//var os = new OS();
|
916
787
|
|
917
788
|
this.getBrowser = function () {
|
918
789
|
var browser = { name: undefined, version: undefined };
|
@@ -955,11 +826,6 @@
|
|
955
826
|
};
|
956
827
|
this.setUA = function (uastring) {
|
957
828
|
ua = uastring;
|
958
|
-
//browser = new Browser();
|
959
|
-
//cpu = new CPU();
|
960
|
-
//device = new Device();
|
961
|
-
//engine = new Engine();
|
962
|
-
//os = new OS();
|
963
829
|
return this;
|
964
830
|
};
|
965
831
|
return this;
|
@@ -993,7 +859,6 @@
|
|
993
859
|
NAME : NAME,
|
994
860
|
VERSION : VERSION
|
995
861
|
};
|
996
|
-
//UAParser.Utils = util;
|
997
862
|
|
998
863
|
///////////
|
999
864
|
// Export
|
@@ -1006,39 +871,10 @@
|
|
1006
871
|
if (typeof module !== UNDEF_TYPE && module.exports) {
|
1007
872
|
exports = module.exports = UAParser;
|
1008
873
|
}
|
1009
|
-
// TODO: test!!!!!!!!
|
1010
|
-
/*
|
1011
|
-
if (require && require.main === module && process) {
|
1012
|
-
// cli
|
1013
|
-
var jsonize = function (arr) {
|
1014
|
-
var res = [];
|
1015
|
-
for (var i in arr) {
|
1016
|
-
res.push(new UAParser(arr[i]).getResult());
|
1017
|
-
}
|
1018
|
-
process.stdout.write(JSON.stringify(res, null, 2) + '\n');
|
1019
|
-
};
|
1020
|
-
if (process.stdin.isTTY) {
|
1021
|
-
// via args
|
1022
|
-
jsonize(process.argv.slice(2));
|
1023
|
-
} else {
|
1024
|
-
// via pipe
|
1025
|
-
var str = '';
|
1026
|
-
process.stdin.on('readable', function() {
|
1027
|
-
var read = process.stdin.read();
|
1028
|
-
if (read !== null) {
|
1029
|
-
str += read;
|
1030
|
-
}
|
1031
|
-
});
|
1032
|
-
process.stdin.on('end', function () {
|
1033
|
-
jsonize(str.replace(/\n$/, '').split('\n'));
|
1034
|
-
});
|
1035
|
-
}
|
1036
|
-
}
|
1037
|
-
*/
|
1038
874
|
exports.UAParser = UAParser;
|
1039
875
|
} else {
|
1040
876
|
// requirejs env (optional)
|
1041
|
-
if (typeof(define) ===
|
877
|
+
if (typeof(define) === 'function' && define.amd) {
|
1042
878
|
define(function () {
|
1043
879
|
return UAParser;
|
1044
880
|
});
|
@@ -1054,7 +890,7 @@
|
|
1054
890
|
// jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
|
1055
891
|
// and we should catch that.
|
1056
892
|
var $ = window && (window.jQuery || window.Zepto);
|
1057
|
-
if (
|
893
|
+
if ($ && !$.ua) {
|
1058
894
|
var parser = new UAParser();
|
1059
895
|
$.ua = parser.getResult();
|
1060
896
|
$.ua.get = function () {
|