uacss.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. define(["./dom-geometry", "./_base/lang", "./domReady", "./sniff", "./_base/window"],
  2. function(geometry, lang, domReady, has, baseWindow){
  3. // module:
  4. // dojo/uacss
  5. /*=====
  6. return {
  7. // summary:
  8. // Applies pre-set CSS classes to the top-level HTML node, based on:
  9. //
  10. // - browser (ex: dj_ie)
  11. // - browser version (ex: dj_ie6)
  12. // - box model (ex: dj_contentBox)
  13. // - text direction (ex: dijitRtl)
  14. //
  15. // In addition, browser, browser version, and box model are
  16. // combined with an RTL flag when browser text is RTL. ex: dj_ie-rtl.
  17. //
  18. // Returns the has() method.
  19. };
  20. =====*/
  21. var
  22. html = baseWindow.doc.documentElement,
  23. ie = has("ie"),
  24. opera = has("opera"),
  25. maj = Math.floor,
  26. ff = has("ff"),
  27. boxModel = geometry.boxModel.replace(/-/,''),
  28. classes = {
  29. "dj_quirks": has("quirks"),
  30. // NOTE: Opera not supported by dijit
  31. "dj_opera": opera,
  32. "dj_khtml": has("khtml"),
  33. "dj_webkit": has("webkit"),
  34. "dj_safari": has("safari"),
  35. "dj_chrome": has("chrome"),
  36. "dj_gecko": has("mozilla"),
  37. "dj_ios": has("ios"),
  38. "dj_android": has("android")
  39. }; // no dojo unsupported browsers
  40. if(ie){
  41. classes["dj_ie"] = true;
  42. classes["dj_ie" + maj(ie)] = true;
  43. classes["dj_iequirks"] = has("quirks");
  44. }
  45. if(ff){
  46. classes["dj_ff" + maj(ff)] = true;
  47. }
  48. classes["dj_" + boxModel] = true;
  49. // apply browser, browser version, and box model class names
  50. var classStr = "";
  51. for(var clz in classes){
  52. if(classes[clz]){
  53. classStr += clz + " ";
  54. }
  55. }
  56. html.className = lang.trim(html.className + " " + classStr);
  57. // If RTL mode, then add dj_rtl flag plus repeat existing classes with -rtl extension.
  58. // We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl).
  59. domReady(function(){
  60. if(!geometry.isBodyLtr()){
  61. var rtlClassStr = "dj_rtl dijitRtl " + classStr.replace(/ /g, "-rtl ");
  62. html.className = lang.trim(html.className + " " + rtlClassStr + "dj_rtl dijitRtl " + classStr.replace(/ /g, "-rtl "));
  63. }
  64. });
  65. return has;
  66. });