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: // Function that detects if we are in high-contrast mode or not, // and sets up a timer to periodically confirm the value. // figure out the background-image style property // and apply that to the image.src property. // description: // 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 = document.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("dijit", "form/templates/blank.gif") + '");'; dojo.body().appendChild(div); // test it function check() { 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"); } } check(); if (dojo.isIE) { setInterval(check, 4000); } } }; // 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: Return true if elem has a role attribute and false if // not. if (elem.hasAttribute) { return elem.hasAttribute("role"); } else { return elem.getAttribute("role") ? true : false; } }, getWaiRole : function(/* Element */elem) { // Summary: Return 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: Set the role on elem. On Firefox 2 and below, "wairole:" // is // prepended to the provided role value. if (dojo.isFF && dojo.isFF < 3) { elem.setAttribute("role", "wairole:" + role); } else { elem.setAttribute("role", role); } }, removeWaiRole : function(/* Element */elem) { // Summary: Removes the role attribute from elem. elem.removeAttribute("role"); }, hasWaiState : function(/* Element */elem, /* String */state) { // Summary: Return true if elem has a value for the given state and // false if it does not. // 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. if (dojo.isFF && dojo.isFF < 3) { return elem.hasAttributeNS("http://www.w3.org/2005/07/aaa", state); } else { if (elem.hasAttribute) { return elem.hasAttribute("aria-" + state); } else { return elem.getAttribute("aria-" + state) ? true : false; } } }, getWaiState : function(/* Element */elem, /* String */state) { // Summary: Return the value of the requested state on elem // or an empty string if elem has no value for state. // 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. 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: Set state on elem to value. // 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 the given state from elem. // 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); } } }); }