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); } } }); }