aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Bolter <david.bolter@gmail.com>2008-09-22 15:47:41 +0000
committerDavid Bolter <david.bolter@gmail.com>2008-09-22 15:47:41 +0000
commitfb3a5d40106a83d10734f203189dc390cfaa0b94 (patch)
tree39b0f4980fe1b4b32edbe961260e80bf2beaa431
parentcd8d1b76542dec366da6bf0d4f8bfe9da72be573 (diff)
downloadjquery-ui-fb3a5d40106a83d10734f203189dc390cfaa0b94.tar.gz
jquery-ui-fb3a5d40106a83d10734f203189dc390cfaa0b94.zip
Added ariaRole and ariaState to ui.core with tests.
Added ARIA role and state to ui.dialog Fixes #3350 (Inspired by jARIA plugin from Chris Hoffman)
-rw-r--r--tests/core.html1
-rw-r--r--tests/core.js15
-rw-r--r--ui/ui.core.js27
-rw-r--r--ui/ui.dialog.js2
4 files changed, 45 insertions, 0 deletions
diff --git a/tests/core.html b/tests/core.html
index 510d4f3a7..5da16011a 100644
--- a/tests/core.html
+++ b/tests/core.html
@@ -65,6 +65,7 @@
<input id="input4-3" tabindex="-1" />
<input id="input4-4" tabindex="-50" />
</div>
+ <div id="aria"></div>
</div>
</body>
diff --git a/tests/core.js b/tests/core.js
index 144c27265..f9885e684 100644
--- a/tests/core.js
+++ b/tests/core.js
@@ -53,4 +53,19 @@ test("tabbable - tabindex", function() {
ok(!$('#input4-4').is(':tabbable'), 'input, tabindex -50');
});
+test("aria", function() {
+ expect(10);
+
+ ok(!$('#aria').attr('role'), 'role is empty via attr');
+ ok(!$('#aria').ariaRole(), 'role is empty via ariaRole');
+ equals($('#aria').ariaRole('dialog').attr('role').replace(/^wairole:/, ""), 'dialog', 'role is dialog');
+ equals($('#aria').ariaRole(), 'dialog', 'role is dialog');
+ equals($('#aria').ariaRole('tablist').attr('role').replace(/^wairole:/, ""), 'tablist', 'role is tablist via attr');
+ equals($('#aria').ariaRole(), 'tablist', 'role is tablist via ariaRole');
+ ok(!$('#aria').attr('expanded'), 'state expanded absent via attr');
+ ok(!$('#aria').ariaState('expanded'), 'state expanded absent via ariaState');
+ equals($('#aria').ariaState('expanded', 'true').ariaState('expanded'), 'true', 'aria expanded is true');
+ equals($('#aria').ariaState('expanded', 'false').ariaState('expanded'), 'false', 'aria expanded is false');
+});
+
})(jQuery);
diff --git a/ui/ui.core.js b/ui/ui.core.js
index 2cf48d11f..be0caa920 100644
--- a/ui/ui.core.js
+++ b/ui/ui.core.js
@@ -437,4 +437,31 @@ $.ui.mouse.defaults = {
delay: 0
};
+
+// WAI-ARIA Semantics
+var isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9);
+$.fn.extend({
+ ariaRole : function(role) {
+ // setter?
+ if (role) {
+ return this.each(function(i, el) {
+ $(el).attr("role", isFF2 ? "wairole:" + role : role);
+ });
+ }
+ // getter just returns first jquery member's role string
+ return (this.eq(0).attr("role") || "").replace(/^wairole:/, "");
+ },
+
+ ariaState : function(state, value) {
+ // setter?
+ if (value)
+ return this.each(function(i, el) {
+ isFF2? el.setAttributeNS("http://www.w3.org/2005/07/aaa", "aaa:" + state, value) :
+ $(el).attr("aria-" + state, value);
+ });
+ // getter
+ return this.attr(isFF2? "aaa:"+state : "aria-" + state);
+ }
+});
+
})(jQuery);
diff --git a/ui/ui.dialog.js b/ui/ui.dialog.js
index c0a99494c..c856af5ce 100644
--- a/ui/ui.dialog.js
+++ b/ui/ui.dialog.js
@@ -84,6 +84,8 @@ $.widget("ui.dialog", {
(options.closeOnEscape && ev.keyCode
&& ev.keyCode == $.keyCode.ESCAPE && self.close());
})
+ .ariaRole("dialog")
+ .ariaState("labelledby", titleId)
.mousedown(function() {
self._moveToTop();
}),