@bigbinary/neeto-molecules 4.1.42 → 4.1.44
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.
- package/dist/BrowserSupport.js +1 -1
- package/dist/Builder.js +4 -3
- package/dist/Builder.js.map +1 -1
- package/dist/CalendarView.js +2 -2
- package/dist/{Columns-6JwGF3TU.js → Columns-aTgHNcVY.js} +12 -10
- package/dist/Columns-aTgHNcVY.js.map +1 -0
- package/dist/Columns.js +2 -2
- package/dist/DownloadMobileAppCallout.js +1 -1
- package/dist/ErrorPage.js +3 -3
- package/dist/ErrorPage.js.map +1 -1
- package/dist/FloatingActionMenu.js +3 -3
- package/dist/FloatingActionMenu.js.map +1 -1
- package/dist/KeyboardShortcuts.js +2 -2
- package/dist/OptionFields.js +1 -0
- package/dist/OptionFields.js.map +1 -1
- package/dist/ProductEmbed.js +15 -15
- package/dist/ProductEmbed.js.map +1 -1
- package/dist/ShareViaLink.js +446 -179
- package/dist/ShareViaLink.js.map +1 -1
- package/dist/Sidebar.js +1 -1
- package/dist/StickyRibbonsContainer.js +3 -3
- package/dist/StickyRibbonsContainer.js.map +1 -1
- package/dist/SubHeader.js +2 -2
- package/dist/Taxonomy.js +2 -2
- package/dist/cjs/BrowserSupport.js +1 -1
- package/dist/cjs/Builder.js +4 -3
- package/dist/cjs/Builder.js.map +1 -1
- package/dist/cjs/CalendarView.js +2 -2
- package/dist/cjs/{Columns-7xltEL2z.js → Columns-C8ECmXph.js} +12 -10
- package/dist/cjs/Columns-C8ECmXph.js.map +1 -0
- package/dist/cjs/Columns.js +2 -2
- package/dist/cjs/DownloadMobileAppCallout.js +1 -1
- package/dist/cjs/ErrorPage.js +2 -2
- package/dist/cjs/ErrorPage.js.map +1 -1
- package/dist/cjs/FloatingActionMenu.js +3 -3
- package/dist/cjs/FloatingActionMenu.js.map +1 -1
- package/dist/cjs/KeyboardShortcuts.js +2 -2
- package/dist/cjs/OptionFields.js +1 -0
- package/dist/cjs/OptionFields.js.map +1 -1
- package/dist/cjs/ProductEmbed.js +14 -14
- package/dist/cjs/ProductEmbed.js.map +1 -1
- package/dist/cjs/ShareViaLink.js +446 -179
- package/dist/cjs/ShareViaLink.js.map +1 -1
- package/dist/cjs/Sidebar.js +1 -1
- package/dist/cjs/StickyRibbonsContainer.js +2 -2
- package/dist/cjs/StickyRibbonsContainer.js.map +1 -1
- package/dist/cjs/SubHeader.js +2 -2
- package/dist/cjs/Taxonomy.js +2 -2
- package/dist/cjs/{ua-parser-E0eEtHJZ.js → ua-parser-DgQ3nYoO.js} +327 -306
- package/dist/cjs/ua-parser-DgQ3nYoO.js.map +1 -0
- package/dist/cjs/{useKeyboardShortcutsPaneState-YnXpWOcs.js → useKeyboardShortcutsPaneState-BrgdLb9F.js} +3 -3
- package/dist/cjs/{useKeyboardShortcutsPaneState-YnXpWOcs.js.map → useKeyboardShortcutsPaneState-BrgdLb9F.js.map} +1 -1
- package/dist/{ua-parser-rRwDJPFB.js → ua-parser-OzUiuIwt.js} +327 -306
- package/dist/ua-parser-OzUiuIwt.js.map +1 -0
- package/dist/{useKeyboardShortcutsPaneState-C_eLceJQ.js → useKeyboardShortcutsPaneState-Ckzn5mVZ.js} +4 -4
- package/dist/{useKeyboardShortcutsPaneState-C_eLceJQ.js.map → useKeyboardShortcutsPaneState-Ckzn5mVZ.js.map} +1 -1
- package/package.json +57 -57
- package/dist/Columns-6JwGF3TU.js.map +0 -1
- package/dist/cjs/Columns-7xltEL2z.js.map +0 -1
- package/dist/cjs/ua-parser-E0eEtHJZ.js.map +0 -1
- package/dist/ua-parser-rRwDJPFB.js.map +0 -1
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// Source: /src/main/ua-parser.js
|
|
4
4
|
|
|
5
5
|
/////////////////////////////////////////////////////////////////////////////////
|
|
6
|
-
/* UAParser.js v2.0.
|
|
7
|
-
Copyright © 2012-
|
|
6
|
+
/* UAParser.js v2.0.9
|
|
7
|
+
Copyright © 2012-2026 Faisal Salman <f@faisalman.com>
|
|
8
8
|
AGPLv3 License *//*
|
|
9
9
|
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
|
10
10
|
Supports browser & node.js environment.
|
|
@@ -21,26 +21,26 @@
|
|
|
21
21
|
// Constants
|
|
22
22
|
/////////////
|
|
23
23
|
|
|
24
|
-
var LIBVERSION = '2.0.
|
|
24
|
+
var LIBVERSION = '2.0.9',
|
|
25
25
|
UA_MAX_LENGTH = 500,
|
|
26
26
|
USER_AGENT = 'user-agent',
|
|
27
27
|
EMPTY = '',
|
|
28
28
|
UNKNOWN = '?',
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
TYPEOF = {
|
|
30
|
+
FUNCTION : 'function',
|
|
31
|
+
OBJECT : 'object',
|
|
32
|
+
STRING : 'string',
|
|
33
|
+
UNDEFINED : 'undefined'
|
|
34
|
+
},
|
|
35
35
|
|
|
36
36
|
// properties
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
BROWSER = 'browser',
|
|
38
|
+
CPU = 'cpu',
|
|
39
|
+
DEVICE = 'device',
|
|
40
|
+
ENGINE = 'engine',
|
|
41
|
+
OS = 'os',
|
|
42
|
+
RESULT = 'result',
|
|
43
|
+
|
|
44
44
|
NAME = 'name',
|
|
45
45
|
TYPE = 'type',
|
|
46
46
|
VENDOR = 'vendor',
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
EMBEDDED = 'embedded',
|
|
60
60
|
|
|
61
61
|
// browser types
|
|
62
|
+
FETCHER = 'fetcher',
|
|
62
63
|
INAPP = 'inapp',
|
|
63
64
|
|
|
64
65
|
// client hints
|
|
@@ -68,16 +69,16 @@
|
|
|
68
69
|
PLATFORM = 'platform',
|
|
69
70
|
PLATFORMVER = 'platformVersion',
|
|
70
71
|
BITNESS = 'bitness',
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
CH_ALL_VALUES
|
|
72
|
+
CH = 'sec-ch-ua',
|
|
73
|
+
CH_FULL_VER_LIST= CH + '-full-version-list',
|
|
74
|
+
CH_ARCH = CH + '-arch',
|
|
75
|
+
CH_BITNESS = CH + '-' + BITNESS,
|
|
76
|
+
CH_FORM_FACTORS = CH + '-form-factors',
|
|
77
|
+
CH_MOBILE = CH + '-' + MOBILE,
|
|
78
|
+
CH_MODEL = CH + '-' + MODEL,
|
|
79
|
+
CH_PLATFORM = CH + '-' + PLATFORM,
|
|
80
|
+
CH_PLATFORM_VER = CH_PLATFORM + '-version',
|
|
81
|
+
CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],
|
|
81
82
|
|
|
82
83
|
// device vendors
|
|
83
84
|
AMAZON = 'Amazon',
|
|
@@ -116,7 +117,7 @@
|
|
|
116
117
|
// os
|
|
117
118
|
WINDOWS = 'Windows';
|
|
118
119
|
|
|
119
|
-
var isWindow = typeof window !==
|
|
120
|
+
var isWindow = typeof window !== TYPEOF.UNDEFINED,
|
|
120
121
|
NAVIGATOR = (isWindow && window.navigator) ?
|
|
121
122
|
window.navigator :
|
|
122
123
|
undefined,
|
|
@@ -152,7 +153,7 @@
|
|
|
152
153
|
return enums;
|
|
153
154
|
},
|
|
154
155
|
has = function (str1, str2) {
|
|
155
|
-
if (typeof str1 ===
|
|
156
|
+
if (typeof str1 === TYPEOF.OBJECT && str1.length > 0) {
|
|
156
157
|
for (var i in str1) {
|
|
157
158
|
if (lowerize(str2) == lowerize(str1[i])) return true;
|
|
158
159
|
}
|
|
@@ -166,7 +167,7 @@
|
|
|
166
167
|
}
|
|
167
168
|
},
|
|
168
169
|
isString = function (val) {
|
|
169
|
-
return typeof val ===
|
|
170
|
+
return typeof val === TYPEOF.STRING;
|
|
170
171
|
},
|
|
171
172
|
itemListToArray = function (header) {
|
|
172
173
|
if (!header) return undefined;
|
|
@@ -193,7 +194,7 @@
|
|
|
193
194
|
if (!arr.hasOwnProperty(i)) continue;
|
|
194
195
|
|
|
195
196
|
var propName = arr[i];
|
|
196
|
-
if (typeof propName ==
|
|
197
|
+
if (typeof propName == TYPEOF.OBJECT && propName.length == 2) {
|
|
197
198
|
this[propName[0]] = propName[1];
|
|
198
199
|
} else {
|
|
199
200
|
this[propName] = undefined;
|
|
@@ -208,10 +209,8 @@
|
|
|
208
209
|
return strip(/\\?\"/g, str);
|
|
209
210
|
},
|
|
210
211
|
trim = function (str, len) {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
|
|
214
|
-
}
|
|
212
|
+
str = strip(/^\s\s*/, String(str));
|
|
213
|
+
return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);
|
|
215
214
|
};
|
|
216
215
|
|
|
217
216
|
///////////////
|
|
@@ -242,9 +241,9 @@
|
|
|
242
241
|
match = matches[++k];
|
|
243
242
|
q = props[p];
|
|
244
243
|
// check if given property is actually array
|
|
245
|
-
if (typeof q ===
|
|
244
|
+
if (typeof q === TYPEOF.OBJECT && q.length > 0) {
|
|
246
245
|
if (q.length === 2) {
|
|
247
|
-
if (typeof q[1] ==
|
|
246
|
+
if (typeof q[1] == TYPEOF.FUNCTION) {
|
|
248
247
|
// assign modified match
|
|
249
248
|
this[q[0]] = q[1].call(this, match);
|
|
250
249
|
} else {
|
|
@@ -253,7 +252,7 @@
|
|
|
253
252
|
}
|
|
254
253
|
} else if (q.length >= 3) {
|
|
255
254
|
// Check whether q[1] FUNCTION or REGEX
|
|
256
|
-
if (typeof q[1] ===
|
|
255
|
+
if (typeof q[1] === TYPEOF.FUNCTION && !(q[1].exec && q[1].test)) {
|
|
257
256
|
if (q.length > 3) {
|
|
258
257
|
this[q[0]] = match ? q[1].apply(this, q.slice(2)) : undefined;
|
|
259
258
|
} else {
|
|
@@ -285,7 +284,7 @@
|
|
|
285
284
|
|
|
286
285
|
for (var i in map) {
|
|
287
286
|
// check if current value is array
|
|
288
|
-
if (typeof map[i] ===
|
|
287
|
+
if (typeof map[i] === TYPEOF.OBJECT && map[i].length > 0) {
|
|
289
288
|
for (var j = 0; j < map[i].length; j++) {
|
|
290
289
|
if (has(map[i][j], str)) {
|
|
291
290
|
return (i === UNKNOWN) ? undefined : i;
|
|
@@ -379,10 +378,12 @@
|
|
|
379
378
|
/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
|
|
380
379
|
/(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
|
|
381
380
|
|
|
382
|
-
// Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble
|
|
383
|
-
/(flock|rockmelt|midori|epiphany|silk|skyfire|
|
|
384
|
-
// Rekonq/Puffin/
|
|
385
|
-
/(
|
|
381
|
+
// Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble/Palemoon/HiBrowser
|
|
382
|
+
/(atlas|flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:hi|lg |ovi|qute)browser|palemoon)\/v?([-\w\.]+)/i,
|
|
383
|
+
// Atlas/Rekonq/Puffin/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
|
|
384
|
+
/(brave)(?: chrome)?\/([\d\.]+)/i, // Brave
|
|
385
|
+
/(aloha|heytap|ovi|115|surf|qwant)browser\/([\d\.]+)/i, // Aloha/HeyTap/Ovi/115/Surf
|
|
386
|
+
/(qwant)(?:ios|mobile)\/([\d\.]+)/i, // Qwant
|
|
386
387
|
/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i // Ecosia/Weibo
|
|
387
388
|
], [NAME, VERSION], [
|
|
388
389
|
/quark(?:pc)?\/([-\w\.]+)/i // Quark
|
|
@@ -403,11 +404,15 @@
|
|
|
403
404
|
], [VERSION, [NAME, 'Yandex']], [
|
|
404
405
|
/slbrowser\/([\w\.]+)/i // Smart Lenovo Browser
|
|
405
406
|
], [VERSION, [NAME, 'Smart ' + LENOVO + SUFFIX_BROWSER]], [
|
|
406
|
-
/(
|
|
407
|
+
/(av(?:ast|g|ira))\/([\w\.]+)/i // Avast/AVG/Avira Secure Browser
|
|
407
408
|
], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [
|
|
409
|
+
/norton\/([\w\.]+)/i // Norton Private Browser
|
|
410
|
+
], [VERSION, [NAME, 'Norton Private' + SUFFIX_BROWSER]], [
|
|
408
411
|
/\bfocus\/([\w\.]+)/i // Firefox Focus
|
|
409
412
|
], [VERSION, [NAME, FIREFOX+' Focus']], [
|
|
410
|
-
|
|
413
|
+
/ mms\/([\w\.]+)$/i // Opera Neon
|
|
414
|
+
], [VERSION, [NAME, OPERA+' Neon']], [
|
|
415
|
+
/ opt\/([\w\.]+)$/i // Opera Touch
|
|
411
416
|
], [VERSION, [NAME, OPERA+' Touch']], [
|
|
412
417
|
/coc_coc\w+\/([\w\.]+)/i // Coc Coc Browser
|
|
413
418
|
], [VERSION, [NAME, 'Coc Coc']], [
|
|
@@ -435,10 +440,9 @@
|
|
|
435
440
|
/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, // Tesla
|
|
436
441
|
/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i // QQ/2345
|
|
437
442
|
], [NAME, VERSION], [
|
|
438
|
-
/(lbbrowser|rekonq)/i
|
|
443
|
+
/(lbbrowser|luakit|rekonq|steam(?= (clie|tenf|gameo)))/i // LieBao Browser/Luakit/Rekonq/Steam
|
|
439
444
|
], [NAME], [
|
|
440
|
-
/ome\/([\w\.]+)
|
|
441
|
-
/ome\/([\w\.]+).+qihu (360)[es]e/i // 360
|
|
445
|
+
/ome\/([\w\.]+).+(iron(?= saf)|360(?=[es]e$))/i // Iron / 360
|
|
442
446
|
], [VERSION, NAME], [
|
|
443
447
|
|
|
444
448
|
// WebView
|
|
@@ -451,11 +455,12 @@
|
|
|
451
455
|
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
|
452
456
|
/(alipay)client\/([\w\.]+)/i, // Alipay
|
|
453
457
|
/(twitter)(?:and| f.+e\/([\w\.]+))/i, // Twitter
|
|
458
|
+
/(bing)(?:web|sapphire)\/([\w\.]+)/i, // Bing
|
|
454
459
|
/(instagram|snapchat|klarna)[\/ ]([-\w\.]+)/i // Instagram/Snapchat/Klarna
|
|
455
460
|
], [NAME, VERSION, [TYPE, INAPP]], [
|
|
456
461
|
/\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS
|
|
457
462
|
], [VERSION, [NAME, 'GSA'], [TYPE, INAPP]], [
|
|
458
|
-
/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i
|
|
463
|
+
/(?:musical_ly|trill)(?:.+app_?version\/|_)([\w\.]+)/i // TikTok
|
|
459
464
|
], [VERSION, [NAME, 'TikTok'], [TYPE, INAPP]], [
|
|
460
465
|
/\[(linkedin)app\]/i // LinkedIn App for iOS & Android
|
|
461
466
|
], [NAME, [TYPE, INAPP]], [
|
|
@@ -465,6 +470,9 @@
|
|
|
465
470
|
/(chromium)[\/ ]([-\w\.]+)/i // Chromium
|
|
466
471
|
], [NAME, VERSION], [
|
|
467
472
|
|
|
473
|
+
/ome-(lighthouse)$/i // Chrome Lighthouse
|
|
474
|
+
], [NAME, [TYPE, FETCHER]], [
|
|
475
|
+
|
|
468
476
|
/headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless
|
|
469
477
|
], [VERSION, [NAME, CHROME+' Headless']], [
|
|
470
478
|
|
|
@@ -508,10 +516,10 @@
|
|
|
508
516
|
/(swiftfox)/i, // Swiftfox
|
|
509
517
|
/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,
|
|
510
518
|
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
|
511
|
-
/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|
|
|
519
|
+
/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\/([-\w\.]+)$/i,
|
|
512
520
|
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
|
513
521
|
/(firefox)\/([\w\.]+)/i, // Other Firefox-based
|
|
514
|
-
/(mozilla)\/([\w\.]+
|
|
522
|
+
/(mozilla)\/([\w\.]+(?= .+rv\:.+gecko\/\d+)|[0-4][\w\.]+(?!.+compatible))/i, // Mozilla
|
|
515
523
|
|
|
516
524
|
// Other
|
|
517
525
|
/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
|
@@ -549,6 +557,8 @@
|
|
|
549
557
|
/((ppc|powerpc)(64)?)( mac|;|\))/i, // PowerPC
|
|
550
558
|
/(?:osf1|[freopnt]{3,4}bsd) (alpha)/i // Alpha
|
|
551
559
|
], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [
|
|
560
|
+
/mc680.0/i
|
|
561
|
+
], [[ARCHITECTURE, '68k']], [
|
|
552
562
|
/winnt.+\[axp/i
|
|
553
563
|
], [[ARCHITECTURE, 'alpha']]
|
|
554
564
|
],
|
|
@@ -568,11 +578,10 @@
|
|
|
568
578
|
], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [
|
|
569
579
|
|
|
570
580
|
// Apple
|
|
571
|
-
/(?:\/|\()(ip(?:hone|od)[\w, ]*)
|
|
581
|
+
/(?:\/|\()(ip(?:hone|od)[\w, ]*)[\/\);]/i // iPod/iPhone
|
|
572
582
|
], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [
|
|
573
|
-
/\(
|
|
574
|
-
|
|
575
|
-
/\b(ipad)\d\d?,\d\d?[;\]].+ios/i
|
|
583
|
+
/\b(?:ios|apple\w+)\/.+[\(\/](ipad)/i, // iPad
|
|
584
|
+
/\b(ipad)[\d,]*[;\] ].+(mac |i(pad)?)os/i
|
|
576
585
|
], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [
|
|
577
586
|
/(macintosh);/i
|
|
578
587
|
], [MODEL, [VENDOR, APPLE]], [
|
|
@@ -590,26 +599,26 @@
|
|
|
590
599
|
// Huawei
|
|
591
600
|
/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i
|
|
592
601
|
], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
|
|
593
|
-
/(?:huawei)([-\w ]+)[;\)]/i,
|
|
594
|
-
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][
|
|
602
|
+
/(?:huawei) ?([-\w ]+)[;\)]/i,
|
|
603
|
+
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][\dc][adnt]?)\b(?!.+d\/s)/i
|
|
595
604
|
], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
|
|
596
605
|
|
|
597
606
|
// Xiaomi
|
|
598
607
|
/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
|
|
599
|
-
/\b((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i
|
|
608
|
+
/\b(?:xiao)?((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i // Mi Pad tablets
|
|
600
609
|
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
|
601
610
|
|
|
602
|
-
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i, // Xiaomi POCO
|
|
603
611
|
/\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
|
604
612
|
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
|
|
605
|
-
|
|
606
|
-
/oid[^\)]+; (m?[12][
|
|
607
|
-
|
|
613
|
+
// Xiaomi Redmi / POCO / Black Shark / Qin
|
|
614
|
+
/oid[^\)]+; (redmi[\-_ ]?(?:note|k)?[\w_ ]+|m?[12]\d[01]\d\w{3,6}|poco[\w ]+|(shark )?\w{3}-[ah]0|qin ?[1-3](s\+|ultra| pro)?)( bui|; wv|\))/i,
|
|
615
|
+
// Xiaomi Mi
|
|
616
|
+
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\d{0,2}\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\))/i,
|
|
608
617
|
/ ([\w ]+) miui\/v?\d/i
|
|
609
618
|
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
|
610
619
|
|
|
611
620
|
// OnePlus
|
|
612
|
-
/droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-
|
|
621
|
+
/droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-l]\w[1m]10)\b/i,
|
|
613
622
|
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
|
614
623
|
], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [
|
|
615
624
|
|
|
@@ -649,7 +658,7 @@
|
|
|
649
658
|
], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [
|
|
650
659
|
|
|
651
660
|
// LG
|
|
652
|
-
|
|
661
|
+
/\b(?:lg)?([vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
|
653
662
|
], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
|
|
654
663
|
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
|
655
664
|
/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\w+)/i,
|
|
@@ -660,7 +669,7 @@
|
|
|
660
669
|
/(nokia) (t[12][01])/i
|
|
661
670
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
|
662
671
|
/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
|
|
663
|
-
/nokia[-_ ]?(([-\w\. ]
|
|
672
|
+
/nokia[-_ ]?(([-\w\. ]*?))( bui|\)|;|\/)/i
|
|
664
673
|
], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [
|
|
665
674
|
|
|
666
675
|
// Google
|
|
@@ -691,7 +700,7 @@
|
|
|
691
700
|
/(playbook);[-\w\),; ]+(rim)/i // BlackBerry PlayBook
|
|
692
701
|
], [MODEL, VENDOR, [TYPE, TABLET]], [
|
|
693
702
|
/\b((?:bb[a-f]|st[hv])100-\d)/i,
|
|
694
|
-
|
|
703
|
+
/(?:blackberry|\(bb10;) (\w+)/i
|
|
695
704
|
], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [
|
|
696
705
|
|
|
697
706
|
// Asus
|
|
@@ -771,10 +780,12 @@
|
|
|
771
780
|
|
|
772
781
|
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
|
773
782
|
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan
|
|
774
|
-
|
|
783
|
+
// BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko
|
|
784
|
+
/; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i,
|
|
775
785
|
/(hp) ([\w ]+\w)/i, // HP iPAQ
|
|
776
786
|
/(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
|
|
777
787
|
/(oppo) ?([\w ]+) bui/i, // OPPO
|
|
788
|
+
/(hisense) ([ehv][\w ]+)\)/i, // Hisense
|
|
778
789
|
/droid[^;]+; (philips)[_ ]([sv-x][\d]{3,4}[xz]?)/i // Philips
|
|
779
790
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
|
780
791
|
|
|
@@ -851,10 +862,10 @@
|
|
|
851
862
|
], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [
|
|
852
863
|
/(ouya)/i, // Ouya
|
|
853
864
|
/(nintendo) (\w+)/i, // Nintendo
|
|
854
|
-
/(retroid) (pocket ([^\)]+))/i
|
|
855
|
-
|
|
856
|
-
/droid.+; (shield)( bui|\))/i
|
|
857
|
-
], [
|
|
865
|
+
/(retroid) (pocket ([^\)]+))/i, // Retroid Pocket
|
|
866
|
+
/(valve).+(steam deck)/i,
|
|
867
|
+
/droid.+; ((shield|rgcube|gr0006))( bui|\))/i // Nvidia Portable/Anbernic/Logitech
|
|
868
|
+
], [[VENDOR, strMapper, { 'Nvidia': 'Shield', 'Anbernic': 'RGCUBE', 'Logitech': 'GR0006' }], MODEL, [TYPE, CONSOLE]], [
|
|
858
869
|
|
|
859
870
|
///////////////////
|
|
860
871
|
// WEARABLES
|
|
@@ -863,7 +874,7 @@
|
|
|
863
874
|
/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i // Samsung Galaxy Watch
|
|
864
875
|
], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [
|
|
865
876
|
/((pebble))app/i, // Pebble
|
|
866
|
-
/(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i
|
|
877
|
+
/(asus|google|lg|oppo|xiaomi) ((pixel |zen)?watch[\w ]*)( bui|\))/i // Asus ZenWatch / LG Watch / Pixel Watch / Xiaomi Watch
|
|
867
878
|
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
|
868
879
|
/(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch
|
|
869
880
|
], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [
|
|
@@ -914,7 +925,7 @@
|
|
|
914
925
|
], [MODEL, [TYPE, SMARTTV]], [
|
|
915
926
|
/\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\w ]+safari)\b/i
|
|
916
927
|
], [[TYPE, SMARTTV]], [
|
|
917
|
-
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?(mobile|vr|\d) safari/i
|
|
928
|
+
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew|; hmsc).+?(mobile|vr|\d) safari/i
|
|
918
929
|
], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [
|
|
919
930
|
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
|
|
920
931
|
], [[TYPE, TABLET]], [
|
|
@@ -938,7 +949,7 @@
|
|
|
938
949
|
/(presto)\/([\w\.]+)/i, // Presto
|
|
939
950
|
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo
|
|
940
951
|
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
|
941
|
-
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,
|
|
952
|
+
/(khtml|tasman|links|dillo)[\/ ]\(?([\w\.]+)/i, // KHTML/Tasman/Links/Dillo
|
|
942
953
|
/(icab)[\/ ]([23]\.[\d\.]+)/i, // iCab
|
|
943
954
|
|
|
944
955
|
/\b(libweb)/i // LibWeb
|
|
@@ -967,7 +978,8 @@
|
|
|
967
978
|
|
|
968
979
|
// iOS/macOS
|
|
969
980
|
/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
|
970
|
-
/(?:ios;fbsv
|
|
981
|
+
/(?:ios;fbsv|ios(?=.+ip(?:ad|hone)|.+apple ?tv)|ip(?:ad|hone)(?: |.+i(?:pad)?)os|apple ?tv.+ios)[\/ ]([\w\.]+)/i,
|
|
982
|
+
/\btvos ?([\w\.]+)/i,
|
|
971
983
|
/cfnetwork\/.+darwin/i
|
|
972
984
|
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
|
973
985
|
/(mac os x) ?([\w\. ]*)/i,
|
|
@@ -999,7 +1011,7 @@
|
|
|
999
1011
|
], [VERSION, [NAME, BLACKBERRY]], [
|
|
1000
1012
|
/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i // Symbian
|
|
1001
1013
|
], [VERSION, [NAME, 'Symbian']], [
|
|
1002
|
-
/mozilla\/[\d\.]+ \((?:mobile
|
|
1014
|
+
/mozilla\/[\d\.]+ \((?:mobile[;\w ]*|tablet|tv|[^\)]*(?:viera|lg(?:l25|-d300)|alcatel ?o.+|y300-f1)); rv:([\w\.]+)\).+gecko\//i // Firefox OS
|
|
1003
1015
|
], [VERSION, [NAME, FIREFOX+' OS']], [
|
|
1004
1016
|
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i, // WebOS
|
|
1005
1017
|
/webos(?:[ \/]?|\.tv-20(?=2[2-9]))(\d[\d\.]*)/i
|
|
@@ -1007,15 +1019,16 @@
|
|
|
1007
1019
|
/web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i
|
|
1008
1020
|
// https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine
|
|
1009
1021
|
], [[VERSION, strMapper, {'25':'120','24':'108','23':'94','22':'87','6':'79','5':'68','4':'53','3':'38','2':'538','1':'537','*':'TV'}], [NAME, 'webOS']], [
|
|
1010
|
-
/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i // watchOS
|
|
1022
|
+
/watch(?: ?os[,\/ ]|\d,\d\/)([\d\.]+)/i // watchOS
|
|
1011
1023
|
], [VERSION, [NAME, 'watchOS']], [
|
|
1012
1024
|
|
|
1013
1025
|
// Google ChromeOS
|
|
1014
|
-
/
|
|
1015
|
-
], [[NAME,
|
|
1026
|
+
/cros [\w]+(?:\)| ([\w\.]+)\b)/i // Chromium OS
|
|
1027
|
+
], [VERSION, [NAME, 'Chrome OS']],[
|
|
1016
1028
|
|
|
1017
1029
|
// Smart TVs
|
|
1018
|
-
/
|
|
1030
|
+
/kepler ([\w\.]+); (aft|aeo)/i // Vega OS
|
|
1031
|
+
], [VERSION, [NAME, 'Vega OS']],[
|
|
1019
1032
|
/(netrange)mmh/i, // Netrange
|
|
1020
1033
|
/(nettv)\/(\d+\.[\w\.]+)/i, // NetTV
|
|
1021
1034
|
|
|
@@ -1052,27 +1065,27 @@
|
|
|
1052
1065
|
var defaultProps = (function () {
|
|
1053
1066
|
var props = { init : {}, isIgnore : {}, isIgnoreRgx : {}, toString : {}};
|
|
1054
1067
|
setProps.call(props.init, [
|
|
1055
|
-
[
|
|
1056
|
-
[
|
|
1057
|
-
[
|
|
1058
|
-
[
|
|
1059
|
-
[
|
|
1068
|
+
[BROWSER, [NAME, VERSION, MAJOR, TYPE]],
|
|
1069
|
+
[CPU, [ARCHITECTURE]],
|
|
1070
|
+
[DEVICE, [TYPE, MODEL, VENDOR]],
|
|
1071
|
+
[ENGINE, [NAME, VERSION]],
|
|
1072
|
+
[OS, [NAME, VERSION]]
|
|
1060
1073
|
]);
|
|
1061
1074
|
setProps.call(props.isIgnore, [
|
|
1062
|
-
[
|
|
1063
|
-
[
|
|
1064
|
-
[
|
|
1075
|
+
[BROWSER, [VERSION, MAJOR]],
|
|
1076
|
+
[ENGINE, [VERSION]],
|
|
1077
|
+
[OS, [VERSION]]
|
|
1065
1078
|
]);
|
|
1066
1079
|
setProps.call(props.isIgnoreRgx, [
|
|
1067
|
-
[
|
|
1068
|
-
[
|
|
1080
|
+
[BROWSER, / ?browser$/i],
|
|
1081
|
+
[OS, / ?os$/i]
|
|
1069
1082
|
]);
|
|
1070
1083
|
setProps.call(props.toString, [
|
|
1071
|
-
[
|
|
1072
|
-
[
|
|
1073
|
-
[
|
|
1074
|
-
[
|
|
1075
|
-
[
|
|
1084
|
+
[BROWSER, [NAME, VERSION]],
|
|
1085
|
+
[CPU, [ARCHITECTURE]],
|
|
1086
|
+
[DEVICE, [VENDOR, MODEL]],
|
|
1087
|
+
[ENGINE, [NAME, VERSION]],
|
|
1088
|
+
[OS, [NAME, VERSION]]
|
|
1076
1089
|
]);
|
|
1077
1090
|
return props;
|
|
1078
1091
|
})();
|
|
@@ -1116,14 +1129,14 @@
|
|
|
1116
1129
|
return item.detectFeature().get();
|
|
1117
1130
|
};
|
|
1118
1131
|
|
|
1119
|
-
if (itemType !=
|
|
1132
|
+
if (itemType != RESULT) {
|
|
1120
1133
|
IData.prototype.is = function (strToCheck) {
|
|
1121
1134
|
var is = false;
|
|
1122
1135
|
for (var i in this) {
|
|
1123
1136
|
if (this.hasOwnProperty(i) && !has(is_ignoreProps, i) && lowerize(is_ignoreRgx ? strip(is_ignoreRgx, this[i]) : this[i]) == lowerize(is_ignoreRgx ? strip(is_ignoreRgx, strToCheck) : strToCheck)) {
|
|
1124
1137
|
is = true;
|
|
1125
|
-
if (strToCheck !=
|
|
1126
|
-
} else if (strToCheck ==
|
|
1138
|
+
if (strToCheck != TYPEOF.UNDEFINED) break;
|
|
1139
|
+
} else if (strToCheck == TYPEOF.UNDEFINED && is) {
|
|
1127
1140
|
is = !is;
|
|
1128
1141
|
break;
|
|
1129
1142
|
}
|
|
@@ -1133,33 +1146,33 @@
|
|
|
1133
1146
|
IData.prototype.toString = function () {
|
|
1134
1147
|
var str = EMPTY;
|
|
1135
1148
|
for (var i in toString_props) {
|
|
1136
|
-
if (typeof(this[toString_props[i]]) !==
|
|
1149
|
+
if (typeof(this[toString_props[i]]) !== TYPEOF.UNDEFINED) {
|
|
1137
1150
|
str += (str ? ' ' : EMPTY) + this[toString_props[i]];
|
|
1138
1151
|
}
|
|
1139
1152
|
}
|
|
1140
|
-
return str ||
|
|
1153
|
+
return str || TYPEOF.UNDEFINED;
|
|
1141
1154
|
};
|
|
1142
1155
|
}
|
|
1143
1156
|
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
var
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
this[prop] = that[prop];
|
|
1151
|
-
}
|
|
1157
|
+
IData.prototype.then = function (cb) {
|
|
1158
|
+
var that = this;
|
|
1159
|
+
var IDataResolve = function () {
|
|
1160
|
+
for (var prop in that) {
|
|
1161
|
+
if (that.hasOwnProperty(prop)) {
|
|
1162
|
+
this[prop] = that[prop];
|
|
1152
1163
|
}
|
|
1153
|
-
}
|
|
1154
|
-
IDataResolve.prototype = {
|
|
1155
|
-
is : IData.prototype.is,
|
|
1156
|
-
toString : IData.prototype.toString
|
|
1157
|
-
};
|
|
1158
|
-
var resolveData = new IDataResolve();
|
|
1159
|
-
cb(resolveData);
|
|
1160
|
-
return resolveData;
|
|
1164
|
+
}
|
|
1161
1165
|
};
|
|
1162
|
-
|
|
1166
|
+
IDataResolve.prototype = {
|
|
1167
|
+
is : IData.prototype.is,
|
|
1168
|
+
toString : IData.prototype.toString,
|
|
1169
|
+
withClientHints : IData.prototype.withClientHints,
|
|
1170
|
+
withFeatureCheck : IData.prototype.withFeatureCheck
|
|
1171
|
+
};
|
|
1172
|
+
var resolveData = new IDataResolve();
|
|
1173
|
+
cb(resolveData);
|
|
1174
|
+
return resolveData;
|
|
1175
|
+
};
|
|
1163
1176
|
|
|
1164
1177
|
return new IData();
|
|
1165
1178
|
};
|
|
@@ -1173,212 +1186,221 @@
|
|
|
1173
1186
|
setProps.call(this, CH_ALL_VALUES);
|
|
1174
1187
|
if (isHttpUACH) {
|
|
1175
1188
|
setProps.call(this, [
|
|
1176
|
-
[BRANDS, itemListToArray(uach[
|
|
1177
|
-
[FULLVERLIST, itemListToArray(uach[
|
|
1178
|
-
[MOBILE, /\?1/.test(uach[
|
|
1179
|
-
[MODEL, stripQuotes(uach[
|
|
1180
|
-
[PLATFORM, stripQuotes(uach[
|
|
1181
|
-
[PLATFORMVER, stripQuotes(uach[
|
|
1182
|
-
[ARCHITECTURE, stripQuotes(uach[
|
|
1183
|
-
[FORMFACTORS, itemListToArray(uach[
|
|
1184
|
-
[BITNESS, stripQuotes(uach[
|
|
1189
|
+
[BRANDS, itemListToArray(uach[CH])],
|
|
1190
|
+
[FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],
|
|
1191
|
+
[MOBILE, /\?1/.test(uach[CH_MOBILE])],
|
|
1192
|
+
[MODEL, stripQuotes(uach[CH_MODEL])],
|
|
1193
|
+
[PLATFORM, stripQuotes(uach[CH_PLATFORM])],
|
|
1194
|
+
[PLATFORMVER, stripQuotes(uach[CH_PLATFORM_VER])],
|
|
1195
|
+
[ARCHITECTURE, stripQuotes(uach[CH_ARCH])],
|
|
1196
|
+
[FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],
|
|
1197
|
+
[BITNESS, stripQuotes(uach[CH_BITNESS])]
|
|
1185
1198
|
]);
|
|
1186
1199
|
} else {
|
|
1187
1200
|
for (var prop in uach) {
|
|
1188
|
-
if(this.hasOwnProperty(prop) && typeof uach[prop] !==
|
|
1201
|
+
if(this.hasOwnProperty(prop) && typeof uach[prop] !== TYPEOF.UNDEFINED) this[prop] = uach[prop];
|
|
1189
1202
|
}
|
|
1190
1203
|
}
|
|
1191
1204
|
}
|
|
1192
1205
|
|
|
1193
1206
|
function UAItem (itemType, ua, rgxMap, uaCH) {
|
|
1207
|
+
setProps.call(this, [
|
|
1208
|
+
['itemType', itemType],
|
|
1209
|
+
['ua', ua],
|
|
1210
|
+
['uaCH', uaCH],
|
|
1211
|
+
['rgxMap', rgxMap],
|
|
1212
|
+
['data', createIData(this, itemType)]
|
|
1213
|
+
]);
|
|
1214
|
+
return this;
|
|
1215
|
+
}
|
|
1194
1216
|
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
this.set = function (prop, val) {
|
|
1201
|
-
this.data[prop] = val;
|
|
1202
|
-
return this;
|
|
1203
|
-
};
|
|
1204
|
-
|
|
1205
|
-
this.setCH = function (ch) {
|
|
1206
|
-
this.uaCH = ch;
|
|
1207
|
-
return this;
|
|
1208
|
-
};
|
|
1217
|
+
UAItem.prototype.get = function (prop) {
|
|
1218
|
+
if (!prop) return this.data;
|
|
1219
|
+
return this.data.hasOwnProperty(prop) ? this.data[prop] : undefined;
|
|
1220
|
+
};
|
|
1209
1221
|
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
// Brave-specific detection
|
|
1215
|
-
if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == FUNC_TYPE) {
|
|
1216
|
-
this.set(NAME, 'Brave');
|
|
1217
|
-
}
|
|
1218
|
-
break;
|
|
1219
|
-
case UA_DEVICE:
|
|
1220
|
-
// Chrome-specific detection: check for 'mobile' value of navigator.userAgentData
|
|
1221
|
-
if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {
|
|
1222
|
-
this.set(TYPE, MOBILE);
|
|
1223
|
-
}
|
|
1224
|
-
// iPadOS-specific detection: identified as Mac, but has some iOS-only properties
|
|
1225
|
-
if (this.get(MODEL) == 'Macintosh' && NAVIGATOR && typeof NAVIGATOR.standalone !== UNDEF_TYPE && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {
|
|
1226
|
-
this.set(MODEL, 'iPad')
|
|
1227
|
-
.set(TYPE, TABLET);
|
|
1228
|
-
}
|
|
1229
|
-
break;
|
|
1230
|
-
case UA_OS:
|
|
1231
|
-
// Chrome-specific detection: check for 'platform' value of navigator.userAgentData
|
|
1232
|
-
if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {
|
|
1233
|
-
this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);
|
|
1234
|
-
}
|
|
1235
|
-
break;
|
|
1236
|
-
case UA_RESULT:
|
|
1237
|
-
var data = this.data;
|
|
1238
|
-
var detect = function (itemType) {
|
|
1239
|
-
return data[itemType]
|
|
1240
|
-
.getItem()
|
|
1241
|
-
.detectFeature()
|
|
1242
|
-
.get();
|
|
1243
|
-
};
|
|
1244
|
-
this.set(UA_BROWSER, detect(UA_BROWSER))
|
|
1245
|
-
.set(UA_CPU, detect(UA_CPU))
|
|
1246
|
-
.set(UA_DEVICE, detect(UA_DEVICE))
|
|
1247
|
-
.set(UA_ENGINE, detect(UA_ENGINE))
|
|
1248
|
-
.set(UA_OS, detect(UA_OS));
|
|
1249
|
-
}
|
|
1250
|
-
}
|
|
1251
|
-
return this;
|
|
1252
|
-
};
|
|
1222
|
+
UAItem.prototype.set = function (prop, val) {
|
|
1223
|
+
this.data[prop] = val;
|
|
1224
|
+
return this;
|
|
1225
|
+
};
|
|
1253
1226
|
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
if (this.itemType == UA_BROWSER) {
|
|
1259
|
-
this.set(MAJOR, majorize(this.get(VERSION)));
|
|
1260
|
-
}
|
|
1261
|
-
return this;
|
|
1262
|
-
};
|
|
1227
|
+
UAItem.prototype.setCH = function (ch) {
|
|
1228
|
+
this.uaCH = ch;
|
|
1229
|
+
return this;
|
|
1230
|
+
};
|
|
1263
1231
|
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
rgxMap = this.rgxMap;
|
|
1267
|
-
|
|
1232
|
+
UAItem.prototype.detectFeature = function () {
|
|
1233
|
+
if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {
|
|
1268
1234
|
switch (this.itemType) {
|
|
1269
|
-
case
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
for (var i=0; i<brands.length; i++) {
|
|
1274
|
-
var brandName = brands[i].brand || brands[i],
|
|
1275
|
-
brandVersion = brands[i].version;
|
|
1276
|
-
if (this.itemType == UA_BROWSER &&
|
|
1277
|
-
!/not.a.brand/i.test(brandName) &&
|
|
1278
|
-
(!prevName ||
|
|
1279
|
-
(/Chrom/.test(prevName) && brandName != CHROMIUM) ||
|
|
1280
|
-
(prevName == EDGE && /WebView2/.test(brandName))
|
|
1281
|
-
)) {
|
|
1282
|
-
brandName = strMapper(brandName, browserHintsMap);
|
|
1283
|
-
prevName = this.get(NAME);
|
|
1284
|
-
if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {
|
|
1285
|
-
this.set(NAME, brandName)
|
|
1286
|
-
.set(VERSION, brandVersion)
|
|
1287
|
-
.set(MAJOR, majorize(brandVersion));
|
|
1288
|
-
}
|
|
1289
|
-
prevName = brandName;
|
|
1290
|
-
}
|
|
1291
|
-
if (this.itemType == UA_ENGINE && brandName == CHROMIUM) {
|
|
1292
|
-
this.set(VERSION, brandVersion);
|
|
1293
|
-
}
|
|
1294
|
-
}
|
|
1235
|
+
case BROWSER:
|
|
1236
|
+
// Brave-specific detection
|
|
1237
|
+
if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == TYPEOF.FUNCTION) {
|
|
1238
|
+
this.set(NAME, 'Brave');
|
|
1295
1239
|
}
|
|
1296
1240
|
break;
|
|
1297
|
-
case
|
|
1298
|
-
|
|
1299
|
-
if (
|
|
1300
|
-
if (archName && uaCH[BITNESS] == '64') archName += '64';
|
|
1301
|
-
rgxMapper.call(this.data, archName + ';', rgxMap);
|
|
1302
|
-
}
|
|
1303
|
-
break;
|
|
1304
|
-
case UA_DEVICE:
|
|
1305
|
-
if (uaCH[MOBILE]) {
|
|
1241
|
+
case DEVICE:
|
|
1242
|
+
// Chrome-specific detection: check for 'mobile' value of navigator.userAgentData
|
|
1243
|
+
if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {
|
|
1306
1244
|
this.set(TYPE, MOBILE);
|
|
1307
1245
|
}
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);
|
|
1313
|
-
if (!this.get(TYPE) && !!reParse.type) {
|
|
1314
|
-
this.set(TYPE, reParse.type);
|
|
1315
|
-
}
|
|
1316
|
-
if (!this.get(VENDOR) && !!reParse.vendor) {
|
|
1317
|
-
this.set(VENDOR, reParse.vendor);
|
|
1318
|
-
}
|
|
1319
|
-
}
|
|
1320
|
-
}
|
|
1321
|
-
if (uaCH[FORMFACTORS]) {
|
|
1322
|
-
var ff;
|
|
1323
|
-
if (typeof uaCH[FORMFACTORS] !== 'string') {
|
|
1324
|
-
var idx = 0;
|
|
1325
|
-
while (!ff && idx < uaCH[FORMFACTORS].length) {
|
|
1326
|
-
ff = strMapper(uaCH[FORMFACTORS][idx++], formFactorsMap);
|
|
1327
|
-
}
|
|
1328
|
-
} else {
|
|
1329
|
-
ff = strMapper(uaCH[FORMFACTORS], formFactorsMap);
|
|
1330
|
-
}
|
|
1331
|
-
this.set(TYPE, ff);
|
|
1246
|
+
// iPadOS-specific detection: identified as Mac, but has some iOS-only properties
|
|
1247
|
+
if (this.get(MODEL) == 'Macintosh' && NAVIGATOR && typeof NAVIGATOR.standalone !== TYPEOF.UNDEFINED && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {
|
|
1248
|
+
this.set(MODEL, 'iPad')
|
|
1249
|
+
.set(TYPE, TABLET);
|
|
1332
1250
|
}
|
|
1333
1251
|
break;
|
|
1334
|
-
case
|
|
1335
|
-
|
|
1336
|
-
if(
|
|
1337
|
-
|
|
1338
|
-
if (osName == WINDOWS) osVersion = (parseInt(majorize(osVersion), 10) >= 13 ? '11' : '10');
|
|
1339
|
-
this.set(NAME, osName)
|
|
1340
|
-
.set(VERSION, osVersion);
|
|
1252
|
+
case OS:
|
|
1253
|
+
// Chrome-specific detection: check for 'platform' value of navigator.userAgentData
|
|
1254
|
+
if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {
|
|
1255
|
+
this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);
|
|
1341
1256
|
}
|
|
1342
|
-
// Xbox-Specific Detection
|
|
1343
|
-
if (this.get(NAME) == WINDOWS && uaCH[MODEL] == 'Xbox') {
|
|
1344
|
-
this.set(NAME, 'Xbox')
|
|
1345
|
-
.set(VERSION, undefined);
|
|
1346
|
-
}
|
|
1347
1257
|
break;
|
|
1348
|
-
case
|
|
1258
|
+
case RESULT:
|
|
1349
1259
|
var data = this.data;
|
|
1350
|
-
var
|
|
1260
|
+
var detect = function (itemType) {
|
|
1351
1261
|
return data[itemType]
|
|
1352
1262
|
.getItem()
|
|
1353
|
-
.
|
|
1354
|
-
.parseCH()
|
|
1263
|
+
.detectFeature()
|
|
1355
1264
|
.get();
|
|
1356
1265
|
};
|
|
1357
|
-
this.set(
|
|
1358
|
-
.set(
|
|
1359
|
-
.set(
|
|
1360
|
-
.set(
|
|
1361
|
-
.set(
|
|
1266
|
+
this.set(BROWSER, detect(BROWSER))
|
|
1267
|
+
.set(CPU, detect(CPU))
|
|
1268
|
+
.set(DEVICE, detect(DEVICE))
|
|
1269
|
+
.set(ENGINE, detect(ENGINE))
|
|
1270
|
+
.set(OS, detect(OS));
|
|
1362
1271
|
}
|
|
1363
|
-
|
|
1364
|
-
|
|
1272
|
+
}
|
|
1273
|
+
return this;
|
|
1274
|
+
};
|
|
1365
1275
|
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1276
|
+
UAItem.prototype.parseUA = function () {
|
|
1277
|
+
if (this.itemType != RESULT) {
|
|
1278
|
+
rgxMapper.call(this.data, this.ua, this.rgxMap);
|
|
1279
|
+
}
|
|
1280
|
+
switch (this.itemType) {
|
|
1281
|
+
case BROWSER:
|
|
1282
|
+
this.set(MAJOR, majorize(this.get(VERSION)));
|
|
1283
|
+
break;
|
|
1284
|
+
case OS:
|
|
1285
|
+
if (this.get(NAME) == 'iOS' && this.get(VERSION) == '18.6') {
|
|
1286
|
+
// Based on the assumption that iOS version is tightly coupled with Safari version
|
|
1287
|
+
var realVersion = /\) Version\/([\d\.]+)/.exec(this.ua); // Get Safari version
|
|
1288
|
+
if (realVersion && parseInt(realVersion[1].substring(0,2), 10) >= 26) {
|
|
1289
|
+
this.set(VERSION, realVersion[1]); // Set as iOS version
|
|
1290
|
+
}
|
|
1291
|
+
}
|
|
1292
|
+
break;
|
|
1293
|
+
}
|
|
1294
|
+
return this;
|
|
1295
|
+
};
|
|
1373
1296
|
|
|
1297
|
+
UAItem.prototype.parseCH = function () {
|
|
1298
|
+
var uaCH = this.uaCH,
|
|
1299
|
+
rgxMap = this.rgxMap;
|
|
1300
|
+
|
|
1301
|
+
switch (this.itemType) {
|
|
1302
|
+
case BROWSER:
|
|
1303
|
+
case ENGINE:
|
|
1304
|
+
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
|
|
1305
|
+
if (brands) {
|
|
1306
|
+
for (var i=0; i<brands.length; i++) {
|
|
1307
|
+
var brandName = brands[i].brand || brands[i],
|
|
1308
|
+
brandVersion = brands[i].version;
|
|
1309
|
+
if (this.itemType == BROWSER &&
|
|
1310
|
+
!/not.a.brand/i.test(brandName) &&
|
|
1311
|
+
(!prevName ||
|
|
1312
|
+
(/Chrom/.test(prevName) && brandName != CHROMIUM) ||
|
|
1313
|
+
(prevName == EDGE && /WebView2/.test(brandName))
|
|
1314
|
+
)) {
|
|
1315
|
+
brandName = strMapper(brandName, browserHintsMap);
|
|
1316
|
+
prevName = this.get(NAME);
|
|
1317
|
+
if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {
|
|
1318
|
+
this.set(NAME, brandName)
|
|
1319
|
+
.set(VERSION, brandVersion)
|
|
1320
|
+
.set(MAJOR, majorize(brandVersion));
|
|
1321
|
+
}
|
|
1322
|
+
prevName = brandName;
|
|
1323
|
+
}
|
|
1324
|
+
if (this.itemType == ENGINE && brandName == CHROMIUM) {
|
|
1325
|
+
this.set(VERSION, brandVersion);
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
break;
|
|
1330
|
+
case CPU:
|
|
1331
|
+
var archName = uaCH[ARCHITECTURE];
|
|
1332
|
+
if (archName) {
|
|
1333
|
+
if (archName && uaCH[BITNESS] == '64') archName += '64';
|
|
1334
|
+
rgxMapper.call(this.data, archName + ';', rgxMap);
|
|
1335
|
+
}
|
|
1336
|
+
break;
|
|
1337
|
+
case DEVICE:
|
|
1338
|
+
if (uaCH[MOBILE]) {
|
|
1339
|
+
this.set(TYPE, MOBILE);
|
|
1340
|
+
}
|
|
1341
|
+
if (uaCH[MODEL]) {
|
|
1342
|
+
this.set(MODEL, uaCH[MODEL]);
|
|
1343
|
+
if (!this.get(TYPE) || !this.get(VENDOR)) {
|
|
1344
|
+
var reParse = {};
|
|
1345
|
+
rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);
|
|
1346
|
+
if (!this.get(TYPE) && !!reParse.type) {
|
|
1347
|
+
this.set(TYPE, reParse.type);
|
|
1348
|
+
}
|
|
1349
|
+
if (!this.get(VENDOR) && !!reParse.vendor) {
|
|
1350
|
+
this.set(VENDOR, reParse.vendor);
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
if (uaCH[FORMFACTORS]) {
|
|
1355
|
+
var ff;
|
|
1356
|
+
if (typeof uaCH[FORMFACTORS] !== 'string') {
|
|
1357
|
+
var idx = 0;
|
|
1358
|
+
while (!ff && idx < uaCH[FORMFACTORS].length) {
|
|
1359
|
+
ff = strMapper(uaCH[FORMFACTORS][idx++], formFactorsMap);
|
|
1360
|
+
}
|
|
1361
|
+
} else {
|
|
1362
|
+
ff = strMapper(uaCH[FORMFACTORS], formFactorsMap);
|
|
1363
|
+
}
|
|
1364
|
+
this.set(TYPE, ff);
|
|
1365
|
+
}
|
|
1366
|
+
break;
|
|
1367
|
+
case OS:
|
|
1368
|
+
var osName = uaCH[PLATFORM];
|
|
1369
|
+
if(osName) {
|
|
1370
|
+
var osVersion = uaCH[PLATFORMVER];
|
|
1371
|
+
if (osName == WINDOWS) osVersion = (parseInt(majorize(osVersion), 10) >= 13 ? '11' : '10');
|
|
1372
|
+
this.set(NAME, osName)
|
|
1373
|
+
.set(VERSION, osVersion);
|
|
1374
|
+
}
|
|
1375
|
+
// Xbox-Specific Detection
|
|
1376
|
+
if (this.get(NAME) == WINDOWS && uaCH[MODEL] == 'Xbox') {
|
|
1377
|
+
this.set(NAME, 'Xbox')
|
|
1378
|
+
.set(VERSION, undefined);
|
|
1379
|
+
}
|
|
1380
|
+
break;
|
|
1381
|
+
case RESULT:
|
|
1382
|
+
var data = this.data;
|
|
1383
|
+
var parse = function (itemType) {
|
|
1384
|
+
return data[itemType]
|
|
1385
|
+
.getItem()
|
|
1386
|
+
.setCH(uaCH)
|
|
1387
|
+
.parseCH()
|
|
1388
|
+
.get();
|
|
1389
|
+
};
|
|
1390
|
+
this.set(BROWSER, parse(BROWSER))
|
|
1391
|
+
.set(CPU, parse(CPU))
|
|
1392
|
+
.set(DEVICE, parse(DEVICE))
|
|
1393
|
+
.set(ENGINE, parse(ENGINE))
|
|
1394
|
+
.set(OS, parse(OS));
|
|
1395
|
+
}
|
|
1374
1396
|
return this;
|
|
1375
|
-
}
|
|
1397
|
+
};
|
|
1376
1398
|
|
|
1377
1399
|
function UAParser (ua, extensions, headers) {
|
|
1378
1400
|
|
|
1379
|
-
if (typeof ua ===
|
|
1401
|
+
if (typeof ua === TYPEOF.OBJECT) {
|
|
1380
1402
|
if (isExtensions(ua, true)) {
|
|
1381
|
-
if (typeof extensions ===
|
|
1403
|
+
if (typeof extensions === TYPEOF.OBJECT) {
|
|
1382
1404
|
headers = extensions; // case UAParser(extensions, headers)
|
|
1383
1405
|
}
|
|
1384
1406
|
extensions = ua; // case UAParser(extensions)
|
|
@@ -1387,13 +1409,13 @@
|
|
|
1387
1409
|
extensions = undefined;
|
|
1388
1410
|
}
|
|
1389
1411
|
ua = undefined;
|
|
1390
|
-
} else if (typeof ua ===
|
|
1412
|
+
} else if (typeof ua === TYPEOF.STRING && !isExtensions(extensions, true)) {
|
|
1391
1413
|
headers = extensions; // case UAParser(ua, headers)
|
|
1392
1414
|
extensions = undefined;
|
|
1393
1415
|
}
|
|
1394
1416
|
|
|
1395
1417
|
if (headers) {
|
|
1396
|
-
if (typeof headers.append ===
|
|
1418
|
+
if (typeof headers.append === TYPEOF.FUNCTION) {
|
|
1397
1419
|
// Convert Headers object into a plain object
|
|
1398
1420
|
var kv = {};
|
|
1399
1421
|
headers.forEach(function (v, k) { kv[String(k).toLowerCase()] = v; });
|
|
@@ -1414,7 +1436,7 @@
|
|
|
1414
1436
|
return new UAParser(ua, extensions, headers).getResult();
|
|
1415
1437
|
}
|
|
1416
1438
|
|
|
1417
|
-
var userAgent = typeof ua ===
|
|
1439
|
+
var userAgent = typeof ua === TYPEOF.STRING ? ua : // Passed user-agent string
|
|
1418
1440
|
(headers && headers[USER_AGENT] ? headers[USER_AGENT] : // User-Agent from passed headers
|
|
1419
1441
|
((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent
|
|
1420
1442
|
EMPTY)), // empty string
|
|
@@ -1425,15 +1447,15 @@
|
|
|
1425
1447
|
defaultRegexes,
|
|
1426
1448
|
|
|
1427
1449
|
createItemFunc = function (itemType) {
|
|
1428
|
-
if (itemType ==
|
|
1450
|
+
if (itemType == RESULT) {
|
|
1429
1451
|
return function () {
|
|
1430
1452
|
return new UAItem(itemType, userAgent, regexMap, httpUACH)
|
|
1431
1453
|
.set('ua', userAgent)
|
|
1432
|
-
.set(
|
|
1433
|
-
.set(
|
|
1434
|
-
.set(
|
|
1435
|
-
.set(
|
|
1436
|
-
.set(
|
|
1454
|
+
.set(BROWSER, this.getBrowser())
|
|
1455
|
+
.set(CPU, this.getCPU())
|
|
1456
|
+
.set(DEVICE, this.getDevice())
|
|
1457
|
+
.set(ENGINE, this.getEngine())
|
|
1458
|
+
.set(OS, this.getOS())
|
|
1437
1459
|
.get();
|
|
1438
1460
|
};
|
|
1439
1461
|
} else {
|
|
@@ -1447,16 +1469,15 @@
|
|
|
1447
1469
|
|
|
1448
1470
|
// public methods
|
|
1449
1471
|
setProps.call(this, [
|
|
1450
|
-
['getBrowser', createItemFunc(
|
|
1451
|
-
['getCPU', createItemFunc(
|
|
1452
|
-
['getDevice', createItemFunc(
|
|
1453
|
-
['getEngine', createItemFunc(
|
|
1454
|
-
['getOS', createItemFunc(
|
|
1455
|
-
['getResult', createItemFunc(
|
|
1472
|
+
['getBrowser', createItemFunc(BROWSER)],
|
|
1473
|
+
['getCPU', createItemFunc(CPU)],
|
|
1474
|
+
['getDevice', createItemFunc(DEVICE)],
|
|
1475
|
+
['getEngine', createItemFunc(ENGINE)],
|
|
1476
|
+
['getOS', createItemFunc(OS)],
|
|
1477
|
+
['getResult', createItemFunc(RESULT)],
|
|
1456
1478
|
['getUA', function () { return userAgent; }],
|
|
1457
1479
|
['setUA', function (ua) {
|
|
1458
|
-
if (isString(ua))
|
|
1459
|
-
userAgent = ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua;
|
|
1480
|
+
if (isString(ua)) userAgent = trim(ua, UA_MAX_LENGTH);
|
|
1460
1481
|
return this;
|
|
1461
1482
|
}]
|
|
1462
1483
|
])
|
|
@@ -1472,4 +1493,4 @@
|
|
|
1472
1493
|
UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);
|
|
1473
1494
|
|
|
1474
1495
|
export { UAParser as U };
|
|
1475
|
-
//# sourceMappingURL=ua-parser-
|
|
1496
|
+
//# sourceMappingURL=ua-parser-OzUiuIwt.js.map
|