From e44a7e37b6c7b5961adaffc62b9042b8d442938e Mon Sep 17 00:00:00 2001 From: mensonge Date: Thu, 13 Nov 2008 09:49:11 +0000 Subject: New feature: basic Ajax suggestion for tags and implementation of Dojo toolkit git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@151 b3834d28-1941-0410-a4f8-b48e95affb8f --- includes/js/dijit/_base/wai.js | 143 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 includes/js/dijit/_base/wai.js (limited to 'includes/js/dijit/_base/wai.js') diff --git a/includes/js/dijit/_base/wai.js b/includes/js/dijit/_base/wai.js new file mode 100644 index 0000000..a9d47a2 --- /dev/null +++ b/includes/js/dijit/_base/wai.js @@ -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); + } + } +}); + +} -- cgit v1.2.3-54-g00ecf