From bf46753772d73feba8303e0861b94c5c70f10074 Mon Sep 17 00:00:00 2001 From: Martin Staffa Date: Fri, 8 Dec 2017 13:39:07 +0100 Subject: [PATCH] fix(ngAria): do not set aria attributes on input[type="hidden"] This fixes a error found by @edclements using the Google Accessibility Developer Tools audit. Input fields of type hidden shouldn't have aria attributes. https://www.w3.org/TR/html-aria/#allowed-aria-roles-states-and-properties-1 Closes #15113 --- src/ngAria/aria.js | 5 ++++- test/ngAria/ariaSpec.js | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/ngAria/aria.js b/src/ngAria/aria.js index 570eff31401e..bf82141b2123 100644 --- a/src/ngAria/aria.js +++ b/src/ngAria/aria.js @@ -224,7 +224,10 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) { .directive('ngModel', ['$aria', function($aria) { function shouldAttachAttr(attr, normalizedAttr, elem, allowBlacklistEls) { - return $aria.config(normalizedAttr) && !elem.attr(attr) && (allowBlacklistEls || !isNodeOneOf(elem, nodeBlackList)); + return $aria.config(normalizedAttr) && + !elem.attr(attr) && + (allowBlacklistEls || !isNodeOneOf(elem, nodeBlackList)) && + (elem.attr('type') !== 'hidden' || elem[0].nodeName !== 'INPUT'); } function shouldAttachRole(role, elem) { diff --git a/test/ngAria/ariaSpec.js b/test/ngAria/ariaSpec.js index 9f7edaa2e9c0..201608498961 100644 --- a/test/ngAria/ariaSpec.js +++ b/test/ngAria/ariaSpec.js @@ -420,6 +420,21 @@ describe('$aria', function() { scope.$apply('txtInput=\'LTten\''); expect(element.attr('aria-invalid')).toBe('userSetValue'); }); + + it('should not attach if input is type="hidden"', function() { + compileElement(''); + expect(element.attr('aria-invalid')).toBeUndefined(); + }); + + + it('should attach aria-invalid to custom control that is type="hidden"', function() { + compileElement('
'); + scope.$apply('txtInput=\'LTten\''); + expect(element.attr('aria-invalid')).toBe('true'); + + scope.$apply('txtInput=\'morethantencharacters\''); + expect(element.attr('aria-invalid')).toBe('false'); + }); }); describe('aria-invalid when disabled', function() {