-
Notifications
You must be signed in to change notification settings - Fork 62
/
platform.ts
97 lines (75 loc) · 2.68 KB
/
platform.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Helper functions from https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/platform.ts
export const testUserAgent = (win: Window, expr: RegExp): boolean =>
expr.test(win.navigator.userAgent)
const matchMedia = (win: Window, query: string): boolean => win.matchMedia(query).matches
export const isMobile = (win: Window): boolean => matchMedia(win, '(any-pointer:coarse)')
// const isCordova = (win: any): boolean => Boolean(win.cordova || win.phonegap || win.PhoneGap)
// const isCapacitorNative = (win: any): boolean => {
// const capacitor = win.Capacitor
// return Boolean(capacitor && capacitor.isNative)
// }
// const isHybrid = (win: Window): boolean => isCordova(win) || isCapacitorNative(win)
// const isMobileWeb = (win: Window): boolean => isMobile(win) && !isHybrid(win)
const isIpad = (win: Window): boolean => {
// iOS 12 and below
if (testUserAgent(win, /iPad/i)) {
return true
}
// iOS 13+
if (testUserAgent(win, /Macintosh/i) && isMobile(win)) {
return true
}
return false
}
export const isBrowser = (win: Window): boolean =>
testUserAgent(
win,
/(?:Mozilla)(?=.*\b(?:Gecko|AppleWebKit))(?=.*\b(?:Chrome|Safari|Firefox|Opera|Edge|Brave|DuckDuckGo)).*/i
)
export const isPrivacyBrowser = (win: Window): boolean => testUserAgent(win, /Mobile DuckDuckGo/i)
export const isIOS = (win: Window): boolean =>
isPrivacyBrowser(win) || testUserAgent(win, /iPhone|iPod|Mobile DuckDuckGo/i) || isIpad(win)
export const isAndroid = (win: Window): boolean =>
!isPrivacyBrowser(win) && testUserAgent(win, /android|sink/i)
export const isTwBrowser = (win: Window): boolean => win && (win as any).ethereum?.isTrust == true
export const isDesktop = (win: Window): boolean => !isMobile(win)
export const isMobileOS = (win: Window): boolean =>
testUserAgent(
win,
/(Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|Tablet|Windows Phone|SymbianOS|Kindle)/i
)
export const currentOS = () => {
var ua = navigator.userAgent
var osMap = new Map([
['Windows', 'Windows'],
['Mac', 'Mac OS'],
['Linux', 'Linux'],
['iPhone', 'iOS'],
['iPad', 'iOS'],
['Android', 'Android']
])
for (let [key, value] of osMap) {
if (ua.indexOf(key) !== -1) {
return value
}
}
return 'UNKOWN'
}
export const currentBrowser = () => {
var ua = navigator.userAgent
var browserMap = new Map([
['Firefox', 'Firefox'],
['Opera', 'Opera'],
['OPR', 'Opera'],
['Trident', 'Internet Explorer'],
['Edge', 'Edge'],
['Chrome', 'Chrome'],
['Safari', 'Safari']
])
for (let [key, value] of browserMap) {
if (ua.indexOf(key) !== -1) {
return value
}
}
return 'UNKOWN'
}