-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #202 from AElfProject/feature/tg-acceleration
fix/ismobile-check-and-typings
- Loading branch information
Showing
16 changed files
with
403 additions
and
222 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,191 @@ | ||
const mobileRE = | ||
/(android|bb\d+|meego).+mobile|armv7l|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i; | ||
const notMobileRE = /CrOS/; | ||
const appleIphone = /iPhone/i; | ||
const appleIpod = /iPod/i; | ||
const appleTablet = /iPad/i; | ||
const appleUniversal = /\biOS-universal(?:.+)Mac\b/i; | ||
const androidPhone = /\bAndroid(?:.+)Mobile\b/i; // Match 'Android' AND 'Mobile' | ||
const androidTablet = /Android/i; | ||
const amazonPhone = /(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i; // Match 'Silk' AND 'Mobile' | ||
const amazonTablet = /Silk/i; | ||
const windowsPhone = /Windows Phone/i; | ||
const windowsTablet = /\bWindows(?:.+)ARM\b/i; // Match 'Windows' AND 'ARM' | ||
const otherBlackBerry = /BlackBerry/i; | ||
const otherBlackBerry10 = /BB10/i; | ||
const otherOpera = /Opera Mini/i; | ||
const otherChrome = /\b(CriOS|Chrome)(?:.+)Mobile/i; | ||
const otherFirefox = /Mobile(?:.+)Firefox\b/i; // Match 'Mobile' AND 'Firefox' | ||
|
||
export function isMobile() { | ||
if (typeof navigator === 'undefined') { | ||
return false; | ||
export type UserAgent = string; | ||
export type Navigator = { | ||
userAgent: string; | ||
platform: string; | ||
maxTouchPoints?: number; | ||
}; | ||
|
||
const isAppleTabletOnIos13 = (navigator?: Navigator): boolean => { | ||
return ( | ||
typeof navigator !== 'undefined' && | ||
navigator.platform === 'MacIntel' && | ||
typeof navigator.maxTouchPoints === 'number' && | ||
navigator.maxTouchPoints > 1 | ||
); | ||
}; | ||
|
||
function createMatch(userAgent: UserAgent): (regex: RegExp) => boolean { | ||
return (regex: RegExp): boolean => regex.test(userAgent); | ||
} | ||
|
||
export type isMobileResult = { | ||
apple: { | ||
phone: boolean; | ||
ipod: boolean; | ||
tablet: boolean; | ||
universal: boolean; | ||
device: boolean; | ||
}; | ||
amazon: { | ||
phone: boolean; | ||
tablet: boolean; | ||
device: boolean; | ||
}; | ||
android: { | ||
phone: boolean; | ||
tablet: boolean; | ||
device: boolean; | ||
}; | ||
windows: { | ||
phone: boolean; | ||
tablet: boolean; | ||
device: boolean; | ||
}; | ||
other: { | ||
blackberry: boolean; | ||
blackberry10: boolean; | ||
opera: boolean; | ||
firefox: boolean; | ||
chrome: boolean; | ||
device: boolean; | ||
}; | ||
phone: boolean; | ||
tablet: boolean; | ||
any: boolean; | ||
}; | ||
|
||
export type IsMobileParameter = UserAgent | Navigator; | ||
|
||
export function isMobile(param?: IsMobileParameter): isMobileResult { | ||
let nav: Navigator = { | ||
userAgent: '', | ||
platform: '', | ||
maxTouchPoints: 0, | ||
}; | ||
|
||
if (!param && typeof navigator !== 'undefined') { | ||
nav = { | ||
userAgent: navigator.userAgent, | ||
platform: navigator.platform, | ||
maxTouchPoints: navigator.maxTouchPoints || 0, | ||
}; | ||
} else if (typeof param === 'string') { | ||
nav.userAgent = param; | ||
} else if (param && param.userAgent) { | ||
nav = { | ||
userAgent: param.userAgent, | ||
platform: param.platform, | ||
maxTouchPoints: param.maxTouchPoints || 0, | ||
}; | ||
} | ||
|
||
const ua = navigator.userAgent; | ||
if (typeof ua !== 'string') return false; | ||
let userAgent = nav.userAgent; | ||
|
||
let result = mobileRE.test(ua) && !notMobileRE.test(ua); | ||
// Facebook mobile app's integrated browser adds a bunch of strings that | ||
// match everything. Strip it out if it exists. | ||
let tmp = userAgent.split('[FBAN'); | ||
if (typeof tmp[1] !== 'undefined') { | ||
userAgent = tmp[0]; | ||
} | ||
|
||
if ( | ||
!result && | ||
navigator && | ||
navigator.maxTouchPoints > 1 && | ||
ua.indexOf('Macintosh') !== -1 && | ||
ua.indexOf('Safari') !== -1 | ||
) { | ||
result = true; | ||
// Twitter mobile app's integrated browser on iPad adds a "Twitter for | ||
// iPhone" string. Same probably happens on other tablet platforms. | ||
// This will confuse detection so strip it out if it exists. | ||
tmp = userAgent.split('Twitter'); | ||
if (typeof tmp[1] !== 'undefined') { | ||
userAgent = tmp[0]; | ||
} | ||
|
||
const match = createMatch(userAgent); | ||
|
||
const result: isMobileResult = { | ||
apple: { | ||
phone: match(appleIphone) && !match(windowsPhone), | ||
ipod: match(appleIpod), | ||
tablet: | ||
!match(appleIphone) && | ||
(match(appleTablet) || isAppleTabletOnIos13(nav)) && | ||
!match(windowsPhone), | ||
universal: match(appleUniversal), | ||
device: | ||
(match(appleIphone) || | ||
match(appleIpod) || | ||
match(appleTablet) || | ||
match(appleUniversal) || | ||
isAppleTabletOnIos13(nav)) && | ||
!match(windowsPhone), | ||
}, | ||
amazon: { | ||
phone: match(amazonPhone), | ||
tablet: !match(amazonPhone) && match(amazonTablet), | ||
device: match(amazonPhone) || match(amazonTablet), | ||
}, | ||
android: { | ||
phone: | ||
(!match(windowsPhone) && match(amazonPhone)) || | ||
(!match(windowsPhone) && match(androidPhone)), | ||
tablet: | ||
!match(windowsPhone) && | ||
!match(amazonPhone) && | ||
!match(androidPhone) && | ||
(match(amazonTablet) || match(androidTablet)), | ||
device: | ||
(!match(windowsPhone) && | ||
(match(amazonPhone) || | ||
match(amazonTablet) || | ||
match(androidPhone) || | ||
match(androidTablet))) || | ||
match(/\bokhttp\b/i), | ||
}, | ||
windows: { | ||
phone: match(windowsPhone), | ||
tablet: match(windowsTablet), | ||
device: match(windowsPhone) || match(windowsTablet), | ||
}, | ||
other: { | ||
blackberry: match(otherBlackBerry), | ||
blackberry10: match(otherBlackBerry10), | ||
opera: match(otherOpera), | ||
firefox: match(otherFirefox), | ||
chrome: match(otherChrome), | ||
device: | ||
match(otherBlackBerry) || | ||
match(otherBlackBerry10) || | ||
match(otherOpera) || | ||
match(otherFirefox) || | ||
match(otherChrome), | ||
}, | ||
any: false, | ||
phone: false, | ||
tablet: false, | ||
}; | ||
|
||
result.any = | ||
result.apple.device || result.android.device || result.windows.device || result.other.device; | ||
// excludes 'other' devices and ipods, targeting touchscreen phones | ||
result.phone = result.apple.phone || result.android.phone || result.windows.phone; | ||
result.tablet = result.apple.tablet || result.android.tablet || result.windows.tablet; | ||
|
||
return result; | ||
} | ||
|
||
export function isMobileDevices() { | ||
const isM = isMobile(); | ||
return isM.apple.device || isM.android.device; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// In your own jest-setup.js (or any other name) | ||
import '@testing-library/jest-dom'; | ||
global.fetch = require('node-fetch'); | ||
import { type IBridgeAPI } from '@aelf-web-login/wallet-adapter-bridge'; | ||
|
||
jest.mock('@aelf-web-login/wallet-adapter-bridge', () => ({ | ||
initBridge: jest.fn().mockReturnValue({ | ||
getSignIn: jest.fn((children) => children), | ||
store: { | ||
getState: () => null, | ||
subscribe: () => null, | ||
}, | ||
instance: {} as IBridgeAPI['instance'], | ||
}), | ||
})); | ||
|
||
jest.mock('@aelf-web-login/wallet-adapter-portkey-aa', () => ({ | ||
PortkeyAAWallet: jest.fn(), | ||
})); | ||
|
||
jest.mock('vconsole'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.