ua-parser-js 0.7.25 → 0.7.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ua-parser-js might be problematic. Click here for more details.
- package/bower.json +17 -17
- package/changelog.md +3 -0
- package/dist/ua-parser.min.js +9 -9
- package/dist/ua-parser.pack.js +9 -9
- package/package.js +1 -1
- package/package.json +153 -152
- package/readme.md +13 -12
- package/src/ua-parser.js +365 -392
- package/test/browser-test.json +33 -3
- package/test/cpu-test.json +65 -1
- package/test/device-test.json +677 -47
- package/test/os-test.json +274 -112
- package/test/test.js +49 -11
package/src/ua-parser.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!@license
|
2
|
-
* UAParser.js v0.7.
|
2
|
+
* UAParser.js v0.7.26
|
3
3
|
* Lightweight JavaScript-based User-Agent string parser
|
4
4
|
* https://github.com/faisalman/ua-parser-js
|
5
5
|
*
|
@@ -16,7 +16,7 @@
|
|
16
16
|
/////////////
|
17
17
|
|
18
18
|
|
19
|
-
var LIBVERSION = '0.7.
|
19
|
+
var LIBVERSION = '0.7.26',
|
20
20
|
EMPTY = '',
|
21
21
|
UNKNOWN = '?',
|
22
22
|
FUNC_TYPE = 'function',
|
@@ -35,7 +35,8 @@
|
|
35
35
|
TABLET = 'tablet',
|
36
36
|
SMARTTV = 'smarttv',
|
37
37
|
WEARABLE = 'wearable',
|
38
|
-
EMBEDDED = 'embedded'
|
38
|
+
EMBEDDED = 'embedded',
|
39
|
+
UA_MAX_LENGTH = 255;
|
39
40
|
|
40
41
|
|
41
42
|
///////////
|
@@ -56,11 +57,7 @@
|
|
56
57
|
return mergedRegexes;
|
57
58
|
},
|
58
59
|
has : function (str1, str2) {
|
59
|
-
|
60
|
-
return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;
|
61
|
-
} else {
|
62
|
-
return false;
|
63
|
-
}
|
60
|
+
return typeof str1 === STR_TYPE ? str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1 : false;
|
64
61
|
},
|
65
62
|
lowerize : function (str) {
|
66
63
|
return str.toLowerCase();
|
@@ -68,8 +65,9 @@
|
|
68
65
|
major : function (version) {
|
69
66
|
return typeof(version) === STR_TYPE ? version.replace(/[^\d\.]/g,'').split(".")[0] : undefined;
|
70
67
|
},
|
71
|
-
trim : function (str) {
|
72
|
-
|
68
|
+
trim : function (str, len) {
|
69
|
+
str = str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
|
70
|
+
return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
|
73
71
|
}
|
74
72
|
};
|
75
73
|
|
@@ -160,7 +158,8 @@
|
|
160
158
|
var maps = {
|
161
159
|
|
162
160
|
browser : {
|
163
|
-
|
161
|
+
// Safari < 3.0
|
162
|
+
oldSafari : {
|
164
163
|
version : {
|
165
164
|
'1.0' : '/8',
|
166
165
|
'1.2' : '/1',
|
@@ -171,22 +170,16 @@
|
|
171
170
|
'2.0.4' : '/419',
|
172
171
|
'?' : '/'
|
173
172
|
}
|
174
|
-
}
|
175
|
-
},
|
176
|
-
|
177
|
-
device : {
|
178
|
-
amazon : {
|
179
|
-
model : {
|
180
|
-
'Fire Phone' : ['SD', 'KF']
|
181
|
-
}
|
182
173
|
},
|
183
|
-
|
184
|
-
|
185
|
-
'
|
186
|
-
|
187
|
-
|
188
|
-
'
|
189
|
-
'
|
174
|
+
oldEdge : {
|
175
|
+
version : {
|
176
|
+
'0.1' : '12.',
|
177
|
+
'21' : '13.',
|
178
|
+
'31' : '14.',
|
179
|
+
'39' : '15.',
|
180
|
+
'41' : '16.',
|
181
|
+
'42' : '17.',
|
182
|
+
'44' : '18.'
|
190
183
|
}
|
191
184
|
}
|
192
185
|
},
|
@@ -220,145 +213,108 @@
|
|
220
213
|
|
221
214
|
browser : [[
|
222
215
|
|
216
|
+
/\b(?:crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
|
217
|
+
], [VERSION, [NAME, 'Chrome']], [
|
218
|
+
/(?:edgios|edga|edg)\/([\w\.]+)/i // Microsoft Edge
|
219
|
+
], [VERSION, [NAME, 'Edge']], [
|
220
|
+
/edge\/([\w\.]+)/i // Old Edge (Trident)
|
221
|
+
], [[VERSION, mapper.str, maps.browser.oldEdge.version], [NAME, 'Edge']], [
|
222
|
+
|
223
223
|
// Presto based
|
224
224
|
/(opera\smini)\/([\w\.-]+)/i, // Opera Mini
|
225
|
-
/(opera\s[mobiletab]{3,6}).+version\/([\w\.-]+)/i,
|
225
|
+
/(opera\s[mobiletab]{3,6})\b.+version\/([\w\.-]+)/i, // Opera Mobi/Tablet
|
226
226
|
/(opera).+version\/([\w\.]+)/i, // Opera > 9.80
|
227
227
|
/(opera)[\/\s]+([\w\.]+)/i // Opera < 9.80
|
228
228
|
], [NAME, VERSION], [
|
229
|
-
|
230
|
-
|
231
|
-
]
|
232
|
-
|
233
|
-
/\s(opr)\/([\w\.]+)/i // Opera Webkit
|
234
|
-
], [[NAME, 'Opera'], VERSION], [
|
229
|
+
/opios[\/\s]+([\w\.]+)/i // Opera mini on iphone >= 8.0
|
230
|
+
], [VERSION, [NAME, 'Opera Mini']], [
|
231
|
+
/\sopr\/([\w\.]+)/i // Opera Webkit
|
232
|
+
], [VERSION, [NAME, 'Opera']], [
|
235
233
|
|
236
234
|
// Mixed
|
237
235
|
/(kindle)\/([\w\.]+)/i, // Kindle
|
238
|
-
/(lunascape|maxthon|netfront|jasmine|blazer|instagram)[\/\s]?([\w\.]*)/i,
|
239
|
-
// Lunascape/Maxthon/Netfront/Jasmine/Blazer/Instagram
|
236
|
+
/(lunascape|maxthon|netfront|jasmine|blazer|instagram)[\/\s]?([\w\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Instagram
|
240
237
|
// Trident based
|
241
|
-
/(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i,
|
242
|
-
|
243
|
-
/(bidubrowser|baidubrowser)[\/\s]?([\w\.]+)/i, // Baidu Browser
|
238
|
+
/(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i, // Avant/IEMobile/SlimBrowser
|
239
|
+
/(ba?idubrowser)[\/\s]?([\w\.]+)/i, // Baidu Browser
|
244
240
|
/(?:ms|\()(ie)\s([\w\.]+)/i, // Internet Explorer
|
245
241
|
|
246
242
|
// Webkit/KHTML based
|
247
|
-
/(rekonq)\/([\w\.]*)/i, // Rekonq
|
248
243
|
/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\/([\w\.-]+)/i,
|
249
244
|
// Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
|
250
|
-
/(puffin|brave|whale|qqbrowserlite|qq)\/([\w\.]+)/i
|
245
|
+
/(rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([\w\.]+)/i, // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
|
246
|
+
/(weibo)__([\d\.]+)/i // Weibo
|
251
247
|
], [NAME, VERSION], [
|
252
|
-
|
253
|
-
|
254
|
-
]
|
255
|
-
|
256
|
-
/(
|
257
|
-
], [[NAME, '
|
258
|
-
|
259
|
-
|
260
|
-
]
|
261
|
-
|
262
|
-
/
|
263
|
-
], [[NAME, 'Yandex']
|
264
|
-
|
265
|
-
/(
|
266
|
-
|
267
|
-
|
268
|
-
/
|
269
|
-
], [[NAME, '
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
/
|
275
|
-
], [[NAME, 'Opera
|
276
|
-
|
277
|
-
|
278
|
-
]
|
279
|
-
|
248
|
+
/(?:[\s\/]uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i // UCBrowser
|
249
|
+
], [VERSION, [NAME, 'UCBrowser']], [
|
250
|
+
/(?:windowswechat)?\sqbcore\/([\w\.]+)\b.*(?:windowswechat)?/i // WeChat Desktop for Windows Built-in Browser
|
251
|
+
], [VERSION, [NAME, 'WeChat(Win) Desktop']], [
|
252
|
+
/micromessenger\/([\w\.]+)/i // WeChat
|
253
|
+
], [VERSION, [NAME, 'WeChat']], [
|
254
|
+
/konqueror\/([\w\.]+)/i // Konqueror
|
255
|
+
], [VERSION, [NAME, 'Konqueror']], [
|
256
|
+
/trident.+rv[:\s]([\w\.]{1,9})\b.+like\sgecko/i // IE11
|
257
|
+
], [VERSION, [NAME, 'IE']], [
|
258
|
+
/yabrowser\/([\w\.]+)/i // Yandex
|
259
|
+
], [VERSION, [NAME, 'Yandex']], [
|
260
|
+
/(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser
|
261
|
+
], [[NAME, /(.+)/, '$1 Secure Browser'], VERSION], [
|
262
|
+
/focus\/([\w\.]+)/i // Firefox Focus
|
263
|
+
], [VERSION, [NAME, 'Firefox Focus']], [
|
264
|
+
/opt\/([\w\.]+)/i // Opera Touch
|
265
|
+
], [VERSION, [NAME, 'Opera Touch']], [
|
266
|
+
/coc_coc_browser\/([\w\.]+)/i // Coc Coc Browser
|
267
|
+
], [VERSION, [NAME, 'Coc Coc']], [
|
268
|
+
/dolfin\/([\w\.]+)/i // Dolphin
|
269
|
+
], [VERSION, [NAME, 'Dolphin']], [
|
270
|
+
/coast\/([\w\.]+)/i // Opera Coast
|
271
|
+
], [VERSION, [NAME, 'Opera Coast']],
|
272
|
+
[/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
273
|
+
], [VERSION, [NAME, 'MIUI Browser']], [
|
274
|
+
/fxios\/([\w\.-]+)/i // Firefox for iOS
|
275
|
+
], [VERSION, [NAME, 'Firefox']], [
|
276
|
+
/(qihu|qhbrowser|qihoobrowser|360browser)/i // 360
|
277
|
+
], [[NAME, '360 Browser']], [
|
278
|
+
/(oculus|samsung|sailfish)browser\/([\w\.]+)/i
|
279
|
+
], [[NAME, /(.+)/, '$1 Browser'], VERSION], [ // Oculus/Samsung/Sailfish Browser
|
280
280
|
/(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
|
281
281
|
], [[NAME, /_/g, ' '], VERSION], [
|
282
|
-
|
283
|
-
/((?:windowswechat)? qbcore)\/([\w\.]+).*(?:windowswechat)?/i // WeChat Desktop for Windows Built-in Browser
|
284
|
-
], [[NAME, 'WeChat(Win) Desktop'], VERSION], [
|
285
|
-
|
286
|
-
/(micromessenger)\/([\w\.]+)/i // WeChat
|
287
|
-
], [[NAME, 'WeChat'], VERSION], [
|
288
|
-
|
289
282
|
/m?(qqbrowser|baiduboxapp|2345Explorer)[\/\s]?([\w\.]+)/i // QQBrowser/Baidu App/2345 Browser
|
290
283
|
], [NAME, VERSION], [
|
291
|
-
|
292
|
-
/(MetaSr)[\/\s]?([\w\.]+)/i // SouGouBrowser
|
293
|
-
], [NAME], [
|
294
|
-
|
284
|
+
/(MetaSr)[\/\s]?([\w\.]+)/i, // SouGouBrowser
|
295
285
|
/(LBBROWSER)/i // LieBao Browser
|
296
286
|
], [NAME], [
|
297
287
|
|
298
|
-
|
299
|
-
], [NAME, VERSION], [
|
300
|
-
|
301
|
-
/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser
|
302
|
-
], [VERSION, [NAME, 'MIUI Browser']], [
|
303
|
-
|
288
|
+
// WebView
|
304
289
|
/;fbav\/([\w\.]+);/i // Facebook App for iOS & Android with version
|
305
|
-
], [VERSION, [NAME, 'Facebook']], [
|
306
|
-
|
290
|
+
], [VERSION, [NAME, 'Facebook']], [
|
307
291
|
/FBAN\/FBIOS|FB_IAB\/FB4A/i // Facebook App for iOS & Android without version
|
308
292
|
], [[NAME, 'Facebook']], [
|
309
|
-
|
293
|
+
/\s(electron)\/([\w\.]+)\ssafari/i, // Electron-based App
|
310
294
|
/safari\s(line)\/([\w\.]+)/i, // Line App for iOS
|
311
|
-
|
295
|
+
/\b(line)\/([\w\.]+)\/iab/i // Line App for Android
|
312
296
|
], [NAME, VERSION], [
|
297
|
+
/\bgsa\/([\w\.]+)\s.*safari\//i // Google Search Appliance on iOS
|
298
|
+
], [VERSION, [NAME, 'GSA']], [
|
313
299
|
|
314
300
|
/headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless
|
315
301
|
], [VERSION, [NAME, 'Chrome Headless']], [
|
316
302
|
|
317
303
|
/\swv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
|
318
|
-
], [[NAME,
|
319
|
-
|
320
|
-
/((?:oculus|samsung)browser)\/([\w\.]+)/i
|
321
|
-
], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser
|
304
|
+
], [[NAME, 'Chrome WebView'], VERSION], [
|
322
305
|
|
323
|
-
/droid
|
306
|
+
/droid.+\sversion\/([\w\.]+)\b.+(?:mobile\ssafari|safari)/i // Android Browser
|
324
307
|
], [VERSION, [NAME, 'Android Browser']], [
|
325
308
|
|
326
|
-
/(
|
327
|
-
], [[NAME, 'Coc Coc'], VERSION], [
|
328
|
-
|
329
|
-
/(sailfishbrowser)\/([\w\.]+)/i // Sailfish Browser
|
330
|
-
], [[NAME, 'Sailfish Browser'], VERSION], [
|
331
|
-
|
332
|
-
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i
|
333
|
-
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
309
|
+
/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia
|
334
310
|
], [NAME, VERSION], [
|
335
311
|
|
336
|
-
/(dolfin)\/([\w\.]+)/i // Dolphin
|
337
|
-
], [[NAME, 'Dolphin'], VERSION], [
|
338
|
-
|
339
|
-
/(qihu|qhbrowser|qihoobrowser|360browser)/i // 360
|
340
|
-
], [[NAME, '360 Browser']], [
|
341
|
-
|
342
|
-
/((?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
|
343
|
-
], [[NAME, 'Chrome'], VERSION], [
|
344
|
-
|
345
|
-
/(coast)\/([\w\.]+)/i // Opera Coast
|
346
|
-
], [[NAME, 'Opera Coast'], VERSION], [
|
347
|
-
|
348
|
-
/fxios\/([\w\.-]+)/i // Firefox for iOS
|
349
|
-
], [VERSION, [NAME, 'Firefox']], [
|
350
|
-
|
351
312
|
/version\/([\w\.]+)\s.*mobile\/\w+\s(safari)/i // Mobile Safari
|
352
313
|
], [VERSION, [NAME, 'Mobile Safari']], [
|
353
|
-
|
354
314
|
/version\/([\w\.]+)\s.*(mobile\s?safari|safari)/i // Safari & Safari Mobile
|
355
315
|
], [VERSION, NAME], [
|
356
|
-
|
357
|
-
/webkit.+?(gsa)\/([\w\.]+)\s.*(mobile\s?safari|safari)(\/[\w\.]+)/i // Google Search Appliance on iOS
|
358
|
-
], [[NAME, 'GSA'], VERSION], [
|
359
|
-
|
360
316
|
/webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
|
361
|
-
], [NAME, [VERSION, mapper.str, maps.browser.
|
317
|
+
], [NAME, [VERSION, mapper.str, maps.browser.oldSafari.version]], [
|
362
318
|
|
363
319
|
/(webkit|khtml)\/([\w\.]+)/i
|
364
320
|
], [NAME, VERSION], [
|
@@ -370,7 +326,6 @@
|
|
370
326
|
/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i,
|
371
327
|
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
372
328
|
/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i,
|
373
|
-
|
374
329
|
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
375
330
|
/(firefox)\/([\w\.]+)\s[\w\s\-]+\/[\w\.]+$/i, // Other Firefox-based
|
376
331
|
/(mozilla)\/([\w\.]+)\s.+rv\:.+gecko\/\d+/i, // Mozilla
|
@@ -387,15 +342,21 @@
|
|
387
342
|
|
388
343
|
cpu : [[
|
389
344
|
|
390
|
-
/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i // AMD64
|
345
|
+
/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i // AMD64 (x64)
|
391
346
|
], [[ARCHITECTURE, 'amd64']], [
|
392
347
|
|
393
348
|
/(ia32(?=;))/i // IA32 (quicktime)
|
394
349
|
], [[ARCHITECTURE, util.lowerize]], [
|
395
350
|
|
396
|
-
/((?:i[346]|x)86)[;\)]/i // IA32
|
351
|
+
/((?:i[346]|x)86)[;\)]/i // IA32 (x86)
|
397
352
|
], [[ARCHITECTURE, 'ia32']], [
|
398
353
|
|
354
|
+
/\b(aarch64|armv?8e?l?)\b/i // ARM64
|
355
|
+
], [[ARCHITECTURE, 'arm64']], [
|
356
|
+
|
357
|
+
/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i // ARMHF
|
358
|
+
], [[ARCHITECTURE, 'armhf']], [
|
359
|
+
|
399
360
|
// PocketPC mistakenly identified as PowerPC
|
400
361
|
/windows\s(ce|mobile);\sppc;/i
|
401
362
|
], [[ARCHITECTURE, 'arm']], [
|
@@ -406,281 +367,292 @@
|
|
406
367
|
/(sun4\w)[;\)]/i // SPARC
|
407
368
|
], [[ARCHITECTURE, 'sparc']], [
|
408
369
|
|
409
|
-
/((?:avr32|ia64(?=;))|68k(?=\))
|
370
|
+
/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
|
410
371
|
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
411
372
|
], [[ARCHITECTURE, util.lowerize]]
|
412
373
|
],
|
413
374
|
|
414
375
|
device : [[
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
/(
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
/\s(nook)[\w\s]+build\/(\w+)/i, // Nook
|
430
|
-
/(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak
|
431
|
-
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
432
|
-
|
433
|
-
/(alexa)webm/i,
|
434
|
-
/(kf[A-z]+)(\sbuild\/|\)).+silk\//i // Kindle Fire HD
|
435
|
-
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
436
|
-
/(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i // Fire Phone
|
437
|
-
], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
|
438
|
-
/droid.+aft([\w])(\sbuild\/|\))/i // Fire TV
|
439
|
-
], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
|
440
|
-
|
376
|
+
|
377
|
+
//////////////////////
|
378
|
+
// MOBILES & TABLETS
|
379
|
+
/////////////////////
|
380
|
+
|
381
|
+
// Samsung
|
382
|
+
/\b(sch-i[89]0\d|shw-m380s|sm-p(?:605|610|587)|sm-t\w+|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus\s10)/i,
|
383
|
+
], [MODEL, [VENDOR, 'Samsung'], [TYPE, TABLET]], [
|
384
|
+
/(s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+)/i,
|
385
|
+
/\ssamsung[\s-]([\w-]+)/i,
|
386
|
+
/sec-(sgh\w+)/i
|
387
|
+
], [MODEL, [VENDOR, 'Samsung'], [TYPE, MOBILE]], [
|
388
|
+
|
389
|
+
// Apple
|
441
390
|
/\((ip(?:hone|od)[\s\w]*);/i // iPod/iPhone
|
442
391
|
], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [
|
392
|
+
/\((ipad);[\w\s\),;-]+(apple)/i // iPad
|
393
|
+
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
394
|
+
/applecoremedia\/[\w\.]+\s\((ipad)/i
|
395
|
+
], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [
|
443
396
|
|
444
|
-
|
445
|
-
/(
|
446
|
-
|
447
|
-
|
448
|
-
/(asus)-?(\w+)/i // Asus
|
449
|
-
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
450
|
-
/\(bb10;\s(\w+)/i // BlackBerry 10
|
451
|
-
], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
|
452
|
-
// Asus Tablets
|
453
|
-
/droid.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone|p00c)/i
|
454
|
-
], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [
|
455
|
-
|
456
|
-
/sony\stablet\s[ps]\sbuild\//i, // Sony
|
457
|
-
/(?:sony)?sgp\w+(?:\sbuild\/|\))/i
|
458
|
-
], [[MODEL, 'Xperia Tablet'], [VENDOR, 'Sony'], [TYPE, TABLET]], [
|
459
|
-
/droid.+\s([c-g]\d{4}|so[-l]\w+|xq-a\w[4-7][12])(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
460
|
-
], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
461
|
-
|
462
|
-
/\s(ouya)\s/i, // Ouya
|
463
|
-
/(nintendo)\s([wids3utch]+)/i // Nintendo
|
464
|
-
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
465
|
-
|
466
|
-
/droid.+;\s(shield)\sbuild/i // Nvidia
|
467
|
-
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
468
|
-
|
469
|
-
/(playstation\s[345portablevi]+)/i // Playstation
|
470
|
-
], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [
|
471
|
-
|
472
|
-
/(sprint\s(\w+))/i // Sprint Phones
|
473
|
-
], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [
|
474
|
-
|
475
|
-
/(htc)[;_\s-]{1,2}([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC
|
476
|
-
/(zte)-(\w*)/i, // ZTE
|
477
|
-
/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i
|
478
|
-
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
479
|
-
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
480
|
-
|
481
|
-
/(nexus\s9)/i // HTC Nexus 9
|
482
|
-
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
|
483
|
-
|
484
|
-
/d\/huawei([\w\s-]+)[;\)]/i, // Huawei
|
485
|
-
/droid.+\s(nexus\s6p|vog-[at]?l\d\d|ane-[at]?l[x\d]\d|eml-a?l\d\da?|lya-[at]?l\d[\dc]|clt-a?l\d\di?)/i,
|
486
|
-
/droid.+\s((?:A(?:GS2?|KA|LP|N[AE]|QM|RE|SK|TH)|B(?:A(?:C|H2)|G2|KL|LA|MH|Z[AKT])|C(?:AZ|DY|LT|OL|[MOR]R)|DUK|E(?:BG|DI|L[ES]|ML|V[AR])|FRD|G(?:LK|RA)|H(?:D[LN]|MA|LK|RY|WI)|INE|J(?:DN2|MM|NY|SN)|K(?:NT|OB|SA)|L(?:IO|LD|ON|[RY]A)|M(?:AR|ED|[HL]A|ON|RX|T7)|N(?:EO|TS|XT)|OXF|P(?:AR|CT|IC|LK|RA)|R(?:IO|VL)|S(?:C[ML]|EA|HT|PN|TF)|T(?:A[HS]|NY)|V(?:[CI]E|KY|OG|RD)|W(?:AS|LZ)|Y(?:635|AL))-[ATU][LN][01259][019])[;\)\s]/i
|
487
|
-
|
397
|
+
// Huawei
|
398
|
+
/d\/huawei([\w\s-]+)[;\)]/i,
|
399
|
+
/\b(nexus\s6p|vog-[at]?l\d\d|ane-[at]?l[x\d]\d|eml-a?l\d\da?|lya-[at]?l\d[\dc]|clt-a?l\d\di?|ele-l\d\d)/i,
|
400
|
+
/\b(\w{2,4}-[atu][ln][01259][019])[;\)\s]/i
|
488
401
|
], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [
|
489
|
-
|
490
|
-
/droid.+(bah2?-a?[lw]\d{2})/i // Huawei MediaPad
|
402
|
+
/\b(bah2?-a?[lw]\d{2})/i // Huawei MediaPad
|
491
403
|
], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [
|
492
404
|
|
493
|
-
|
494
|
-
],
|
405
|
+
// Xiaomi
|
406
|
+
/\b(poco[\s\w]+)(?:\sbuild|\))/i, // Xiaomi POCO
|
407
|
+
/\b;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
408
|
+
/\b(hm[\s\-_]?note?[\s_]?(?:\d\w)?)\sbuild/i, // Xiaomi Hongmi
|
409
|
+
/\b(redmi[\s\-_]?(?:note|k)?[\w\s_]+)(?:\sbuild|\))/i, // Xiaomi Redmi
|
410
|
+
/\b(mi[\s\-_]?(?:a\d|one|one[\s_]plus|note lte)?[\s_]?(?:\d?\w?)[\s_]?(?:plus)?)\sbuild/i // Xiaomi Mi
|
411
|
+
], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [
|
412
|
+
/\b(mi[\s\-_]?(?:pad)(?:[\w\s_]+))(?:\sbuild|\))/i // Mi Pad tablets
|
413
|
+
],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [
|
495
414
|
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
], [
|
415
|
+
// OPPO
|
416
|
+
/;\s(\w+)\sbuild.+\soppo/i,
|
417
|
+
/\s(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007)\b/i
|
418
|
+
], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [
|
419
|
+
|
420
|
+
// Vivo
|
421
|
+
/\svivo\s(\w+)(?:\sbuild|\))/i,
|
422
|
+
/\s(v[12]\d{3}\w?[at])(?:\sbuild|;)/i
|
423
|
+
], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
|
424
|
+
|
425
|
+
// Realme
|
426
|
+
/\s(rmx[12]\d{3})(?:\sbuild|;)/i
|
427
|
+
], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [
|
500
428
|
|
501
|
-
|
502
|
-
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i,
|
429
|
+
// Motorola
|
430
|
+
/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)\b[\w\s]+build\//i,
|
503
431
|
/\smot[\s-](\w*)/i,
|
504
432
|
/(moto[\s\w\(\)]+(?=\sbuild|\)))/i,
|
505
|
-
/(
|
433
|
+
/(xt\d{3,4})\sbuild\//i,
|
506
434
|
/(nexus\s6)/i
|
507
435
|
], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [
|
508
|
-
|
436
|
+
/\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i
|
509
437
|
], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [
|
510
438
|
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
/hbbtv.+maple;(\d+)/i
|
515
|
-
], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [
|
516
|
-
|
517
|
-
/\(dtv[\);].+(aquos)/i // Sharp
|
518
|
-
], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [
|
519
|
-
|
520
|
-
/droid.+((sch-i[89]0\d|shw-m380s|SM-P605|SM-P610|SM-P587|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i,
|
521
|
-
/((SM-T\w+))/i
|
522
|
-
], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung
|
523
|
-
/smart-tv.+(samsung)/i
|
524
|
-
], [VENDOR, [TYPE, SMARTTV], MODEL], [
|
525
|
-
/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i,
|
526
|
-
/\s(sam)(?:sung)[\s-]([\w-]+)/i,
|
527
|
-
/sec-((sgh\w+))/i
|
528
|
-
], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [
|
529
|
-
|
530
|
-
/sie-(\w*)/i // Siemens
|
531
|
-
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
532
|
-
|
533
|
-
/(maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia
|
534
|
-
/(nokia)[\s_-]?([\w\.-]*)/i
|
535
|
-
], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
|
536
|
-
|
537
|
-
/droid[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i // Acer
|
538
|
-
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
539
|
-
|
540
|
-
/droid.+([vl]k\-?\d{3})\s+build/i // LG Tablet
|
439
|
+
// LG
|
440
|
+
/((?=lg)?[vl]k\-?\d{3})\s+build|\s3\.[\s\w;-]{10}lg?-([06cv9]{3,4})/i
|
541
441
|
], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [
|
542
|
-
/
|
543
|
-
|
544
|
-
/
|
545
|
-
/lg\snetcast\.tv-201\d/i
|
546
|
-
], [[VENDOR, 'LG'], MODEL, [TYPE, SMARTTV]], [
|
547
|
-
/(nexus\s[45])/i, // LG
|
548
|
-
/lg[e;\s\/-]+(\w*)/i,
|
549
|
-
/droid.+lg(\-?[\d\w]+)\s+build/i
|
442
|
+
/(nexus\s[45])/i,
|
443
|
+
/lg[e;\s\/-]+((?!browser|netcast)\w+)/i,
|
444
|
+
/\blg(\-?[\d\w]+)\s+build/i
|
550
445
|
], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [
|
551
446
|
|
552
|
-
|
553
|
-
|
554
|
-
/
|
447
|
+
// Lenovo
|
448
|
+
/(ideatab[\w\-\s]+)/i,
|
449
|
+
/lenovo\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+)|[\w-]+)/i // Lenovo tablets
|
555
450
|
], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [
|
556
|
-
/(lenovo)[_\s-]?([\w-]+)/i
|
557
|
-
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
558
451
|
|
559
|
-
|
560
|
-
|
452
|
+
// Nokia
|
453
|
+
/(?:maemo|nokia).*(n900|lumia\s\d+)/i,
|
454
|
+
/nokia[\s_-]?([\w\.-]*)/i
|
455
|
+
], [MODEL, [VENDOR, 'Nokia'], [TYPE, MOBILE]], [
|
561
456
|
|
562
|
-
|
563
|
-
]
|
457
|
+
// Google
|
458
|
+
/droid.+;\s(pixel\sc)[\s)]/i // Google Pixel C
|
459
|
+
], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [
|
460
|
+
/droid.+;\s(pixel[\s\daxl]{0,6})(?:\sbuild|\))/i // Google Pixel
|
461
|
+
], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [
|
564
462
|
|
565
|
-
|
566
|
-
]
|
463
|
+
// Sony
|
464
|
+
/droid.+\s([c-g]\d{4}|so[-l]\w+|xq-a\w[4-7][12])(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
465
|
+
], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [
|
466
|
+
/sony\stablet\s[ps]\sbuild\//i,
|
467
|
+
/(?:sony)?sgp\w+(?:\sbuild\/|\))/i
|
468
|
+
], [[MODEL, 'Xperia Tablet'], [VENDOR, 'Sony'], [TYPE, TABLET]], [
|
567
469
|
|
568
|
-
|
569
|
-
|
470
|
+
// OnePlus
|
471
|
+
/\s(kb2005|in20[12]5|be20[12][59])\b/i,
|
472
|
+
/\ba000(1)\s+build/i, // OnePlus
|
473
|
+
/\boneplus\s(a\d{4})[\s)]/i
|
474
|
+
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
570
475
|
|
571
|
-
|
572
|
-
|
476
|
+
// Amazon
|
477
|
+
/(alexa)webm/i,
|
478
|
+
/(kf[a-z]+)(\sbuild\/|\)).+silk\//i // Kindle Fire HD
|
479
|
+
], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [
|
480
|
+
/(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i // Fire Phone
|
481
|
+
], [[MODEL, 'Fire Phone'], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [
|
573
482
|
|
574
|
-
|
575
|
-
|
483
|
+
// BlackBerry
|
484
|
+
/\((playbook);[\w\s\),;-]+(rim)/i // BlackBerry PlayBook
|
485
|
+
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
486
|
+
/\(bb10;\s(\w+)/i // BlackBerry 10
|
487
|
+
], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [
|
488
|
+
|
489
|
+
// Asus
|
490
|
+
/\b(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus\s7|padfone|p00c)/i
|
491
|
+
], [MODEL, [VENDOR, 'ASUS'], [TYPE, TABLET]], [
|
492
|
+
/\s(z[es]6[027][01][km][ls]|zenfone\s\d\w?)\b/i
|
493
|
+
], [MODEL, [VENDOR, 'ASUS'], [TYPE, MOBILE]], [
|
576
494
|
|
577
|
-
|
578
|
-
|
495
|
+
// HTC
|
496
|
+
/(nexus\s9)/i // HTC Nexus 9
|
497
|
+
], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
|
498
|
+
/(htc)[;_\s-]{1,2}([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC
|
579
499
|
|
580
|
-
|
581
|
-
/
|
582
|
-
/
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
]
|
587
|
-
|
588
|
-
|
589
|
-
|
500
|
+
// ZTE
|
501
|
+
/(zte)-(\w*)/i,
|
502
|
+
/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
503
|
+
], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
|
504
|
+
|
505
|
+
// Acer
|
506
|
+
/droid[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i
|
507
|
+
], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
|
508
|
+
|
509
|
+
// Meizu
|
510
|
+
/droid.+;\s(m[1-5]\snote)\sbuild/i,
|
511
|
+
/\bmz-([\w-]{2,})/i
|
590
512
|
], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
|
591
|
-
/(mz)-([\w-]{2,})/i
|
592
|
-
], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [
|
593
513
|
|
594
|
-
|
595
|
-
/
|
596
|
-
|
514
|
+
// MIXED
|
515
|
+
/(blackberry)[\s-]?(\w+)/i, // BlackBerry
|
516
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i,
|
517
|
+
// BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
|
518
|
+
/(hp)\s([\w\s]+\w)/i, // HP iPAQ
|
519
|
+
/(asus)-?(\w+)/i, // Asus
|
520
|
+
/(microsoft);\s(lumia[\s\w]+)/i, // Microsoft Lumia
|
521
|
+
/(lenovo)[_\s-]?([\w-]+)/i, // Lenovo
|
522
|
+
/linux;.+(jolla);/i, // Jolla
|
523
|
+
/droid.+;\s(oppo)\s?([\w\s]+)\sbuild/i // OPPO
|
524
|
+
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
597
525
|
|
598
|
-
/
|
599
|
-
|
526
|
+
/(archos)\s(gamepad2?)/i, // Archos
|
527
|
+
/(hp).+(touchpad)/i, // HP TouchPad
|
528
|
+
/(hp).+(tablet)/i, // HP Tablet
|
529
|
+
/(kindle)\/([\w\.]+)/i, // Kindle
|
530
|
+
/\s(nook)[\w\s]+build\/(\w+)/i, // Nook
|
531
|
+
/(dell)\s(strea[kpr\s\d]*[\dko])/i, // Dell Streak
|
532
|
+
/[;\/]\s?(le[\s\-]+pan)[\s\-]+(\w{1,9})\sbuild/i, // Le Pan Tablets
|
533
|
+
/[;\/]\s?(trinity)[\-\s]*(t\d{3})\sbuild/i, // Trinity Tablets
|
534
|
+
/\b(gigaset)[\s\-]+(q\w{1,9})\sbuild/i, // Gigaset Tablets
|
535
|
+
/\b(vodafone)\s([\w\s]+)(?:\)|\sbuild)/i // Vodafone
|
536
|
+
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
600
537
|
|
601
|
-
|
538
|
+
/\s(surface\sduo)\s/i // Surface Duo
|
539
|
+
], [MODEL, [VENDOR, 'Microsoft'], [TYPE, TABLET]], [
|
540
|
+
/\s(u304aa)\sbuild/i // AT&T
|
541
|
+
], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [
|
542
|
+
/sie-(\w*)/i // Siemens
|
543
|
+
], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [
|
544
|
+
/[;\/]\s?(rct\w+)\sbuild/i // RCA Tablets
|
545
|
+
], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [
|
546
|
+
/[;\/\s](venue[\d\s]{2,7})\sbuild/i // Dell Venue Tablets
|
602
547
|
], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [
|
603
|
-
|
604
|
-
/droid.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i // Verizon Tablet
|
548
|
+
/[;\/]\s?(q(?:mv|ta)\w+)\sbuild/i // Verizon Tablet
|
605
549
|
], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
/droid.+[;\/]\s+(TM\d{3}.*\b)\s+build/i // Barnes & Noble Tablet
|
550
|
+
/[;\/]\s(?:barnes[&\s]+noble\s|bn[rt])([\w\s\+]*)\sbuild/i // Barnes & Noble Tablet
|
551
|
+
], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [
|
552
|
+
/[;\/]\s(tm\d{3}\w+)\sbuild/i
|
611
553
|
], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [
|
612
|
-
|
613
|
-
/droid.+;\s(k88)\sbuild/i // ZTE K Series Tablet
|
554
|
+
/;\s(k88)\sbuild/i // ZTE K Series Tablet
|
614
555
|
], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [
|
615
|
-
|
616
|
-
/droid.+;\s(nx\d{3}j)\sbuild/i // ZTE Nubia
|
556
|
+
/;\s(nx\d{3}j)\sbuild/i // ZTE Nubia
|
617
557
|
], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [
|
618
|
-
|
619
|
-
/droid.+[;\/]\s*(gen\d{3})\s+build.*49h/i // Swiss GEN Mobile
|
558
|
+
/[;\/]\s?(gen\d{3})\sbuild.*49h/i // Swiss GEN Mobile
|
620
559
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [
|
621
|
-
|
622
|
-
/droid.+[;\/]\s*(zur\d{3})\s+build/i // Swiss ZUR Tablet
|
560
|
+
/[;\/]\s?(zur\d{3})\sbuild/i // Swiss ZUR Tablet
|
623
561
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
624
|
-
|
625
|
-
/droid.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i // Zeki Tablets
|
562
|
+
/[;\/]\s?((zeki)?tb.*\b)\sbuild/i // Zeki Tablets
|
626
563
|
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
627
|
-
|
628
|
-
/
|
629
|
-
/droid.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i // Dragon Touch Tablet
|
564
|
+
/[;\/]\s([yr]\d{2})\sbuild/i,
|
565
|
+
/[;\/]\s(dragon[\-\s]+touch\s|dt)(\w{5})\sbuild/i // Dragon Touch Tablet
|
630
566
|
], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [
|
631
|
-
|
632
|
-
/droid.+[;\/]\s*(NS-?\w{0,9})\sbuild/i // Insignia Tablets
|
567
|
+
/[;\/]\s?(ns-?\w{0,9})\sbuild/i // Insignia Tablets
|
633
568
|
], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [
|
634
|
-
|
635
|
-
/droid.+[;\/]\s*((NXA|Next)-?\w{0,9})\s+build/i // NextBook Tablets
|
569
|
+
/[;\/]\s?((nxa|Next)-?\w{0,9})\sbuild/i // NextBook Tablets
|
636
570
|
], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [
|
637
|
-
|
638
|
-
/droid.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i
|
571
|
+
/[;\/]\s?(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05]))\sbuild/i
|
639
572
|
], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones
|
640
|
-
|
641
|
-
/droid.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i // LvTel Phones
|
573
|
+
/[;\/]\s?(lvtel\-)?(v1[12])\sbuild/i // LvTel Phones
|
642
574
|
], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [
|
643
|
-
|
644
|
-
/droid.+;\s(PH-1)\s/i
|
575
|
+
/;\s(ph-1)\s/i
|
645
576
|
], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1
|
646
|
-
|
647
|
-
/droid.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i // Envizen Tablets
|
577
|
+
/[;\/]\s?(v(100md|700na|7011|917g).*\b)\sbuild/i // Envizen Tablets
|
648
578
|
], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [
|
579
|
+
/[;\/]\s?(trio[\s\w\-\.]+)\sbuild/i // MachSpeed Tablets
|
580
|
+
], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [
|
581
|
+
/[;\/]\s?tu_(1491)\sbuild/i // Rotor Tablets
|
582
|
+
], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [
|
583
|
+
/(shield[\w\s]+)\sbuild/i // Nvidia Shield Tablets
|
584
|
+
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [
|
585
|
+
/(sprint)\s(\w+)/i // Sprint Phones
|
586
|
+
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
587
|
+
/(kin\.[onetw]{3})/i // Microsoft Kin
|
588
|
+
], [[MODEL, /\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [
|
589
|
+
/droid\s[\d\.]+;\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i // Zebra
|
590
|
+
], [MODEL, [VENDOR, 'Zebra'], [TYPE, TABLET]], [
|
591
|
+
/droid\s[\d\.]+;\s(ec30|ps20|tc[2-8]\d[kx])\)/i
|
592
|
+
], [MODEL, [VENDOR, 'Zebra'], [TYPE, MOBILE]], [
|
649
593
|
|
650
|
-
|
651
|
-
|
594
|
+
///////////////////
|
595
|
+
// CONSOLES
|
596
|
+
///////////////////
|
652
597
|
|
653
|
-
|
654
|
-
|
598
|
+
/\s(ouya)\s/i, // Ouya
|
599
|
+
/(nintendo)\s([wids3utch]+)/i // Nintendo
|
600
|
+
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
601
|
+
/droid.+;\s(shield)\sbuild/i // Nvidia
|
602
|
+
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
603
|
+
/(playstation\s[345portablevi]+)/i // Playstation
|
604
|
+
], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [
|
605
|
+
/[\s\(;](xbox(?:\sone)?(?!;\sxbox))[\s\);]/i // Microsoft Xbox
|
606
|
+
], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [
|
655
607
|
|
656
|
-
|
657
|
-
|
608
|
+
///////////////////
|
609
|
+
// SMARTTVS
|
610
|
+
///////////////////
|
658
611
|
|
659
|
-
/
|
660
|
-
], [
|
612
|
+
/smart-tv.+(samsung)/i // Samsung
|
613
|
+
], [VENDOR, [TYPE, SMARTTV], MODEL], [
|
614
|
+
/hbbtv.+maple;(\d+)/i
|
615
|
+
], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [
|
616
|
+
/linux;\snetcast.+smarttv/i, // LG SmartTV
|
617
|
+
/lg\snetcast\.tv-201\d/i
|
618
|
+
], [[VENDOR, 'LG'], MODEL, [TYPE, SMARTTV]], [
|
619
|
+
/(apple)\s?tv/i // Apple TV
|
620
|
+
], [VENDOR, [MODEL, 'Apple TV'], [TYPE, SMARTTV]], [
|
621
|
+
/crkey/i // Google Chromecast
|
622
|
+
], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [
|
623
|
+
/droid.+aft([\w])(\sbuild\/|\))/i // Fire TV
|
624
|
+
], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [
|
625
|
+
/\(dtv[\);].+(aquos)/i // Sharp
|
626
|
+
], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [
|
627
|
+
/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i // HbbTV devices
|
628
|
+
], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [
|
629
|
+
/[\s\/\(](android\s|smart[-\s]?|opera\s)tv[;\)\s]/i // SmartTV from Unidentified Vendors
|
630
|
+
], [[TYPE, SMARTTV]], [
|
661
631
|
|
662
|
-
|
663
|
-
//
|
632
|
+
///////////////////
|
633
|
+
// WEARABLES
|
634
|
+
///////////////////
|
664
635
|
|
665
|
-
/
|
666
|
-
], [VENDOR, MODEL, [TYPE,
|
636
|
+
/((pebble))app\/[\d\.]+\s/i // Pebble
|
637
|
+
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
638
|
+
/droid.+;\s(glass)\s\d/i // Google Glass
|
639
|
+
], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [
|
640
|
+
/droid\s[\d\.]+;\s(wt63?0{2,3})\)/i
|
641
|
+
], [MODEL, [VENDOR, 'Zebra'], [TYPE, WEARABLE]], [
|
667
642
|
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
643
|
+
////////////////////
|
644
|
+
// MIXED (GENERIC)
|
645
|
+
///////////////////
|
646
|
+
|
647
|
+
/droid .+?; ([^;]+?)(?: build|\) applewebkit).+? mobile safari/i // Android Phones from Unidentified Vendors
|
672
648
|
], [MODEL, [TYPE, MOBILE]], [
|
673
|
-
|
674
|
-
/droid .+?;\s([^;]+?)(?: build|\) applewebkit).+?(?! mobile) safari/i
|
649
|
+
/droid .+?;\s([^;]+?)(?: build|\) applewebkit).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors
|
675
650
|
], [MODEL, [TYPE, TABLET]], [
|
676
|
-
|
677
651
|
/\s(tablet|tab)[;\/]/i, // Unidentifiable Tablet
|
678
652
|
/\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile
|
679
|
-
], [[TYPE, util.lowerize]
|
680
|
-
|
653
|
+
], [[TYPE, util.lowerize]], [
|
681
654
|
/(android[\w\.\s\-]{0,9});.+build/i // Generic Android Device
|
682
655
|
], [MODEL, [VENDOR, 'Generic']], [
|
683
|
-
|
684
656
|
/(phone)/i
|
685
657
|
], [[TYPE, MOBILE]]
|
686
658
|
],
|
@@ -700,39 +672,46 @@
|
|
700
672
|
/(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
|
701
673
|
], [NAME, VERSION], [
|
702
674
|
|
703
|
-
/rv\:([\w\.]{1,9}).+(gecko)/i
|
675
|
+
/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
|
704
676
|
], [VERSION, NAME]
|
705
677
|
],
|
706
678
|
|
707
679
|
os : [[
|
708
680
|
|
709
|
-
//
|
710
|
-
/(xbox);\s+xbox\s([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)
|
711
|
-
|
712
|
-
// Windows based
|
681
|
+
// Windows
|
713
682
|
/microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes)
|
714
683
|
], [NAME, VERSION], [
|
715
684
|
/(windows)\snt\s6\.2;\s(arm)/i, // Windows RT
|
716
685
|
/(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i, // Windows Phone
|
717
|
-
/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
|
686
|
+
/(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)(?!.+xbox)/i
|
718
687
|
], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
|
719
688
|
/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
|
720
689
|
], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [
|
721
690
|
|
722
|
-
//
|
723
|
-
|
724
|
-
|
725
|
-
/
|
726
|
-
/(
|
727
|
-
/(
|
691
|
+
// iOS/macOS
|
692
|
+
/ip[honead]{2,4}\b(?:.*os\s([\w]+)\slike\smac|;\sopera)/i, // iOS
|
693
|
+
/cfnetwork\/.+darwin/i
|
694
|
+
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
695
|
+
/(mac\sos\sx)\s?([\w\s\.]*)/i,
|
696
|
+
/(macintosh|mac(?=_powerpc)\s)(?!.+haiku)/i // Mac OS
|
697
|
+
], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
|
698
|
+
|
699
|
+
// Mobile OSes
|
700
|
+
/(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i,
|
728
701
|
// Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS
|
702
|
+
/(blackberry)\w*\/([\w\.]*)/i, // Blackberry
|
703
|
+
/(tizen|kaios)[\/\s]([\w\.]+)/i // Tizen/KaiOS
|
729
704
|
], [NAME, VERSION], [
|
730
|
-
|
731
|
-
], [[NAME, '
|
705
|
+
/\(bb(10);/i // BlackBerry 10
|
706
|
+
], [VERSION, [NAME, 'BlackBerry']], [
|
707
|
+
/(?:symbian\s?os|symbos|s60(?=;)|series60)[\/\s-]?([\w\.]*)/i // Symbian
|
708
|
+
], [VERSION, [NAME, 'Symbian']], [
|
732
709
|
/\((series40);/i // Series 40
|
733
710
|
], [NAME], [
|
734
711
|
/mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS
|
735
|
-
], [[NAME, 'Firefox OS']
|
712
|
+
], [[NAME, 'Firefox OS']], [
|
713
|
+
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i // WebOS
|
714
|
+
], [VERSION, [NAME, 'webOS']], [
|
736
715
|
|
737
716
|
// Google Chromecast
|
738
717
|
/crkey\/([\d\.]+)/i // Google Chromecast
|
@@ -740,11 +719,12 @@
|
|
740
719
|
|
741
720
|
// Console
|
742
721
|
/(nintendo|playstation)\s([wids345portablevuch]+)/i, // Nintendo/Playstation
|
722
|
+
/(xbox);\s+xbox\s([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)
|
743
723
|
|
744
724
|
// GNU/Linux based
|
745
|
-
/(mint)[\/\s\(]?(\w*)/i,
|
725
|
+
/(mint)[\/\s\(\)]?(\w*)/i, // Mint
|
746
726
|
/(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux
|
747
|
-
/(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\
|
727
|
+
/(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\sgnu\/linux)?(?:\slinux)?[\/\s-]?(?!chrom|package)([\w\.-]*)/i,
|
748
728
|
// Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
|
749
729
|
// Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus
|
750
730
|
/(hurd|linux)\s?([\w\.]*)/i, // Hurd/Linux
|
@@ -759,20 +739,12 @@
|
|
759
739
|
], [[NAME, 'Solaris'], VERSION], [
|
760
740
|
|
761
741
|
// BSD based
|
762
|
-
/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
|
742
|
+
/\s([frentopc-]{0,4}bsd|dragonfly)\s?(?!amd|[ix346]{1,2}86)([\w\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
|
763
743
|
], [NAME, VERSION],[
|
764
744
|
|
765
745
|
/(haiku)\s(\w+)/i // Haiku
|
766
746
|
], [NAME, VERSION],[
|
767
747
|
|
768
|
-
/cfnetwork\/.+darwin/i,
|
769
|
-
/ip[honead]{2,4}(?:.*os\s([\w]+)\slike\smac|;\sopera)/i // iOS
|
770
|
-
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
771
|
-
|
772
|
-
/(mac\sos\sx)\s?([\w\s\.]*)/i,
|
773
|
-
/(macintosh|mac(?=_powerpc)\s)/i // Mac OS
|
774
|
-
], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [
|
775
|
-
|
776
748
|
// Other
|
777
749
|
/((?:open)?solaris)[\/\s-]?([\w\.]*)/i, // Solaris
|
778
750
|
/(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, // AIX
|
@@ -787,45 +759,45 @@
|
|
787
759
|
/////////////////
|
788
760
|
// Constructor
|
789
761
|
////////////////
|
790
|
-
var UAParser = function (
|
762
|
+
var UAParser = function (ua, extensions) {
|
791
763
|
|
792
|
-
if (typeof
|
793
|
-
extensions =
|
794
|
-
|
764
|
+
if (typeof ua === 'object') {
|
765
|
+
extensions = ua;
|
766
|
+
ua = undefined;
|
795
767
|
}
|
796
|
-
|
768
|
+
|
797
769
|
if (!(this instanceof UAParser)) {
|
798
|
-
return new UAParser(
|
770
|
+
return new UAParser(ua, extensions).getResult();
|
799
771
|
}
|
800
|
-
|
801
|
-
var
|
802
|
-
var
|
772
|
+
|
773
|
+
var _ua = ua || ((typeof window !== 'undefined' && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
|
774
|
+
var _rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
|
803
775
|
|
804
776
|
this.getBrowser = function () {
|
805
|
-
var
|
806
|
-
mapper.rgx.call(
|
807
|
-
|
808
|
-
return
|
777
|
+
var _browser = { name: undefined, version: undefined };
|
778
|
+
mapper.rgx.call(_browser, _ua, _rgxmap.browser);
|
779
|
+
_browser.major = util.major(_browser.version); // deprecated
|
780
|
+
return _browser;
|
809
781
|
};
|
810
782
|
this.getCPU = function () {
|
811
|
-
var
|
812
|
-
mapper.rgx.call(
|
813
|
-
return
|
783
|
+
var _cpu = { architecture: undefined };
|
784
|
+
mapper.rgx.call(_cpu, _ua, _rgxmap.cpu);
|
785
|
+
return _cpu;
|
814
786
|
};
|
815
787
|
this.getDevice = function () {
|
816
|
-
var
|
817
|
-
mapper.rgx.call(
|
818
|
-
return
|
788
|
+
var _device = { vendor: undefined, model: undefined, type: undefined };
|
789
|
+
mapper.rgx.call(_device, _ua, _rgxmap.device);
|
790
|
+
return _device;
|
819
791
|
};
|
820
792
|
this.getEngine = function () {
|
821
|
-
var
|
822
|
-
mapper.rgx.call(
|
823
|
-
return
|
793
|
+
var _engine = { name: undefined, version: undefined };
|
794
|
+
mapper.rgx.call(_engine, _ua, _rgxmap.engine);
|
795
|
+
return _engine;
|
824
796
|
};
|
825
797
|
this.getOS = function () {
|
826
|
-
var
|
827
|
-
mapper.rgx.call(
|
828
|
-
return
|
798
|
+
var _os = { name: undefined, version: undefined };
|
799
|
+
mapper.rgx.call(_os, _ua, _rgxmap.os);
|
800
|
+
return _os;
|
829
801
|
};
|
830
802
|
this.getResult = function () {
|
831
803
|
return {
|
@@ -838,12 +810,13 @@
|
|
838
810
|
};
|
839
811
|
};
|
840
812
|
this.getUA = function () {
|
841
|
-
return
|
813
|
+
return _ua;
|
842
814
|
};
|
843
|
-
this.setUA = function (
|
844
|
-
|
815
|
+
this.setUA = function (ua) {
|
816
|
+
_ua = ua.length > UA_MAX_LENGTH ? util.trim(ua, UA_MAX_LENGTH) : ua;
|
845
817
|
return this;
|
846
818
|
};
|
819
|
+
this.setUA(_ua);
|
847
820
|
return this;
|
848
821
|
};
|
849
822
|
|