UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

250 lines (210 loc) 6.77 kB
/* ************************************************************************ 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 */ 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 */ getName : function() { 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_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 : function() { 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 : function(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 : function(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 : function(statics) { qx.core.Environment.add("os.name", statics.getName); qx.core.Environment.add("os.version", statics.getVersion); } });