uacss.js 1.9 KB

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