Port navigatorJS - provides platform details
This commit is contained in:
parent
c7962a1192
commit
c4d11c6c48
1 changed files with 228 additions and 0 deletions
228
ui/util/platform.js
Normal file
228
ui/util/platform.js
Normal file
|
@ -0,0 +1,228 @@
|
|||
/**
|
||||
* Adapted from NavigatorJS 0.2
|
||||
* https://github.com/hicTech/navigatorJs
|
||||
* www.hictech.com
|
||||
*/
|
||||
|
||||
export const platform = {
|
||||
os: function () {
|
||||
if (this.isIOS()) return 'ios';
|
||||
if (this.isAndroid()) return 'android';
|
||||
if (this.isWindows()) return 'windows';
|
||||
if (this.isUnix()) return 'unix';
|
||||
if (this.isMac()) return 'mac';
|
||||
if (this.isLinux()) return 'linux';
|
||||
if (this.isBlackBerry()) return 'blackberry';
|
||||
return undefined;
|
||||
},
|
||||
|
||||
browser: function () {
|
||||
if (this.isSafari()) {
|
||||
return 'safari';
|
||||
}
|
||||
if (this.isChrome()) {
|
||||
return 'chrome';
|
||||
}
|
||||
if (this.isIE()) {
|
||||
return 'ie';
|
||||
}
|
||||
if (this.isEdge()) {
|
||||
return 'edge';
|
||||
}
|
||||
if (this.isFirefox()) {
|
||||
return 'firefox';
|
||||
}
|
||||
if (this.isOpera()) {
|
||||
return 'opera';
|
||||
}
|
||||
return undefined;
|
||||
},
|
||||
|
||||
userAgent: function () {
|
||||
return navigator.userAgent;
|
||||
},
|
||||
|
||||
browserName: function () {
|
||||
let ua = this.userAgent(),
|
||||
tem,
|
||||
M = ua.match(/(fxios|opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
|
||||
|
||||
if (/trident/i.test(M[1])) {
|
||||
tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
|
||||
return 'IE ' + (tem[1] || '');
|
||||
}
|
||||
|
||||
if (M[1] === 'Chrome') {
|
||||
/**
|
||||
* IE Edge has "chrome" as user agent and this check is mandatory at this
|
||||
* point. If the check is passed the M variable is replaced and the code
|
||||
* continues like other browsers.
|
||||
*/
|
||||
tem = ua.match(/(edge(?=\/))\/?\s*(\d+)/i);
|
||||
|
||||
if (tem) {
|
||||
M = tem;
|
||||
} else {
|
||||
tem = ua.match(/\bOPR\/(\d+)/);
|
||||
if (tem != null) return 'Opera ' + tem[1];
|
||||
}
|
||||
}
|
||||
|
||||
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
|
||||
if ((tem = ua.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]);
|
||||
return M.join(' ');
|
||||
},
|
||||
|
||||
// **************************************************************************
|
||||
// mobile detection
|
||||
// **************************************************************************
|
||||
|
||||
isMobile: function () {
|
||||
return (
|
||||
this.userAgent().match(/iPhone|iPad|iPod|Android|BlackBerry|Opera Mini|IEMobile|CRiOS|OPiOS|Mobile|FxiOS/i) !==
|
||||
null
|
||||
);
|
||||
},
|
||||
|
||||
isDesktop: function () {
|
||||
return !this.isMobile();
|
||||
},
|
||||
|
||||
// **************************************************************************
|
||||
// desktop detection
|
||||
// **************************************************************************
|
||||
|
||||
isSafari: function () {
|
||||
return (
|
||||
this.userAgent().indexOf('Safari') !== -1 &&
|
||||
navigator.vendor.indexOf('Apple Computer') !== -1 &&
|
||||
!this.isChrome() &&
|
||||
!this.isFirefox() &&
|
||||
!this.isOpera()
|
||||
);
|
||||
},
|
||||
|
||||
isChrome: function () {
|
||||
return (
|
||||
((this.userAgent().indexOf('Chrome') !== -1 && navigator.vendor.indexOf('Google Inc') !== -1) ||
|
||||
this.userAgent().indexOf('CriOS') !== -1) &&
|
||||
!this.isOpera()
|
||||
);
|
||||
},
|
||||
|
||||
isIE: function () {
|
||||
return (
|
||||
this.browserName()
|
||||
.toLowerCase()
|
||||
.match(/ie|msie|iemobile/i) != null
|
||||
);
|
||||
},
|
||||
|
||||
isEdge: function () {
|
||||
return this.browserName().toLowerCase().match(/edge/i) != null;
|
||||
},
|
||||
|
||||
isFirefox: function () {
|
||||
return (
|
||||
this.browserName()
|
||||
.toLowerCase()
|
||||
.match(/firefox|fxios/i) != null
|
||||
);
|
||||
},
|
||||
|
||||
isOpera: function () {
|
||||
return (
|
||||
this.userAgent()
|
||||
.toLowerCase()
|
||||
.match(/opera|opr|opera mini|opios/i) != null ||
|
||||
Object.prototype.toString.call(window.operamini) === '[object OperaMini]'
|
||||
);
|
||||
},
|
||||
|
||||
// **************************************************************************
|
||||
// mobile browser detection
|
||||
// **************************************************************************
|
||||
|
||||
isMobileChrome: function () {
|
||||
return this.userAgent().toLowerCase().match('crios') != null || (this.isChrome() && this.isMobile());
|
||||
},
|
||||
|
||||
isMobileSafari: function () {
|
||||
return this.isMobile() && this.isSafari();
|
||||
},
|
||||
|
||||
isMobileIE: function () {
|
||||
return this.isMobile() && this.isIE();
|
||||
},
|
||||
|
||||
isMobileOpera: function () {
|
||||
return this.isMobile() && this.isOpera();
|
||||
},
|
||||
|
||||
isMobileFirefox: function () {
|
||||
return this.isMobile() && this.isFirefox();
|
||||
},
|
||||
|
||||
// **************************************************************************
|
||||
// **************************************************************************
|
||||
|
||||
isIOS: function () {
|
||||
return this.userAgent().match(/iPhone|iPad|iPod/i) != null;
|
||||
},
|
||||
|
||||
isAndroid: function () {
|
||||
return this.userAgent().match(/Android/i) != null;
|
||||
},
|
||||
|
||||
isWindows: function () {
|
||||
return this.userAgent().match(/Windows/i) != null;
|
||||
},
|
||||
|
||||
isUnix: function () {
|
||||
return this.userAgent().match(/Unix/i) != null;
|
||||
},
|
||||
|
||||
isMac: function () {
|
||||
return this.userAgent().match(/Mac/i) != null && !this.isIOS();
|
||||
},
|
||||
|
||||
isLinux: function () {
|
||||
return this.userAgent().match(/Linux/i) != null && !this.isAndroid();
|
||||
},
|
||||
|
||||
isBlackBerry: function () {
|
||||
return this.userAgent().match(/BlackBerry/i) != null;
|
||||
},
|
||||
|
||||
// isIPad: function() { << untested
|
||||
// return (/ipad/gi).test(navigator.platform);
|
||||
// },
|
||||
|
||||
// isIPhone: function() { << untested
|
||||
// return (/iphone/gi).test(navigator.platform);
|
||||
// },
|
||||
|
||||
// isLandscape: function() { << I think window.orientation makes more sense
|
||||
// return window.innerHeight < window.innerWidth;
|
||||
// },
|
||||
|
||||
// isPortrait: function() { << I think window.orientation makes more sense
|
||||
// return !this.isLandscape();
|
||||
// },
|
||||
|
||||
// **************************************************************************
|
||||
// **************************************************************************
|
||||
|
||||
version: function () {
|
||||
return this.browserName().replace(/^\D+/g, '');
|
||||
},
|
||||
|
||||
maxTouchPoints: function () {
|
||||
return navigator.maxTouchPoints || undefined;
|
||||
},
|
||||
|
||||
isTouch: function () {
|
||||
return 'ontouchstart' in window || 'onmsgesturechange' in window;
|
||||
// return 'ontouchstart' in document.documentElement;
|
||||
},
|
||||
};
|
Loading…
Reference in a new issue