diff options
author | Derrell Lipman <derrell@samba.org> | 2006-12-30 05:09:59 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:30:29 -0500 |
commit | 1170417ceeb8c49a46cda522a38eaa71c9cae30c (patch) | |
tree | dbf4c3fdcdb1af928dbd55f642ea40f00d09283a /webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/sys/Client.js | |
parent | 23ccdca41670085da4486841b0d4900b4c8b02f3 (diff) | |
download | samba-1170417ceeb8c49a46cda522a38eaa71c9cae30c.tar.gz samba-1170417ceeb8c49a46cda522a38eaa71c9cae30c.tar.bz2 samba-1170417ceeb8c49a46cda522a38eaa71c9cae30c.zip |
r20414: Start to make SWAT usable by others. This is just a start...
(This used to be commit 26a34037a7ca6fbd05c5a6f7c2d5973e34bc6918)
Diffstat (limited to 'webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/sys/Client.js')
-rw-r--r-- | webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/sys/Client.js | 394 |
1 files changed, 394 insertions, 0 deletions
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/sys/Client.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/sys/Client.js new file mode 100644 index 0000000000..a32c0de8e5 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/sys/Client.js @@ -0,0 +1,394 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#module(core) + +************************************************************************ */ + +/*! + Basic client detection implementation + + Version shemes following wikipedia: major.minor[.revision[.build]] + http://en.wikipedia.org/wiki/Software_version +*/ +qx.OO.defineClass("qx.sys.Client", Object, +function() +{ + var vRunsLocally = window.location.protocol === "file:"; + + var vBrowserUserAgent = navigator.userAgent; + var vBrowserVendor = navigator.vendor; + var vBrowserProduct = navigator.product; + var vBrowserPlatform = navigator.platform; + var vBrowserModeHta = false; + var vBrowser; + + var vEngine = null; + var vEngineVersion = null; + var vEngineVersionMajor = 0; + var vEngineVersionMinor = 0; + var vEngineVersionRevision = 0; + var vEngineVersionBuild = 0; + + var vEngineEmulation = null; + var vVersionHelper; + + if (window.opera && /Opera[\s\/]([0-9\.]*)/.test(vBrowserUserAgent)) + { + vEngine = "opera"; + vEngineVersion = RegExp.$1; + + // Fix Opera version to match wikipedia style + vEngineVersion = vEngineVersion.substring(0, 3) + "." + vEngineVersion.substring(3); + + vEngineEmulation = vBrowserUserAgent.indexOf("MSIE") !== -1 ? "mshtml" : vBrowserUserAgent.indexOf("Mozilla") !== -1 ? "gecko" : null; + } + else if (typeof vBrowserVendor==="string" && vBrowserVendor==="KDE" && /KHTML\/([0-9-\.]*)/.test(vBrowserUserAgent)) + { + vEngine = "khtml"; + vBrowser = "konqueror"; + vEngineVersion = RegExp.$1; + } + else if (vBrowserUserAgent.indexOf("AppleWebKit") != -1 && /AppleWebKit\/([0-9-\.]*)/.test(vBrowserUserAgent)) + { + vEngine = "webkit"; + vEngineVersion = RegExp.$1; + + if(vBrowserUserAgent.indexOf("Safari") != -1) { + vBrowser = "safari"; + } else if(vBrowserUserAgent.indexOf("Omni") != -1) { + vBrowser = "omniweb"; + } else { + vBrowser = "other webkit"; + } + } + else if (window.controllers && typeof vBrowserProduct==="string" && vBrowserProduct==="Gecko" && /rv\:([^\);]+)(\)|;)/.test(vBrowserUserAgent)) + { + // http://www.mozilla.org/docs/dom/domref/dom_window_ref13.html + vEngine = "gecko"; + vEngineVersion = RegExp.$1; + + if(vBrowserUserAgent.indexOf("Firefox") != -1) { + vBrowser = "firefox"; + } else if(vBrowserUserAgent.indexOf("Camino") != -1) { + vBrowser = "camino"; + } else if(vBrowserUserAgent.indexOf("Galeon") != -1) { + vBrowser = "galeon"; + } else { + vBrowser = "other gecko"; + } + } + else if (/MSIE\s+([^\);]+)(\)|;)/.test(vBrowserUserAgent)) + { + vEngine = "mshtml"; + vEngineVersion = RegExp.$1; + + vBrowserModeHta = !window.external; + } + + if (vEngineVersion) + { + vVersionHelper = vEngineVersion.split("."); + + vEngineVersionMajor = vVersionHelper[0] || 0; + vEngineVersionMinor = vVersionHelper[1] || 0; + vEngineVersionRevision = vVersionHelper[2] || 0; + vEngineVersionBuild = vVersionHelper[3] || 0; + } + + var vEngineBoxSizingAttr = vEngine == "gecko" ? "-moz-box-sizing" : vEngine == "mshtml" ? null : "box-sizing"; + var vEngineQuirksMode = document.compatMode !== "CSS1Compat"; + + var vDefaultLocale = "en"; + var vBrowserLocale = (vEngine == "mshtml" ? navigator.userLanguage : navigator.language).toLowerCase(); + var vBrowserLocaleVariant = null; + + var vBrowserLocaleVariantIndex = vBrowserLocale.indexOf("-"); + if (vBrowserLocaleVariantIndex != -1) + { + vBrowserLocaleVariant = vBrowserLocale.substr(vBrowserLocaleVariantIndex+1); + vBrowserLocale = vBrowserLocale.substr(0, vBrowserLocaleVariantIndex); + } + + var vPlatform = "none"; + var vPlatformWindows = false; + var vPlatformMacintosh = false; + var vPlatformUnix = false; + var vPlatformOther = false; + + if (vBrowserPlatform.indexOf("Windows") != -1 || vBrowserPlatform.indexOf("Win32") != -1 || vBrowserPlatform.indexOf("Win64") != -1) + { + vPlatformWindows = true; + vPlatform = "win"; + } + else if (vBrowserPlatform.indexOf("Macintosh") != -1 || vBrowserPlatform.indexOf("MacIntel") != -1) + { + vPlatformMacintosh = true; + vPlatform = "mac"; + } + else if (vBrowserPlatform.indexOf("X11") != -1 || vBrowserPlatform.indexOf("Linux") != -1 || vBrowserPlatform.indexOf("BSD") != -1) + { + vPlatformUnix = true; + vPlatform = "unix"; + } + else + { + vPlatformOther = true; + vPlatform = "other"; + } + + var vGfxVml = false; + var vGfxSvg = false; + var vGfxSvgBuiltin = false; + var vGfxSvgPlugin = false; + + if (vEngine == "mshtml") + { + vGfxVml = true; + + // TODO: Namespace for VML: + // document.write('<style>v\:*{ behavior:url(#default#VML); }</style>'); + // document.write('<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v"/>'); + } + + if (document.implementation && document.implementation.hasFeature) + { + if (document.implementation.hasFeature("org.w3c.dom.svg", "1.0")) + { + vGfxSvg = vGfxSvgBuiltin = true; + } + } + + this._runsLocally = vRunsLocally; + + this._engineName = vEngine; + this._engineNameMshtml = vEngine === "mshtml"; + this._engineNameGecko = vEngine === "gecko"; + this._engineNameOpera = vEngine === "opera"; + this._engineNameKhtml = vEngine === "khtml"; + this._engineNameWebkit = vEngine === "webkit"; + + this._engineVersion = parseFloat(vEngineVersion); + this._engineVersionMajor = parseInt(vEngineVersionMajor); + this._engineVersionMinor = parseInt(vEngineVersionMinor); + this._engineVersionRevision = parseInt(vEngineVersionRevision); + this._engineVersionBuild = parseInt(vEngineVersionBuild); + + this._engineQuirksMode = vEngineQuirksMode; + this._engineBoxSizingAttribute = vEngineBoxSizingAttr; + this._engineEmulation = vEngineEmulation; + + this._defaultLocale = vDefaultLocale; + + this._browserPlatform = vPlatform; + this._browserPlatformWindows = vPlatformWindows; + this._browserPlatformMacintosh = vPlatformMacintosh; + this._browserPlatformUnix = vPlatformUnix; + this._browserPlatformOther = vPlatformOther; + this._browserModeHta = vBrowserModeHta; + this._browserLocale = vBrowserLocale; + this._browserLocaleVariant = vBrowserLocaleVariant; + + this._gfxVml = vGfxVml; + this._gfxSvg = vGfxSvg; + this._gfxSvgBuiltin = vGfxSvgBuiltin; + this._gfxSvgPlugin = vGfxSvgPlugin; + + this._supportsTextContent = (document.documentElement.textContent !== undefined); + this._supportsInnerText = (document.documentElement.innerText !== undefined); +}); + + + + + +/* +--------------------------------------------------------------------------- + METHODS +--------------------------------------------------------------------------- +*/ + +qx.Proto.getRunsLocally = function() { + return this._runsLocally; +} + +qx.Proto.getEngine = function() { + return this._engineName; +} + +qx.Proto.getVersion = function() { + return this._engineVersion; +} + +qx.Proto.getMajor = function() { + return this._engineVersionMajor; +} + +qx.Proto.getMinor = function() { + return this._engineVersionMinor; +} + +qx.Proto.getRevision = function() { + return this._engineVersionRevision; +} + +qx.Proto.getBuild = function() { + return this._engineVersionBuild; +} + +qx.Proto.getEmulation = function() { + return this._engineEmulation; +} + +qx.Proto.isMshtml = function() { + return this._engineNameMshtml; +} + +qx.Proto.isGecko = function() { + return this._engineNameGecko; +} + +qx.Proto.isOpera = function() { + return this._engineNameOpera; +} + +qx.Proto.isKhtml = function() { + return this._engineNameKhtml; +} + +qx.Proto.isWebkit = function() { + return this._engineNameWebkit; +} + +qx.Proto.isSafari2 = function() { + return this._engineNameWebkit && (this._engineVersion < 420); +} + +qx.Proto.isInQuirksMode = function() { + return this._engineQuirksMode; +} + +qx.Proto.getLocale = function() { + return this._browserLocale; +} + +qx.Proto.getLocaleVariant = function() { + return this._browserLocaleVariant; +} + +qx.Proto.getDefaultLocale = function() { + return this._defaultLocale; +} + +qx.Proto.usesDefaultLocale = function() { + return this._browserLocale === this._defaultLocale; +} + + + +/** + * Returns the CSS attribute name for box-sizing if supported. + * + * @return {string} the attribute name. + */ +qx.Proto.getEngineBoxSizingAttribute = function() { + return this._engineBoxSizingAttribute; +} + + +qx.Proto.getPlatform = function() { + return this._browserPlatform; +} + +/** + * Returns whether the client platform is a Windows machine. + * + * @return {boolean} whether the client platform is a Windows. + */ +qx.Proto.runsOnWindows = function() { + return this._browserPlatformWindows; +} + +/** + * Returns whether the client platform is a Macintosh machine. + * + * @return {boolean} whether the client platform is a Macintosh. + */ +qx.Proto.runsOnMacintosh = function() { + return this._browserPlatformMacintosh; +} + +/** + * Returns whether the client platform is a X11 powered machine. + * + * @return {boolean} whether the client platform is a X11 powered machine. + */ +qx.Proto.runsOnUnix = function() { + return this._browserPlatformUnix; +} + +qx.Proto.supportsVml = function() { + return this._gfxVml; +} + +qx.Proto.supportsSvg = function() { + return this._gfxSvg; +} + +qx.Proto.usesSvgBuiltin = function() { + return this._gfxSvgBuiltin; +} + +qx.Proto.usesSvgPlugin = function() { + return this._gfxSvgPlugin; +} + + +/** + * Returns whether the client supports the W3C property textContent of DOM element nodes. + * + * @return {boolean} whether the client supports textContent. + */ +qx.Proto.supportsTextContent = function() { + return this._supportsTextContent; +} + + +/** + * Returns whether the client supports the W3C property innerText of DOM element nodes. + * + * @return {boolean} whether the client supports innerText. + */ +qx.Proto.supportsInnerText = function() { + return this._supportsInnerText; +} + + + +/* +--------------------------------------------------------------------------- + DEFER SINGLETON INSTANCE +--------------------------------------------------------------------------- +*/ + +/** + * Singleton Instance Getter + */ +qx.Class.getInstance = qx.util.Return.returnInstance; |