diff --git a/.eslintrc.js b/.eslintrc.js index 71a39bc1..b269cdee 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -10,7 +10,8 @@ module.exports = { }, globals: { axe: true, - Promise: true + Promise: true, + a11yEngine: true }, rules: { 'no-bitwise': 2, diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9e2a2341..5cbf7d46 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,9 +19,7 @@ jobs: cache: 'npm' - run: npm ci - run: npm run build - # v4 download seems to have some flakiness with the download of artifacts so pinning to v3 for now - # @see https://github.com/actions/download-artifact/issues/249 - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: axe-core path: axe.js diff --git a/lib/checks/color/link-in-text-block-evaluate.js b/lib/checks/color/link-in-text-block-evaluate.js index 0cb89893..14ebb2c5 100644 --- a/lib/checks/color/link-in-text-block-evaluate.js +++ b/lib/checks/color/link-in-text-block-evaluate.js @@ -4,7 +4,6 @@ import { getBackgroundColor, incompleteData } from '../../commons/color'; -import a11yEngineCommons from '../../commons/a11y-engine-index'; function getContrast(color1, color2) { var c1lum = color1.getRelativeLuminance(); @@ -53,7 +52,7 @@ function linkInTextBlockEvaluate(node, options) { ) { return true; } - return a11yEngineCommons.distinguishableLinkEvaluate(node, parentBlock); + return a11yEngine.commons.distinguishableLinkEvaluate(node, parentBlock); } // Capture colors diff --git a/lib/commons/a11y-engine-index.js b/lib/commons/a11y-engine-index.js deleted file mode 100644 index edc7f9b0..00000000 --- a/lib/commons/a11y-engine-index.js +++ /dev/null @@ -1,6 +0,0 @@ -import { distinguishableLinkEvaluate } from '../../../a11y-engine-core/lib/commons/distinguishable-link'; - -const a11yEngineCommons = {}; -a11yEngineCommons.distinguishableLinkEvaluate = distinguishableLinkEvaluate; - -export default a11yEngineCommons; diff --git a/lib/rules/autocomplete-a11y-matches.js b/lib/rules/autocomplete-a11y-matches.js index e6c7e61e..e788e278 100644 --- a/lib/rules/autocomplete-a11y-matches.js +++ b/lib/rules/autocomplete-a11y-matches.js @@ -57,6 +57,41 @@ function nodeIsASearchFunctionality(actualNode, currLevel = 0, maxLevels = 4) { return currentLevelSearch(actualNode, currLevel); } +function quantityField(node) { + const keywords = [ + 'qty', + 'quantity', + 'quantities', + 'km', + 'kilometer', + 'drive', + 'code', + 'mileage', + 'power', + 'fuel' + ]; + const attributes = [ + 'name', + 'id', + 'title', + 'placeholder', + 'aria-label', + 'data-label', + 'data-title', + 'data-placeholder', + 'role' + ]; + return attributes.some(attr => { + if (node.hasAttribute(attr)) { + const value = node.getAttribute(attr).toLowerCase(); + return keywords.some( + keyword => value && value.includes(keyword.toLowerCase()) + ); + } + return false; + }); +} + function autocompleteA11yMatches(node, virtualNode) { const a11yEngineFlag = true; /* the flag is used to tell autocomplete matcher that it is being called @@ -64,7 +99,8 @@ function autocompleteA11yMatches(node, virtualNode) { The second condition is to check we are not matching with search functionality */ return ( autocompleteMatches(node, virtualNode, a11yEngineFlag) && - !nodeIsASearchFunctionality(node) + !nodeIsASearchFunctionality(node) && + !quantityField(node) ); }