]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dijit/_base/wai.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dijit / _base / wai.js
diff --git a/static/dojo-release-1.1.1/dijit/_base/wai.js b/static/dojo-release-1.1.1/dijit/_base/wai.js
new file mode 100644 (file)
index 0000000..a9d47a2
--- /dev/null
@@ -0,0 +1,143 @@
+if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.wai"] = true;
+dojo.provide("dijit._base.wai");
+
+dijit.wai = {
+       onload: function(){
+               // summary:
+               //              Detects if we are in high-contrast mode or not
+
+               // This must be a named function and not an anonymous
+               // function, so that the widget parsing code can make sure it
+               // registers its onload function after this function.
+               // DO NOT USE "this" within this function.
+
+               // create div for testing if high contrast mode is on or images are turned off
+               var div = dojo.doc.createElement("div");
+               div.id = "a11yTestNode";
+               div.style.cssText = 'border: 1px solid;'
+                       + 'border-color:red green;'
+                       + 'position: absolute;'
+                       + 'height: 5px;'
+                       + 'top: -999px;'
+                       + 'background-image: url("' + dojo.moduleUrl("dojo", "resources/blank.gif") + '");';
+               dojo.body().appendChild(div);
+
+               // test it
+               var cs = dojo.getComputedStyle(div);
+               if(cs){
+                       var bkImg = cs.backgroundImage;
+                       var needsA11y = (cs.borderTopColor==cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" ));
+                       dojo[needsA11y ? "addClass" : "removeClass"](dojo.body(), "dijit_a11y");
+                       dojo.body().removeChild(div);
+               }
+       }
+};
+
+// Test if computer is in high contrast mode.
+// Make sure the a11y test runs first, before widgets are instantiated.
+if(dojo.isIE || dojo.isMoz){   // NOTE: checking in Safari messes things up
+       dojo._loaders.unshift(dijit.wai.onload);
+}
+
+dojo.mixin(dijit,
+{
+       hasWaiRole: function(/*Element*/ elem){
+               // summary: Determines if an element has a role.
+               // returns: true if elem has a role attribute and false if not.
+               return elem.hasAttribute ? elem.hasAttribute("role") : !!elem.getAttribute("role");
+       },
+
+       getWaiRole: function(/*Element*/ elem){
+               // summary: Gets the role for an element.
+               // returns:
+               //              The role of elem or an empty string if elem
+               //              does not have a role.
+               var value = elem.getAttribute("role");
+               if(value){
+                       var prefixEnd = value.indexOf(":");
+                       return prefixEnd == -1 ? value : value.substring(prefixEnd+1);
+               }else{
+                       return "";
+               }
+       },
+
+       setWaiRole: function(/*Element*/ elem, /*String*/ role){
+               // summary: Sets the role on an element.
+               // description:
+               //              On Firefox 2 and below, "wairole:" is
+               //              prepended to the provided role value.
+               elem.setAttribute("role", (dojo.isFF && dojo.isFF < 3) ? "wairole:" + role : role);
+       },
+
+       removeWaiRole: function(/*Element*/ elem){
+               // summary: Removes the role from an element.
+               elem.removeAttribute("role");
+       },
+
+       hasWaiState: function(/*Element*/ elem, /*String*/ state){
+               // summary: Determines if an element has a given state.
+               // description:
+               //              On Firefox 2 and below, we check for an attribute in namespace
+               //              "http://www.w3.org/2005/07/aaa" with a name of the given state.
+               //              On all other browsers, we check for an attribute
+               //              called "aria-"+state.
+               // returns:
+               //              true if elem has a value for the given state and
+               //              false if it does not.
+               if(dojo.isFF && dojo.isFF < 3){
+                       return elem.hasAttributeNS("http://www.w3.org/2005/07/aaa", state);
+               }else{
+                       return elem.hasAttribute ? elem.hasAttribute("aria-"+state) : !!elem.getAttribute("aria-"+state);
+               }
+       },
+
+       getWaiState: function(/*Element*/ elem, /*String*/ state){
+               // summary: Gets the value of a state on an element.
+               // description:
+               //              On Firefox 2 and below, we check for an attribute in namespace
+               //              "http://www.w3.org/2005/07/aaa" with a name of the given state.
+               //              On all other browsers, we check for an attribute called
+               //              "aria-"+state.
+               // returns:
+               //              The value of the requested state on elem
+               //              or an empty string if elem has no value for state.
+               if(dojo.isFF && dojo.isFF < 3){
+                       return elem.getAttributeNS("http://www.w3.org/2005/07/aaa", state);
+               }else{
+                       var value = elem.getAttribute("aria-"+state);
+                       return value ? value : "";
+               }
+       },
+
+       setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){
+               // summary: Sets a state on an element.
+               // description:
+               //              On Firefox 2 and below, we set an attribute in namespace
+               //              "http://www.w3.org/2005/07/aaa" with a name of the given state.
+               //              On all other browsers, we set an attribute called
+               //              "aria-"+state.
+               if(dojo.isFF && dojo.isFF < 3){
+                       elem.setAttributeNS("http://www.w3.org/2005/07/aaa",
+                               "aaa:"+state, value);
+               }else{
+                       elem.setAttribute("aria-"+state, value);
+               }
+       },
+
+       removeWaiState: function(/*Element*/ elem, /*String*/ state){
+               // summary: Removes a state from an element.
+               // description:
+               //              On Firefox 2 and below, we remove the attribute in namespace
+               //              "http://www.w3.org/2005/07/aaa" with a name of the given state.
+               //              On all other browsers, we remove the attribute called
+               //              "aria-"+state.
+               if(dojo.isFF && dojo.isFF < 3){
+                       elem.removeAttributeNS("http://www.w3.org/2005/07/aaa", state);
+               }else{
+                       elem.removeAttribute("aria-"+state);
+               }
+       }
+});
+
+}