@atlaskit/editor-plugin-feedback-dialog
Version:
Feedback dialog plugin for @atlaskit/editor-core
205 lines (204 loc) • 6.01 kB
JavaScript
/**
* Inspired from:
* https://stackoverflow.com/questions/9514179/how-to-find-the-operating-system-version-using-javascript
*/
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WIN16_REGEX = /Win16/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_95_REGEX = /(Windows 95|Win95|Windows_95)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_ME_REGEX = /(Win 9x 4.90|Windows ME)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_98_REGEX = /(Windows 98|Win98)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_CE_REGEX = /Windows CE/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_2000_REGEX = /(Windows NT 5.0|Windows 2000)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_XP_REGEX = /(Windows NT 5.1|Windows XP)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_SERVER_2003_REGEX = /Windows NT 5.2/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_VISTA_REGEX = /Windows NT 6.0/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_7_REGEX = /(Windows 7|Windows NT 6.1)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_8_1_REGEX = /(Windows 8.1|Windows NT 6.3)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_8_REGEX = /(Windows 8|Windows NT 6.2)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_NT_4_REGEX = /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const ANDROID_REGEX = /Android/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const OPEN_BSD_REGEX = /OpenBSD/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const SUN_OS_REGEX = /SunOS/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const LINUX_REGEX = /(Linux|X11)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const IOS_REGEX = /(iPhone|iPad|iPod)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const MAC_OS_X_REGEX = /Mac OS X/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const MAC_OS_REGEX = /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const QNX_REGEX = /QNX/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const UNIX_REGEX = /UNIX/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const BEOS_REGEX = /BeOS/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const OS2_REGEX = /OS\/2/;
// Ignored via go/ees005
/* eslint-disable require-unicode-regexp */
const SEARCH_BOT_REGEX = /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/;
/* eslint-enable require-unicode-regexp */
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_TEST_REGEX = /Windows/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const WINDOWS_VERSION_REGEX = /Windows (.*)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const MAC_OS_X_VERSION_REGEX = /Mac OS X (10[\.\_\d]+)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const ANDROID_VERSION_REGEX = /Android ([\.\_\d]+)/;
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
const IOS_VERSION_REGEX = /OS (\d+)_(\d+)_?(\d+)?/;
const getDeviceInfo = (nAgt, nVersion) => {
let os = '';
let osVersion = '';
const clientStrings = [{
s: 'Windows 3.11',
r: WIN16_REGEX
}, {
s: 'Windows 95',
r: WINDOWS_95_REGEX
}, {
s: 'Windows ME',
r: WINDOWS_ME_REGEX
}, {
s: 'Windows 98',
r: WINDOWS_98_REGEX
}, {
s: 'Windows CE',
r: WINDOWS_CE_REGEX
}, {
s: 'Windows 2000',
r: WINDOWS_2000_REGEX
}, {
s: 'Windows XP',
r: WINDOWS_XP_REGEX
}, {
s: 'Windows Server 2003',
r: WINDOWS_SERVER_2003_REGEX
}, {
s: 'Windows Vista',
r: WINDOWS_VISTA_REGEX
}, {
s: 'Windows 7',
r: WINDOWS_7_REGEX
}, {
s: 'Windows 8.1',
r: WINDOWS_8_1_REGEX
}, {
s: 'Windows 8',
r: WINDOWS_8_REGEX
}, {
s: 'Windows NT 4.0',
r: WINDOWS_NT_4_REGEX
}, {
s: 'Android',
r: ANDROID_REGEX
}, {
s: 'Open BSD',
r: OPEN_BSD_REGEX
}, {
s: 'Sun OS',
r: SUN_OS_REGEX
}, {
s: 'Linux',
r: LINUX_REGEX
}, {
s: 'iOS',
r: IOS_REGEX
}, {
s: 'Mac OS X',
r: MAC_OS_X_REGEX
}, {
s: 'Mac OS',
r: MAC_OS_REGEX
}, {
s: 'QNX',
r: QNX_REGEX
}, {
s: 'UNIX',
r: UNIX_REGEX
}, {
s: 'BeOS',
r: BEOS_REGEX
}, {
s: 'OS/2',
r: OS2_REGEX
}, {
s: 'Search Bot',
r: SEARCH_BOT_REGEX
}];
// eslint-disable-next-line guard-for-in
for (const client in clientStrings) {
const clientObj = clientStrings[client];
if (clientObj.r.test(nAgt)) {
os = clientObj.s;
break;
}
}
let match;
if (WINDOWS_TEST_REGEX.test(os)) {
match = WINDOWS_VERSION_REGEX.exec(os);
osVersion = match && match[1];
os = 'Windows';
}
switch (os) {
case 'Mac OS X':
match = MAC_OS_X_VERSION_REGEX.exec(nAgt);
osVersion = match && match[1];
break;
case 'Android':
match = ANDROID_VERSION_REGEX.exec(nAgt);
osVersion = match && match[1];
break;
case 'iOS':
match = IOS_VERSION_REGEX.exec(nVersion);
osVersion = match && match[1] + '.' + match[2] + '.' + (match[3] || 0);
}
return `${os} ${osVersion}`;
};
export default getDeviceInfo;