/**
* JavaScript Client Detection
* (C) viazenetti GmbH (Christian Ludwig)
*/
'use strict';
/**
* This class implements logging of user info
* e.g browser, OS, resolution
*
* @constructor
*/
SUXESS.UserAgentLogger = function () {
this._screenSize = this.getScreenSize();
this._browser = this.getBrowser();
this._mobile = this.isMobile();
this._os = this.getOs();
};
/**
*
* @returns {*}
*/
SUXESS.UserAgentLogger.prototype.getScreenSize = function () {
var width = 0;
var height = 0;
if (screen.width) {
width = (screen.width) ? screen.width : '';
height = (screen.height) ? screen.height : '';
}
return [width, height];
};
/**
*
* @returns {string}
*/
SUXESS.UserAgentLogger.prototype.getBrowser = function () {
// browser
var nAgt = navigator.userAgent;
var browser = navigator.appName;
var nameOffset, verOffset;
// Opera
if (nAgt.indexOf('Opera') !== -1) {
browser = 'Opera';
}
// Opera Next
if (nAgt.indexOf('OPR') !== -1) {
browser = 'Opera';
}
// MSIE
else if (nAgt.indexOf('MSIE') !== -1) {
browser = 'Microsoft Internet Explorer';
}
// Chrome
else if (nAgt.indexOf('Chrome') !== -1) {
browser = 'Chrome';
}
// Safari
else if (nAgt.indexOf('Safari') !== -1) {
browser = 'Safari';
}
// Firefox
else if (nAgt.indexOf('Firefox') !== -1) {
browser = 'Firefox';
}
// MSIE 11+
else if (nAgt.indexOf('Trident/') !== -1) {
browser = 'Microsoft Internet Explorer';
}
// Other browsers
else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
browser = nAgt.substring(nameOffset, verOffset);
if (browser.toLowerCase() === browser.toUpperCase()) {
browser = navigator.appName;
}
}
return browser;
};
/**
*
* @returns {boolean}
*/
SUXESS.UserAgentLogger.prototype.isMobile = function() {
var nVer = navigator.appVersion;
return /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);
};
/**
*
* @returns {*}
*/
SUXESS.UserAgentLogger.prototype.getOs = function() {
var unknown = '-';
var nAgt = navigator.userAgent;
var nVer = navigator.appVersion;
var os = unknown;
var clientStrings = [
{s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/},
{s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},
{s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},
{s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},
{s:'Windows Vista', r:/Windows NT 6.0/},
{s:'Windows Server 2003', r:/Windows NT 5.2/},
{s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},
{s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},
{s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},
{s:'Windows 98', r:/(Windows 98|Win98)/},
{s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},
{s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},
{s:'Windows CE', r:/Windows CE/},
{s:'Windows 3.11', r:/Win16/},
{s:'Android', r:/Android/},
{s:'Open BSD', r:/OpenBSD/},
{s:'Sun OS', r:/SunOS/},
{s:'Linux', r:/(Linux|X11)/},
{s:'iOS', r:/(iPhone|iPad|iPod)/},
{s:'Mac OS X', r:/Mac OS X/},
{s:'Mac OS', r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},
{s:'QNX', r:/QNX/},
{s:'UNIX', r:/UNIX/},
{s:'BeOS', r:/BeOS/},
{s:'OS/2', r:/OS\/2/},
{s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/} // jshint ignore:line
];
for (var id in clientStrings) {
var cs = clientStrings[id];
if (cs.r.test(nAgt)) {
os = cs.s;
break;
}
}
var osVersion = unknown;
if (/Windows/.test(os)) {
osVersion = /Windows (.*)/.exec(os)[1];
os = 'Windows';
}
switch (os) {
case 'Mac OS X':
osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
break;
case 'Android':
osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];
break;
case 'iOS':
osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
break;
}
return [os, osVersion];
};