From 6fb3ffad36e9ac318a186d471d60459d6b16094c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Sat, 15 Nov 2008 04:29:08 +0000 Subject: [PATCH] Core: Fixed #3562: Modify .removeAttr() to work on ARIA properties in FF2. --- tests/core.js | 21 ++++++++++++++++----- ui/ui.core.js | 12 ++++++++++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/tests/core.js b/tests/core.js index 6c701de41..0836fb588 100644 --- a/tests/core.js +++ b/tests/core.js @@ -56,12 +56,23 @@ test("tabbable - tabindex", function() { module('jQuery extensions'); test("attr - aria", function() { - expect(4); + expect(6); - ok(!$('#aria').attr('role'), 'role is empty via attr'); - equals($('#aria').attr('role', 'tablist').attr('role'), 'tablist', 'role is tablist'); - equals($('#aria').attr('aria-expanded', true).attr('aria-expanded'), 'true', 'aria expanded is true'); - equals($('#aria').attr('aria-expanded', false).attr('aria-expanded'), 'false', 'aria expanded is false'); + var el = $('#aria'); + + ok(!el.attr('role'), 'role is empty via attr'); + equals(el.attr('role', 'tablist').attr('role'), 'tablist', 'role is tablist'); + + equals(el.attr('aria-expanded'), undefined, 'aria expanded is undefined'); + + el.attr('aria-expanded', true); + equals(el.attr('aria-expanded'), 'true', 'aria expanded is true'); + + el.removeAttr('aria-expanded'); + equals(el.attr('aria-expanded'), undefined, 'aria expanded is undefined after removing'); + + el.attr('aria-expanded', false); + equals(el.attr('aria-expanded'), 'false', 'aria expanded is false'); }); })(jQuery); diff --git a/ui/ui.core.js b/ui/ui.core.js index 3b6beb329..7601588b3 100644 --- a/ui/ui.core.js +++ b/ui/ui.core.js @@ -135,9 +135,10 @@ $.ui = { }; // WAI-ARIA normalization -// tweak $.attr for FF2 implementation if (isFF2) { var attr = $.attr, + removeAttr = $.fn.removeAttr, + ariaNS = "http://www.w3.org/2005/07/aaa", ariaState = /^aria-/, ariaRole = /^wairole:/; @@ -150,11 +151,18 @@ if (isFF2) { : (attr.apply(this, arguments) || "").replace(ariaRole, "")) : (ariaState.test(name) ? (set - ? elem.setAttributeNS("http://www.w3.org/2005/07/aaa", + ? elem.setAttributeNS(ariaNS, name.replace(ariaState, "aaa:"), value) : attr.call(this, elem, name.replace(ariaState, "aaa:"))) : attr.apply(this, arguments))); }; + + $.fn.removeAttr = function(name) { + return (ariaState.test(name) + ? this.each(function() { + this.removeAttributeNS(ariaNS, name.replace(ariaState, "")); + }) : removeAttr.call(this, name)); + }; } //jQuery plugins