ua-parser-js 0.7.16 → 0.7.20
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 +49 -42
- package/src/ua-parser.js +139 -313
- package/test/browser-test.json +205 -0
- package/test/cpu-test.json +8 -0
- package/test/device-test.json +229 -3
- package/test/engine-test.json +27 -0
- package/test/os-test.json +21 -3
package/src/ua-parser.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
|
2
|
-
* UAParser.js v0.7.
|
1
|
+
/*!
|
2
|
+
* UAParser.js v0.7.20
|
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.20',
|
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,7 +235,7 @@
|
|
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
240
|
|
250
241
|
// Trident based
|
@@ -253,16 +244,19 @@
|
|
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], [
|
@@ -270,28 +264,58 @@
|
|
270
264
|
/(puffin)\/([\w\.]+)/i // Puffin
|
271
265
|
], [[NAME, 'Puffin'], VERSION], [
|
272
266
|
|
273
|
-
/(
|
274
|
-
|
267
|
+
/(focus)\/([\w\.]+)/i // Firefox Focus
|
268
|
+
], [[NAME, 'Firefox Focus'], VERSION], [
|
269
|
+
|
270
|
+
/(opt)\/([\w\.]+)/i // Opera Touch
|
271
|
+
], [[NAME, 'Opera Touch'], VERSION], [
|
272
|
+
|
273
|
+
/((?:[\s\/])uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i // UCBrowser
|
275
274
|
], [[NAME, 'UCBrowser'], VERSION], [
|
276
275
|
|
277
276
|
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
|
278
277
|
], [[NAME, /_/g, ' '], VERSION], [
|
279
278
|
|
279
|
+
/(windowswechat qbcore)\/([\w\.]+)/i // WeChat Desktop for Windows Built-in Browser
|
280
|
+
], [[NAME, 'WeChat(Win) Desktop'], VERSION], [
|
281
|
+
|
280
282
|
/(micromessenger)\/([\w\.]+)/i // WeChat
|
281
283
|
], [[NAME, 'WeChat'], VERSION], [
|
282
284
|
|
285
|
+
/(brave)\/([\w\.]+)/i // Brave browser
|
286
|
+
], [[NAME, 'Brave'], VERSION], [
|
287
|
+
|
288
|
+
/(qqbrowserlite)\/([\w\.]+)/i // QQBrowserLite
|
289
|
+
], [NAME, VERSION], [
|
290
|
+
|
283
291
|
/(QQ)\/([\d\.]+)/i // QQ, aka ShouQ
|
284
292
|
], [NAME, VERSION], [
|
285
293
|
|
286
294
|
/m?(qqbrowser)[\/\s]?([\w\.]+)/i // QQBrowser
|
287
295
|
], [NAME, VERSION], [
|
288
296
|
|
297
|
+
/(BIDUBrowser)[\/\s]?([\w\.]+)/i // Baidu Browser
|
298
|
+
], [NAME, VERSION], [
|
299
|
+
|
300
|
+
/(2345Explorer)[\/\s]?([\w\.]+)/i // 2345 Browser
|
301
|
+
], [NAME, VERSION], [
|
302
|
+
|
303
|
+
/(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser
|
304
|
+
], [NAME], [
|
305
|
+
|
306
|
+
/(LBBROWSER)/i // LieBao Browser
|
307
|
+
], [NAME], [
|
308
|
+
|
289
309
|
/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
290
310
|
], [VERSION, [NAME, 'MIUI Browser']], [
|
291
311
|
|
292
312
|
/;fbav\/([\w\.]+);/i // Facebook App for iOS & Android
|
293
313
|
], [VERSION, [NAME, 'Facebook']], [
|
294
314
|
|
315
|
+
/safari\s(line)\/([\w\.]+)/i, // Line App for iOS
|
316
|
+
/android.+(line)\/([\w\.]+)\/iab/i // Line App for Android
|
317
|
+
], [NAME, VERSION], [
|
318
|
+
|
295
319
|
/headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless
|
296
320
|
], [VERSION, [NAME, 'Chrome Headless']], [
|
297
321
|
|
@@ -304,6 +328,9 @@
|
|
304
328
|
/android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)*/i // Android Browser
|
305
329
|
], [VERSION, [NAME, 'Android Browser']], [
|
306
330
|
|
331
|
+
/(sailfishbrowser)\/([\w\.]+)/i // Sailfish Browser
|
332
|
+
], [[NAME, 'Sailfish Browser'], VERSION], [
|
333
|
+
|
307
334
|
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i
|
308
335
|
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
309
336
|
], [NAME, VERSION], [
|
@@ -332,7 +359,6 @@
|
|
332
359
|
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
333
360
|
], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [
|
334
361
|
|
335
|
-
/(konqueror)\/([\w\.]+)/i, // Konqueror
|
336
362
|
/(webkit|khtml)\/([\w\.]+)/i
|
337
363
|
], [NAME, VERSION], [
|
338
364
|
|
@@ -342,7 +368,8 @@
|
|
342
368
|
/(swiftfox)/i, // Swiftfox
|
343
369
|
/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
|
344
370
|
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
345
|
-
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)
|
371
|
+
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,
|
372
|
+
|
346
373
|
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
347
374
|
/(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla
|
348
375
|
|
@@ -350,121 +377,10 @@
|
|
350
377
|
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i,
|
351
378
|
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir
|
352
379
|
/(links)\s\(([\w\.]+)/i, // Links
|
353
|
-
/(gobrowser)\/?([\w\.]
|
380
|
+
/(gobrowser)\/?([\w\.]*)/i, // GoBrowser
|
354
381
|
/(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser
|
355
382
|
/(mosaic)[\/\s]([\w\.]+)/i // Mosaic
|
356
383
|
], [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
384
|
],
|
469
385
|
|
470
386
|
cpu : [[
|
@@ -488,14 +404,14 @@
|
|
488
404
|
/(sun4\w)[;\)]/i // SPARC
|
489
405
|
], [[ARCHITECTURE, 'sparc']], [
|
490
406
|
|
491
|
-
/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d
|
407
|
+
/((?:avr32|ia64(?=;))|68k(?=\))|arm(?:64|(?=v\d+[;l]))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i
|
492
408
|
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
493
409
|
], [[ARCHITECTURE, util.lowerize]]
|
494
410
|
],
|
495
411
|
|
496
412
|
device : [[
|
497
413
|
|
498
|
-
/\((ipad|playbook);[\w\s\)
|
414
|
+
/\((ipad|playbook);[\w\s\),;-]+(rim|apple)/i // iPad/PlayBook
|
499
415
|
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
500
416
|
|
501
417
|
/applecoremedia\/[\w\.]+ \((ipad)/ // iPad
|
@@ -512,10 +428,12 @@
|
|
512
428
|
/(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak
|
513
429
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
514
430
|
|
515
|
-
/(kf[A-z]+)\sbuild
|
431
|
+
/(kf[A-z]+)\sbuild\/.+silk\//i // Kindle Fire HD
|
516
432
|
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
517
|
-
/(sd|kf)[0349hijorstuw]+\sbuild
|
433
|
+
/(sd|kf)[0349hijorstuw]+\sbuild\/.+silk\//i // Fire Phone
|
518
434
|
], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
|
435
|
+
/android.+aft([bms])\sbuild/i // Fire TV
|
436
|
+
], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
|
519
437
|
|
520
438
|
/\((ip[honed|\s\w*]+);.+(apple)/i // iPod/iPhone
|
521
439
|
], [MODEL, VENDOR, [TYPE, MOBILE]], [
|
@@ -523,7 +441,7 @@
|
|
523
441
|
], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
|
524
442
|
|
525
443
|
/(blackberry)[\s-]?(\w+)/i, // BlackBerry
|
526
|
-
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]
|
444
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i,
|
527
445
|
// BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
|
528
446
|
/(hp)\s([\w\s]+\w)/i, // HP iPAQ
|
529
447
|
/(asus)-?(\w+)/i // Asus
|
@@ -531,13 +449,13 @@
|
|
531
449
|
/\(bb10;\s(\w+)/i // BlackBerry 10
|
532
450
|
], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
|
533
451
|
// Asus Tablets
|
534
|
-
/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone)/i
|
452
|
+
/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone|p00c)/i
|
535
453
|
], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [
|
536
454
|
|
537
455
|
/(sony)\s(tablet\s[ps])\sbuild\//i, // Sony
|
538
456
|
/(sony)?(?:sgp.+)\sbuild\//i
|
539
457
|
], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [
|
540
|
-
/android.+\s([c-g]\d{4}|so[-l]\w+)\
|
458
|
+
/android.+\s([c-g]\d{4}|so[-l]\w+)(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
541
459
|
], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
542
460
|
|
543
461
|
/\s(ouya)\s/i, // Ouya
|
@@ -553,13 +471,10 @@
|
|
553
471
|
/(sprint\s(\w+))/i // Sprint Phones
|
554
472
|
], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [
|
555
473
|
|
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
|
474
|
+
/(htc)[;_\s-]+([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC
|
475
|
+
/(zte)-(\w*)/i, // ZTE
|
476
|
+
/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
|
477
|
+
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
563
478
|
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
564
479
|
|
565
480
|
/(nexus\s9)/i // HTC Nexus 9
|
@@ -578,8 +493,8 @@
|
|
578
493
|
], [[MODEL, /\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [
|
579
494
|
|
580
495
|
// Motorola
|
581
|
-
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))
|
582
|
-
/mot[\s-]?(\w
|
496
|
+
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i,
|
497
|
+
/mot[\s-]?(\w*)/i,
|
583
498
|
/(XT\d{3,4}) build\//i,
|
584
499
|
/(nexus\s6)/i
|
585
500
|
], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
|
@@ -601,18 +516,18 @@
|
|
601
516
|
/smart-tv.+(samsung)/i
|
602
517
|
], [VENDOR, [TYPE, SMARTTV], MODEL], [
|
603
518
|
/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,
|
604
|
-
/(sam[sung]*)[\s-]*(\w+-?[\w-]*)
|
519
|
+
/(sam[sung]*)[\s-]*(\w+-?[\w-]*)/i,
|
605
520
|
/sec-((sgh\w+))/i
|
606
521
|
], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [
|
607
522
|
|
608
|
-
/sie-(\w
|
523
|
+
/sie-(\w*)/i // Siemens
|
609
524
|
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
610
525
|
|
611
526
|
/(maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia
|
612
|
-
/(nokia)[\s_-]?([\w-]
|
527
|
+
/(nokia)[\s_-]?([\w-]*)/i
|
613
528
|
], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
|
614
529
|
|
615
|
-
/android
|
530
|
+
/android[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i // Acer
|
616
531
|
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
617
532
|
|
618
533
|
/android.+([vl]k\-?\d{3})\s+build/i // LG Tablet
|
@@ -622,12 +537,16 @@
|
|
622
537
|
/(lg) netcast\.tv/i // LG SmartTV
|
623
538
|
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
624
539
|
/(nexus\s[45])/i, // LG
|
625
|
-
/lg[e;\s\/-]+(\w
|
540
|
+
/lg[e;\s\/-]+(\w*)/i,
|
626
541
|
/android.+lg(\-?[\d\w]+)\s+build/i
|
627
542
|
], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
|
628
543
|
|
544
|
+
/(lenovo)\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+))/i // Lenovo tablets
|
545
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
629
546
|
/android.+(ideatab[a-z0-9\-\s]+)/i // Lenovo
|
630
547
|
], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
|
548
|
+
/(lenovo)[_\s-]?([\w-]+)/i
|
549
|
+
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
631
550
|
|
632
551
|
/linux;.+((jolla));/i // Jolla
|
633
552
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
@@ -644,29 +563,33 @@
|
|
644
563
|
/android.+;\s(glass)\s\d/i // Google Glass
|
645
564
|
], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
|
646
565
|
|
647
|
-
/android.+;\s(pixel c)\s/i
|
566
|
+
/android.+;\s(pixel c)[\s)]/i // Google Pixel C
|
648
567
|
], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
|
649
568
|
|
650
|
-
/android.+;\s(pixel xl
|
569
|
+
/android.+;\s(pixel( [23])?( xl)?)[\s)]/i // Google Pixel
|
651
570
|
], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
|
652
571
|
|
653
|
-
/android
|
572
|
+
/android.+;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
654
573
|
/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
|
-
|
574
|
+
/android.+(mi[\s\-_]*(?:a\d|one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i,
|
575
|
+
// Xiaomi Mi
|
576
|
+
/android.+(redmi[\s\-_]*(?:note)?(?:[\s_]*[\w\s]+))\s+build/i // Redmi Phones
|
657
577
|
], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
|
658
|
-
/android.+(mi[\s\-_]*(?:pad)
|
578
|
+
/android.+(mi[\s\-_]*(?:pad)(?:[\s_]*[\w\s]+))\s+build/i // Mi Pad tablets
|
659
579
|
],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
|
660
|
-
/android.+;\s(m[1-5]\snote)\sbuild/i // Meizu
|
661
|
-
], [MODEL, [VENDOR, 'Meizu'], [TYPE,
|
580
|
+
/android.+;\s(m[1-5]\snote)\sbuild/i // Meizu
|
581
|
+
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
582
|
+
/(mz)-([\w-]{2,})/i
|
583
|
+
], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [
|
662
584
|
|
663
|
-
/android.+a000(1)\s+build/i
|
585
|
+
/android.+a000(1)\s+build/i, // OnePlus
|
586
|
+
/android.+oneplus\s(a\d{4})\s+build/i
|
664
587
|
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
665
588
|
|
666
589
|
/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i // RCA Tablets
|
667
590
|
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
668
591
|
|
669
|
-
/android.+[
|
592
|
+
/android.+[;\/\s]+(Venue[\d\s]{2,7})\s+build/i // Dell Venue Tablets
|
670
593
|
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
671
594
|
|
672
595
|
/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i // Verizon Tablet
|
@@ -678,8 +601,8 @@
|
|
678
601
|
/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i // Barnes & Noble Tablet
|
679
602
|
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
680
603
|
|
681
|
-
/android
|
682
|
-
], [[VENDOR, 'ZTE'],
|
604
|
+
/android.+;\s(k88)\sbuild/i // ZTE K Series Tablet
|
605
|
+
], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
|
683
606
|
|
684
607
|
/android.+[;\/]\s*(gen\d{3})\s+build.*49h/i // Swiss GEN Mobile
|
685
608
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
@@ -690,26 +613,29 @@
|
|
690
613
|
/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i // Zeki Tablets
|
691
614
|
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
692
615
|
|
693
|
-
/(android).+[;\/]\s+([YR]\d{2}
|
694
|
-
/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(
|
616
|
+
/(android).+[;\/]\s+([YR]\d{2})\s+build/i,
|
617
|
+
/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i // Dragon Touch Tablet
|
695
618
|
], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
|
696
619
|
|
697
|
-
/android.+[;\/]\s*(NS
|
620
|
+
/android.+[;\/]\s*(NS-?\w{0,9})\sbuild/i // Insignia Tablets
|
698
621
|
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
699
622
|
|
700
|
-
/android.+[;\/]\s*((NX|Next)
|
623
|
+
/android.+[;\/]\s*((NX|Next)-?\w{0,9})\s+build/i // NextBook Tablets
|
701
624
|
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
702
625
|
|
703
|
-
/android.+[;\/]\s*(Xtreme\_
|
626
|
+
/android.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
|
704
627
|
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones
|
705
628
|
|
706
|
-
/android.+[;\/]\s*(LVTEL
|
629
|
+
/android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i // LvTel Phones
|
707
630
|
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
708
631
|
|
632
|
+
/android.+;\s(PH-1)\s/i
|
633
|
+
], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1
|
634
|
+
|
709
635
|
/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i // Envizen Tablets
|
710
636
|
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
711
637
|
|
712
|
-
/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(
|
638
|
+
/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(\w{1,9})\s+build/i // Le Pan Tablets
|
713
639
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
714
640
|
|
715
641
|
/android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i // MachSpeed Tablets
|
@@ -724,67 +650,18 @@
|
|
724
650
|
/android.+(KS(.+))\s+build/i // Amazon Kindle Tablets
|
725
651
|
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
726
652
|
|
727
|
-
/android.+(Gigaset)[\s\-]+(Q
|
653
|
+
/android.+(Gigaset)[\s\-]+(Q\w{1,9})\s+build/i // Gigaset Tablets
|
728
654
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
729
655
|
|
730
656
|
/\s(tablet|tab)[;\/]/i, // Unidentifiable Tablet
|
731
657
|
/\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
|
732
658
|
], [[TYPE, util.lowerize], VENDOR, MODEL], [
|
733
659
|
|
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
|
-
///////////*/
|
660
|
+
/[\s\/\(](smart-?tv)[;\)]/i // SmartTV
|
661
|
+
], [[TYPE, SMARTTV]], [
|
787
662
|
|
663
|
+
/(android[\w\.\s\-]{0,9});.+build/i // Generic Android Device
|
664
|
+
], [MODEL, [VENDOR, 'Generic']]
|
788
665
|
],
|
789
666
|
|
790
667
|
engine : [[
|
@@ -792,13 +669,17 @@
|
|
792
669
|
/windows.+\sedge\/([\w\.]+)/i // EdgeHTML
|
793
670
|
], [VERSION, [NAME, 'EdgeHTML']], [
|
794
671
|
|
672
|
+
/webkit\/537\.36.+chrome\/(?!27)/i // Blink
|
673
|
+
], [[NAME, 'Blink']], [
|
674
|
+
|
795
675
|
/(presto)\/([\w\.]+)/i, // Presto
|
796
|
-
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,
|
676
|
+
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
|
677
|
+
// WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
|
797
678
|
/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
798
679
|
/(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
|
799
680
|
], [NAME, VERSION], [
|
800
681
|
|
801
|
-
/rv\:([\w\.]
|
682
|
+
/rv\:([\w\.]{1,9}).+(gecko)/i // Gecko
|
802
683
|
], [VERSION, NAME]
|
803
684
|
],
|
804
685
|
|
@@ -808,7 +689,7 @@
|
|
808
689
|
/microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes)
|
809
690
|
], [NAME, VERSION], [
|
810
691
|
/(windows)\snt\s6\.2;\s(arm)/i, // Windows RT
|
811
|
-
/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s]
|
692
|
+
/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i, // Windows Phone
|
812
693
|
/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
|
813
694
|
], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
|
814
695
|
/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
|
@@ -817,13 +698,12 @@
|
|
817
698
|
// Mobile/Embedded OS
|
818
699
|
/\((bb)(10);/i // BlackBerry 10
|
819
700
|
], [[NAME, 'BlackBerry'], VERSION], [
|
820
|
-
/(blackberry)\w*\/?([\w\.]
|
701
|
+
/(blackberry)\w*\/?([\w\.]*)/i, // Blackberry
|
821
702
|
/(tizen)[\/\s]([\w\.]+)/i, // Tizen
|
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
|
703
|
+
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i
|
704
|
+
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
|
825
705
|
], [NAME, VERSION], [
|
826
|
-
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]
|
706
|
+
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]*)/i // Symbian
|
827
707
|
], [[NAME, 'Symbian'], VERSION], [
|
828
708
|
/\((series40);/i // Series 40
|
829
709
|
], [NAME], [
|
@@ -834,43 +714,43 @@
|
|
834
714
|
/(nintendo|playstation)\s([wids34portablevu]+)/i, // Nintendo/Playstation
|
835
715
|
|
836
716
|
// GNU/Linux based
|
837
|
-
/(mint)[\/\s\(]?(\w
|
717
|
+
/(mint)[\/\s\(]?(\w*)/i, // Mint
|
838
718
|
/(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux
|
839
|
-
/(joli|[kxln]?ubuntu|debian|
|
719
|
+
/(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?(?!chrom)([\w\.-]*)/i,
|
840
720
|
// Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
|
841
721
|
// Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
|
842
|
-
/(hurd|linux)\s?([\w\.]
|
843
|
-
/(gnu)\s?([\w\.]
|
722
|
+
/(hurd|linux)\s?([\w\.]*)/i, // Hurd/Linux
|
723
|
+
/(gnu)\s?([\w\.]*)/i // GNU
|
844
724
|
], [NAME, VERSION], [
|
845
725
|
|
846
726
|
/(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS
|
847
727
|
], [[NAME, 'Chromium OS'], VERSION],[
|
848
728
|
|
849
729
|
// Solaris
|
850
|
-
/(sunos)\s?([\w
|
730
|
+
/(sunos)\s?([\w\.\d]*)/i // Solaris
|
851
731
|
], [[NAME, 'Solaris'], VERSION], [
|
852
732
|
|
853
733
|
// BSD based
|
854
|
-
/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]
|
734
|
+
/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
|
855
735
|
], [NAME, VERSION],[
|
856
736
|
|
857
|
-
/(haiku)\s(\w+)/i
|
737
|
+
/(haiku)\s(\w+)/i // Haiku
|
858
738
|
], [NAME, VERSION],[
|
859
739
|
|
860
740
|
/cfnetwork\/.+darwin/i,
|
861
|
-
/ip[honead]
|
741
|
+
/ip[honead]{2,4}(?:.*os\s([\w]+)\slike\smac|;\sopera)/i // iOS
|
862
742
|
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
863
743
|
|
864
|
-
/(mac\sos\sx)\s?([\w\s\.]
|
744
|
+
/(mac\sos\sx)\s?([\w\s\.]*)/i,
|
865
745
|
/(macintosh|mac(?=_powerpc)\s)/i // Mac OS
|
866
746
|
], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
|
867
747
|
|
868
748
|
// 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\.]
|
749
|
+
/((?:open)?solaris)[\/\s-]?([\w\.]*)/i, // Solaris
|
750
|
+
/(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, // AIX
|
751
|
+
/(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i,
|
752
|
+
// Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia
|
753
|
+
/(unix)\s?([\w\.]*)/i // UNIX
|
874
754
|
], [NAME, VERSION]
|
875
755
|
]
|
876
756
|
};
|
@@ -879,22 +759,6 @@
|
|
879
759
|
/////////////////
|
880
760
|
// Constructor
|
881
761
|
////////////////
|
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
762
|
var UAParser = function (uastring, extensions) {
|
899
763
|
|
900
764
|
if (typeof uastring === 'object') {
|
@@ -908,11 +772,6 @@
|
|
908
772
|
|
909
773
|
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
910
774
|
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
775
|
|
917
776
|
this.getBrowser = function () {
|
918
777
|
var browser = { name: undefined, version: undefined };
|
@@ -955,11 +814,6 @@
|
|
955
814
|
};
|
956
815
|
this.setUA = function (uastring) {
|
957
816
|
ua = uastring;
|
958
|
-
//browser = new Browser();
|
959
|
-
//cpu = new CPU();
|
960
|
-
//device = new Device();
|
961
|
-
//engine = new Engine();
|
962
|
-
//os = new OS();
|
963
817
|
return this;
|
964
818
|
};
|
965
819
|
return this;
|
@@ -993,7 +847,6 @@
|
|
993
847
|
NAME : NAME,
|
994
848
|
VERSION : VERSION
|
995
849
|
};
|
996
|
-
//UAParser.Utils = util;
|
997
850
|
|
998
851
|
///////////
|
999
852
|
// Export
|
@@ -1006,37 +859,10 @@
|
|
1006
859
|
if (typeof module !== UNDEF_TYPE && module.exports) {
|
1007
860
|
exports = module.exports = UAParser;
|
1008
861
|
}
|
1009
|
-
// TODO: test!!!
|
1010
|
-
if (require && require.main === module && process) {
|
1011
|
-
// cli
|
1012
|
-
var jsonize = function (arr) {
|
1013
|
-
var res = [];
|
1014
|
-
for (var i in arr) {
|
1015
|
-
res.push(new UAParser(arr[i]).getResult());
|
1016
|
-
}
|
1017
|
-
process.stdout.write(JSON.stringify(res, null, 2) + '\n');
|
1018
|
-
};
|
1019
|
-
if (process.stdin.isTTY) {
|
1020
|
-
// via args
|
1021
|
-
jsonize(process.argv.slice(2));
|
1022
|
-
} else {
|
1023
|
-
// via pipe
|
1024
|
-
var str = '';
|
1025
|
-
process.stdin.on('readable', function() {
|
1026
|
-
var read = process.stdin.read();
|
1027
|
-
if (read !== null) {
|
1028
|
-
str += read;
|
1029
|
-
}
|
1030
|
-
});
|
1031
|
-
process.stdin.on('end', function () {
|
1032
|
-
jsonize(str.replace(/\n$/, '').split('\n'));
|
1033
|
-
});
|
1034
|
-
}
|
1035
|
-
}
|
1036
862
|
exports.UAParser = UAParser;
|
1037
863
|
} else {
|
1038
864
|
// requirejs env (optional)
|
1039
|
-
if (typeof(define) ===
|
865
|
+
if (typeof(define) === 'function' && define.amd) {
|
1040
866
|
define(function () {
|
1041
867
|
return UAParser;
|
1042
868
|
});
|
@@ -1052,7 +878,7 @@
|
|
1052
878
|
// jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
|
1053
879
|
// and we should catch that.
|
1054
880
|
var $ = window && (window.jQuery || window.Zepto);
|
1055
|
-
if (typeof $ !== UNDEF_TYPE) {
|
881
|
+
if (typeof $ !== UNDEF_TYPE && !$.ua) {
|
1056
882
|
var parser = new UAParser();
|
1057
883
|
$.ua = parser.getResult();
|
1058
884
|
$.ua.get = function () {
|