From 22740b44e4c223683c20a10165991aa20c0bfb6e Mon Sep 17 00:00:00 2001 From: Arjun Chikara Date: Fri, 17 May 2024 13:56:09 +0530 Subject: [PATCH 1/2] Bug fix chrome-off --- lib/checks/forms/autocomplete-a11y-evaluate.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/checks/forms/autocomplete-a11y-evaluate.js b/lib/checks/forms/autocomplete-a11y-evaluate.js index 02b0fa20..0e9683f0 100644 --- a/lib/checks/forms/autocomplete-a11y-evaluate.js +++ b/lib/checks/forms/autocomplete-a11y-evaluate.js @@ -3,7 +3,7 @@ import { isValidAutocomplete } from "../../commons/text"; function checkIsElementValidAutocomplete(node, options, virtualNode) { const autocomplete = virtualNode.attr('autocomplete')?.toLowerCase().trim(); // if element has autocomplete attribute as off then it is not a violation - if(autocomplete === "off") { + if(autocomplete === "off" || autocomplete==="chrome-off") { return true; } @@ -33,7 +33,8 @@ function checkIsElementValidAutocomplete(node, options, virtualNode) { const closestForm = virtualNode.actualNode.closest("form"); //if it exists inside the form and autocomplete for form is off - if(closestForm && closestForm.getAttribute('autocomplete')?.toLowerCase().trim() === "off") { + if(closestForm && (closestForm.getAttribute('autocomplete')?.toLowerCase().trim() === "off" + || closestForm.getAttribute('autocomplete')?.toLowerCase().trim() === "chrome-off")) { // if autocomplete attribute is not present for element then its a pass in this scenario // otherwise check all posibilities with the method return autocomplete ? checkIsElementValidAutocomplete(node, options, virtualNode) : true; From 4182917264bf01a0987c7d35ed03280ffe8a7123 Mon Sep 17 00:00:00 2001 From: Arjun Chikara Date: Fri, 17 May 2024 13:59:03 +0530 Subject: [PATCH 2/2] Bug fix autocomplete --- lib/checks/forms/autocomplete-valid.json | 4 ++-- lib/rules/autocomplete-matches.js | 15 ++++++++++++--- lib/rules/autocomplete-valid.json | 13 ++++++++++--- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/lib/checks/forms/autocomplete-valid.json b/lib/checks/forms/autocomplete-valid.json index 2d4c864c..bef9a40c 100644 --- a/lib/checks/forms/autocomplete-valid.json +++ b/lib/checks/forms/autocomplete-valid.json @@ -2,10 +2,10 @@ "id": "autocomplete-valid", "evaluate": "autocomplete-a11y-evaluate", "metadata": { - "impact": "serious", + "impact": "moderate", "messages": { "pass": "the autocomplete attribute is correctly formatted", - "fail": "the autocomplete attribute is incorrectly formatted" + "fail": "Add autocomplete attribute to form fields with a valid value as per HTML specification. In 'name' attribute of field, prefer to use standard autocomplete value since browsers use 'name' to suggest autofill. For field with no standard autocomplete value (eg: College ID), prefer to use autocomplete='on'." } }, "options": { diff --git a/lib/rules/autocomplete-matches.js b/lib/rules/autocomplete-matches.js index b1402984..0bef348f 100644 --- a/lib/rules/autocomplete-matches.js +++ b/lib/rules/autocomplete-matches.js @@ -2,7 +2,7 @@ import { sanitize } from '../commons/text'; import standards from '../standards'; import { isVisible } from '../commons/dom'; -function autocompleteMatches(node, virtualNode, flag=false) { +function autocompleteMatches(node, virtualNode, flag = false) { const autocomplete = virtualNode.attr('autocomplete'); if ((!autocomplete || sanitize(autocomplete) === '') && !flag) { return false; @@ -13,8 +13,17 @@ function autocompleteMatches(node, virtualNode, flag=false) { return false; } - // The element is an `input` element a `type` of `hidden`, `button`, `submit` or `reset` - const excludedInputTypes = ['submit', 'reset', 'button', 'hidden']; + // The element is an `input` element a `type` of `hidden`, `reset`,`button`, `submit` , 'checkbox', 'file', 'image', or 'radio' + const excludedInputTypes = [ + 'submit', + 'reset', + 'button', + 'hidden', + 'checkbox', + 'file', + 'image', + 'radio' + ]; if ( nodeName === 'input' && excludedInputTypes.includes(virtualNode.props.type) diff --git a/lib/rules/autocomplete-valid.json b/lib/rules/autocomplete-valid.json index 0300bf5a..517c33bc 100644 --- a/lib/rules/autocomplete-valid.json +++ b/lib/rules/autocomplete-valid.json @@ -1,11 +1,18 @@ { "id": "autocomplete-valid", "matches": "autocomplete-a11y-matches", - "tags": ["cat.forms", "wcag21aa", "wcag135"], + "tags": [ + "cat.forms", + "wcag21aa", + "wcag22aa", + "wcag135", + "a11y-engine", + "a11y-engine-experimental" + ], "actIds": ["73f2c2"], "metadata": { - "description": "Ensure the autocomplete attribute is correct and suitable for the form field", - "help": "autocomplete attribute must be used correctly" + "description": "Ensure that the necessary form fields use the autocomplete attribute with a valid input.", + "help": "Autocomplete attribute must have a valid value" }, "all": ["autocomplete-valid"], "any": [],