From 818b5cd0a23e58437335a8099c2295e7d526f8cc Mon Sep 17 00:00:00 2001 From: skydreamerr Date: Fri, 9 Mar 2018 18:20:09 -0800 Subject: [PATCH] fix(rule): skip-link rule doesn't decode URI encoded href's If href contains url encoded fragment like "Click Here" it leads to false positive violation due to no target --- lib/commons/dom/get-element-by-reference.js | 2 +- test/checks/navigation/skip-link.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/commons/dom/get-element-by-reference.js b/lib/commons/dom/get-element-by-reference.js index fb1a552718..7c4c0a7f47 100644 --- a/lib/commons/dom/get-element-by-reference.js +++ b/lib/commons/dom/get-element-by-reference.js @@ -13,7 +13,7 @@ dom.getElementByReference = function (node, attr) { let fragment = node.getAttribute(attr); if (fragment && fragment.charAt(0) === '#') { - fragment = fragment.substring(1); + fragment = decodeURIComponent(fragment.substring(1)); let candidate = document.getElementById(fragment); if (candidate) { diff --git a/test/checks/navigation/skip-link.js b/test/checks/navigation/skip-link.js index 34e2348419..ffe4798e19 100644 --- a/test/checks/navigation/skip-link.js +++ b/test/checks/navigation/skip-link.js @@ -44,4 +44,10 @@ describe('skip-link', function () { var node = fixture.querySelector('a'); assert.isUndefined(checks['skip-link'].evaluate(node)); }); + + it('should return true if the URI encoded href points to an element with an ID', function () { + fixture.innerHTML = 'Click Here

Introduction

'; + var node = fixture.querySelector('a'); + assert.isTrue(checks['skip-link'].evaluate(node)); + }); });