@qooxdoo/framework
Version:
The JS Framework for Coders
251 lines (223 loc) • 7.12 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2011 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Martin Wittemann (martinwittemann)
* Sebastian Fastner (fastner)
************************************************************************ */
/**
* This class is responsible for checking the operating systems name.
*
* This class is used by {@link qx.core.Environment} and should not be used
* directly. Please check its class comment for details how to use it.
*
* @internal
* @ignore(process.*)
*/
qx.Bootstrap.define("qx.bom.client.OperatingSystem", {
statics: {
/**
* Checks for the name of the operating system.
* @return {String} The name of the operating system.
* @internal
* @ignore(process.*)
*
*/
getName() {
if (typeof process != "undefined" && process.platform) {
const MAP = {
win32: "win",
darwin: "osx",
linux: "linux",
aix: "unix",
freebsd: "unix",
openbsd: "unix",
sunos: "unix",
android: "android"
};
return MAP[process.platform] || "";
}
if (!navigator) {
return "";
}
var input = navigator.platform || "";
var agent = navigator.userAgent || "";
if (
input.indexOf("Windows") != -1 ||
input.indexOf("Win32") != -1 ||
input.indexOf("Win64") != -1 ||
agent.indexOf("Windows Phone") != -1
) {
return "win";
} else if (
input.indexOf("Macintosh") != -1 ||
input.indexOf("MacPPC") != -1 ||
input.indexOf("MacIntel") != -1 ||
input.indexOf("Mac OS X") != -1
) {
return "osx";
} else if (agent.indexOf("RIM Tablet OS") != -1) {
return "rim_tabletos";
} else if (agent.indexOf("webOS") != -1) {
return "webos";
} else if (
input.indexOf("iPod") != -1 ||
input.indexOf("iPhone") != -1 ||
input.indexOf("iPad") != -1
) {
return "ios";
} else if (agent.indexOf("Android") != -1) {
return "android";
} else if (input.indexOf("Linux") != -1) {
return "linux";
} else if (
input.indexOf("X11") != -1 ||
input.indexOf("BSD") != -1 ||
input.indexOf("Darwin") != -1
) {
return "unix";
} else if (input.indexOf("SymbianOS") != -1) {
return "symbian";
} else if (input.indexOf("BlackBerry") != -1) {
return "blackberry";
}
// don't know
return "";
},
/** Maps user agent names to system IDs */
__ids: {
// Windows
"Windows NT 10.0": "10",
"Windows NT 6.3": "8.1",
"Windows NT 6.2": "8",
"Windows NT 6.1": "7",
"Windows NT 6.0": "vista",
"Windows NT 5.2": "2003",
"Windows NT 5.1": "xp",
"Windows NT 5.0": "2000",
"Windows 2000": "2000",
"Windows NT 4.0": "nt4",
"Win 9x 4.90": "me",
"Windows CE": "ce",
"Windows 98": "98",
Win98: "98",
"Windows 95": "95",
Win95: "95",
// OS X
"Mac OS X 10_15": "10.15",
"Mac OS X 10_14": "10.14",
"Mac OS X 10_13": "10.13",
"Mac OS X 10.13": "10.13",
"Mac OS X 10_12": "10.12",
"Mac OS X 10.12": "10.12",
"Mac OS X 10_11": "10.11",
"Mac OS X 10.11": "10.11",
"Mac OS X 10_10": "10.10",
"Mac OS X 10.10": "10.10",
"Mac OS X 10_9": "10.9",
"Mac OS X 10.9": "10.9",
"Mac OS X 10_8": "10.8",
"Mac OS X 10.8": "10.8",
"Mac OS X 10_7": "10.7",
"Mac OS X 10.7": "10.7",
"Mac OS X 10_6": "10.6",
"Mac OS X 10.6": "10.6",
"Mac OS X 10_5": "10.5",
"Mac OS X 10.5": "10.5",
"Mac OS X 10_4": "10.4",
"Mac OS X 10.4": "10.4",
"Mac OS X 10_3": "10.3",
"Mac OS X 10.3": "10.3",
"Mac OS X 10_2": "10.2",
"Mac OS X 10.2": "10.2",
"Mac OS X 10_1": "10.1",
"Mac OS X 10.1": "10.1",
"Mac OS X 10_0": "10.0",
"Mac OS X 10.0": "10.0"
},
/**
* Checks for the version of the operating system using the internal map.
*
* @internal
* @return {String} The version as strin or an empty string if the version
* could not be detected.
*/
getVersion() {
var version = qx.bom.client.OperatingSystem.__getVersionForDesktopOs(
navigator.userAgent
);
if (version == null) {
version = qx.bom.client.OperatingSystem.__getVersionForMobileOs(
navigator.userAgent
);
}
if (version != null) {
return version;
} else {
return "";
}
},
/**
* Detect OS version for desktop devices
* @param userAgent {String} userAgent parameter, needed for detection.
* @return {String} version number as string or null.
*/
__getVersionForDesktopOs(userAgent) {
var str = [];
for (var key in qx.bom.client.OperatingSystem.__ids) {
str.push(key);
}
var reg = new RegExp("(" + str.join("|").replace(/\./g, ".") + ")", "g");
var match = reg.exec(userAgent);
if (match && match[1]) {
return qx.bom.client.OperatingSystem.__ids[match[1]];
}
return null;
},
/**
* Detect OS version for mobile devices
* @param userAgent {String} userAgent parameter, needed for detection.
* @return {String} version number as string or null.
*/
__getVersionForMobileOs(userAgent) {
var windows = userAgent.indexOf("Windows Phone") != -1;
var android = userAgent.indexOf("Android") != -1;
var iOs = userAgent.match(/(iPad|iPhone|iPod)/i) ? true : false;
if (windows) {
var windowsVersionRegExp = new RegExp(/Windows Phone (\d+(?:\.\d+)+)/i);
var windowsMatch = windowsVersionRegExp.exec(userAgent);
if (windowsMatch && windowsMatch[1]) {
return windowsMatch[1];
}
} else if (android) {
var androidVersionRegExp = new RegExp(/ Android (\d+(?:\.\d+)+)/i);
var androidMatch = androidVersionRegExp.exec(userAgent);
if (androidMatch && androidMatch[1]) {
return androidMatch[1];
}
} else if (iOs) {
var iOsVersionRegExp = new RegExp(
/(CPU|iPhone|iPod) OS (\d+)_(\d+)(?:_(\d+))*\s+/
);
var iOsMatch = iOsVersionRegExp.exec(userAgent);
if (iOsMatch && iOsMatch[2] && iOsMatch[3]) {
if (iOsMatch[4]) {
return iOsMatch[2] + "." + iOsMatch[3] + "." + iOsMatch[4];
} else {
return iOsMatch[2] + "." + iOsMatch[3];
}
}
}
return null;
}
},
defer(statics) {
qx.core.Environment.add("os.name", statics.getName);
qx.core.Environment.add("os.version", statics.getVersion);
}
});