dce-expresskit
Version:
Shared functions, helpers, and tools for Harvard DCE Express-based servers
108 lines • 3.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Perform a rudimentary parsing of the user's browser agent string
* @author Gabe Abrams
* @param userAgent the user's browser agent
* @returns user info
*/
var parseUserAgent = function (userAgent) {
/* ------------- Browser ------------ */
var browser = {
name: 'Unknown',
version: 'Unknown',
};
// Parse user agent
var verOffset;
var nameOffset;
if ((verOffset = userAgent.indexOf('Opera')) !== -1) {
// In Opera, the true version is after 'Opera' or after 'Version'
browser = {
name: 'Opera',
version: userAgent.substring(verOffset + 6),
};
if ((verOffset = userAgent.indexOf('Version')) !== -1) {
browser.version = userAgent.substring(verOffset + 8);
}
}
else if ((verOffset = userAgent.indexOf('MSIE')) !== -1) {
// In MSIE, the true version is after 'MSIE' in userAgent
browser = {
name: 'Internet Explorer',
version: userAgent.substring(verOffset + 5),
};
}
else if ((verOffset = userAgent.indexOf('Chrome')) !== -1) {
// In Chrome, the true version is after 'Chrome'
browser = {
name: 'Chrome',
version: userAgent.substring(verOffset + 7),
};
}
else if ((verOffset = userAgent.indexOf('Safari')) !== -1) {
// In Safari, the true version is after 'Safari' or after 'Version'
browser = {
name: 'Safari',
version: userAgent.substring(verOffset + 7),
};
if ((verOffset = userAgent.indexOf('Version')) !== -1) {
browser.version = userAgent.substring(verOffset + 8);
}
}
else if ((verOffset = userAgent.indexOf('Firefox')) != -1) {
// In Firefox, the true version is after 'Firefox'
browser = {
name: 'Firefox',
version: userAgent.substring(verOffset + 8),
};
}
else if ((nameOffset = userAgent.lastIndexOf(' ') + 1)
< (verOffset = userAgent.lastIndexOf('/'))) {
browser = {
name: userAgent.substring(nameOffset, verOffset),
version: userAgent.substring(verOffset + 1),
};
}
// Postprocess version
// trim the fullVersion string at semicolon/space if present
var ix;
if ((ix = browser.version.indexOf(';')) !== -1) {
browser.version = browser.version.substring(0, ix);
}
if ((ix = browser.version.indexOf(' ')) !== -1) {
browser.version = browser.version.substring(0, ix);
}
/* ------------- Device ------------- */
// Detect os
var os = 'Unknown';
if (userAgent.includes('Linux')) {
os = 'Linux';
}
else if (userAgent.includes('like Mac')) {
os = 'iOS';
}
else if (userAgent.includes('Mac')) {
os = 'Mac';
}
else if (userAgent.includes('Android')) {
os = 'Android';
}
else if (userAgent.includes('Win')) {
os = 'Win';
}
// Check if mobile
var isMobile = !!userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);
// Device
var device = {
isMobile: isMobile,
os: os,
};
/* ------------- Finish ------------- */
// Return info
return {
browser: browser,
device: device,
};
};
exports.default = parseUserAgent;
//# sourceMappingURL=parseUserAgent.js.map