From 4df405f09cb18ac6b0c02909705a18745e916269 Mon Sep 17 00:00:00 2001 From: "Sangik (Sang) Han" <109125374+sangikhan29@users.noreply.github.com> Date: Wed, 21 Jun 2023 14:39:10 -0400 Subject: [PATCH 01/11] add window to isInteractive --- __mocks__/genInteractives.js | 2 +- src/util/isInteractiveElement.js | 2 +- src/util/isInteractiveRole.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/__mocks__/genInteractives.js b/__mocks__/genInteractives.js index f12ebcb06..8079ba60d 100644 --- a/__mocks__/genInteractives.js +++ b/__mocks__/genInteractives.js @@ -22,6 +22,7 @@ const interactiveElementsMap = { button: [], canvas: [], datalist: [], + dialog: [], embed: [], input: [], 'input[type="button"]': [{ prop: 'type', value: 'button' }], @@ -71,7 +72,6 @@ const nonInteractiveElementsMap: {[string]: Array<{[string]: string}>} = { del: [], details: [], dfn: [], - dialog: [], dir: [], dl: [], dt: [], diff --git a/src/util/isInteractiveElement.js b/src/util/isInteractiveElement.js index 3475d678c..be907ab27 100644 --- a/src/util/isInteractiveElement.js +++ b/src/util/isInteractiveElement.js @@ -27,7 +27,7 @@ const nonInteractiveRoles = new Set(roleKeys // 'toolbar' does not descend from widget, but it does support // aria-activedescendant, thus in practice we treat it as a widget. && name !== 'toolbar' - && !role.superClass.some((classes) => includes(classes, 'widget')) + && !role.superClass.some((classes) => includes(classes, 'widget', 'window')) ); }).concat( // The `progressbar` is descended from `widget`, but in practice, its diff --git a/src/util/isInteractiveRole.js b/src/util/isInteractiveRole.js index 74bfb623b..20513bd29 100644 --- a/src/util/isInteractiveRole.js +++ b/src/util/isInteractiveRole.js @@ -8,7 +8,7 @@ import flatMap from 'array.prototype.flatmap'; const roles = [...rolesMap.keys()]; const interactiveRoles = roles.filter((name) => ( !rolesMap.get(name).abstract - && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget')) + && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', `window`)) )); // 'toolbar' does not descend from widget, but it does support From 82d0a1a429190680d63ec1eee1889549e7fcfe19 Mon Sep 17 00:00:00 2001 From: sangikhan29 <109125374+sangikhan29@users.noreply.github.com> Date: Wed, 21 Jun 2023 15:54:51 -0400 Subject: [PATCH 02/11] address test failures --- src/util/isInteractiveElement.js | 2 +- src/util/isInteractiveRole.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util/isInteractiveElement.js b/src/util/isInteractiveElement.js index be907ab27..3475d678c 100644 --- a/src/util/isInteractiveElement.js +++ b/src/util/isInteractiveElement.js @@ -27,7 +27,7 @@ const nonInteractiveRoles = new Set(roleKeys // 'toolbar' does not descend from widget, but it does support // aria-activedescendant, thus in practice we treat it as a widget. && name !== 'toolbar' - && !role.superClass.some((classes) => includes(classes, 'widget', 'window')) + && !role.superClass.some((classes) => includes(classes, 'widget')) ); }).concat( // The `progressbar` is descended from `widget`, but in practice, its diff --git a/src/util/isInteractiveRole.js b/src/util/isInteractiveRole.js index 20513bd29..c603dd0a9 100644 --- a/src/util/isInteractiveRole.js +++ b/src/util/isInteractiveRole.js @@ -8,7 +8,7 @@ import flatMap from 'array.prototype.flatmap'; const roles = [...rolesMap.keys()]; const interactiveRoles = roles.filter((name) => ( !rolesMap.get(name).abstract - && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', `window`)) + && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', 'window')) )); // 'toolbar' does not descend from widget, but it does support From 129e17ef899a0fa32b9f3f0f1cab8c26a9321585 Mon Sep 17 00:00:00 2001 From: sangikhan29 <109125374+sangikhan29@users.noreply.github.com> Date: Wed, 21 Jun 2023 15:58:05 -0400 Subject: [PATCH 03/11] Revert "address test failures" This reverts commit 597f1de18c7741d40af9da4a689fba6f9e313d23. --- src/util/isInteractiveElement.js | 2 +- src/util/isInteractiveRole.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util/isInteractiveElement.js b/src/util/isInteractiveElement.js index 3475d678c..be907ab27 100644 --- a/src/util/isInteractiveElement.js +++ b/src/util/isInteractiveElement.js @@ -27,7 +27,7 @@ const nonInteractiveRoles = new Set(roleKeys // 'toolbar' does not descend from widget, but it does support // aria-activedescendant, thus in practice we treat it as a widget. && name !== 'toolbar' - && !role.superClass.some((classes) => includes(classes, 'widget')) + && !role.superClass.some((classes) => includes(classes, 'widget', 'window')) ); }).concat( // The `progressbar` is descended from `widget`, but in practice, its diff --git a/src/util/isInteractiveRole.js b/src/util/isInteractiveRole.js index c603dd0a9..20513bd29 100644 --- a/src/util/isInteractiveRole.js +++ b/src/util/isInteractiveRole.js @@ -8,7 +8,7 @@ import flatMap from 'array.prototype.flatmap'; const roles = [...rolesMap.keys()]; const interactiveRoles = roles.filter((name) => ( !rolesMap.get(name).abstract - && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', 'window')) + && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', `window`)) )); // 'toolbar' does not descend from widget, but it does support From bcfa0121442a1a46e16175e1f464b922563ee392 Mon Sep 17 00:00:00 2001 From: sangikhan29 <109125374+sangikhan29@users.noreply.github.com> Date: Wed, 21 Jun 2023 16:06:35 -0400 Subject: [PATCH 04/11] fix test error --- __mocks__/genInteractives.js | 4 ++-- src/util/isInteractiveRole.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/__mocks__/genInteractives.js b/__mocks__/genInteractives.js index 8079ba60d..82ad31f52 100644 --- a/__mocks__/genInteractives.js +++ b/__mocks__/genInteractives.js @@ -140,13 +140,13 @@ const interactiveRoles = [] ) .filter((role) => ( !roles.get(role).abstract - && roles.get(role).superClass.some((klasses) => includes(klasses, 'widget')) + && roles.get(role).superClass.some((klasses) => includes(klasses, 'widget', 'window')) )); const nonInteractiveRoles = roleNames .filter((role) => ( !roles.get(role).abstract - && !roles.get(role).superClass.some((klasses) => includes(klasses, 'widget')) + && !roles.get(role).superClass.some((klasses) => includes(klasses, 'widget', 'window')) // 'toolbar' does not descend from widget, but it does support // aria-activedescendant, thus in practice we treat it as a widget. diff --git a/src/util/isInteractiveRole.js b/src/util/isInteractiveRole.js index 20513bd29..b3aeda7dd 100644 --- a/src/util/isInteractiveRole.js +++ b/src/util/isInteractiveRole.js @@ -8,7 +8,7 @@ import flatMap from 'array.prototype.flatmap'; const roles = [...rolesMap.keys()]; const interactiveRoles = roles.filter((name) => ( !rolesMap.get(name).abstract - && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', `window`)) + && rolesMap.get(name).superClass.some((klasses) => (includes(klasses, 'widget', 'window'))) )); // 'toolbar' does not descend from widget, but it does support From 63023ae4f5a1af363ae60bdf0cb93cc54c34558d Mon Sep 17 00:00:00 2001 From: sangikhan29 <109125374+sangikhan29@users.noreply.github.com> Date: Wed, 21 Jun 2023 17:52:30 -0400 Subject: [PATCH 05/11] Revert "fix test error" This reverts commit d10e77525c11dfa013c01dbfcb0d37bac3fd967b. --- __mocks__/genInteractives.js | 4 ++-- src/util/isInteractiveRole.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/__mocks__/genInteractives.js b/__mocks__/genInteractives.js index 82ad31f52..8079ba60d 100644 --- a/__mocks__/genInteractives.js +++ b/__mocks__/genInteractives.js @@ -140,13 +140,13 @@ const interactiveRoles = [] ) .filter((role) => ( !roles.get(role).abstract - && roles.get(role).superClass.some((klasses) => includes(klasses, 'widget', 'window')) + && roles.get(role).superClass.some((klasses) => includes(klasses, 'widget')) )); const nonInteractiveRoles = roleNames .filter((role) => ( !roles.get(role).abstract - && !roles.get(role).superClass.some((klasses) => includes(klasses, 'widget', 'window')) + && !roles.get(role).superClass.some((klasses) => includes(klasses, 'widget')) // 'toolbar' does not descend from widget, but it does support // aria-activedescendant, thus in practice we treat it as a widget. diff --git a/src/util/isInteractiveRole.js b/src/util/isInteractiveRole.js index b3aeda7dd..20513bd29 100644 --- a/src/util/isInteractiveRole.js +++ b/src/util/isInteractiveRole.js @@ -8,7 +8,7 @@ import flatMap from 'array.prototype.flatmap'; const roles = [...rolesMap.keys()]; const interactiveRoles = roles.filter((name) => ( !rolesMap.get(name).abstract - && rolesMap.get(name).superClass.some((klasses) => (includes(klasses, 'widget', 'window'))) + && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', `window`)) )); // 'toolbar' does not descend from widget, but it does support From cb83c992584e6fc80f22b98bdb4e78b05e84debc Mon Sep 17 00:00:00 2001 From: sangikhan29 <109125374+sangikhan29@users.noreply.github.com> Date: Wed, 21 Jun 2023 17:58:04 -0400 Subject: [PATCH 06/11] add window to more utils --- __mocks__/genInteractives.js | 4 ++-- src/util/isInteractiveElement.js | 2 +- src/util/isInteractiveRole.js | 2 +- src/util/isNonInteractiveElement.js | 4 ++-- src/util/isNonInteractiveRole.js | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/__mocks__/genInteractives.js b/__mocks__/genInteractives.js index 8079ba60d..82ad31f52 100644 --- a/__mocks__/genInteractives.js +++ b/__mocks__/genInteractives.js @@ -140,13 +140,13 @@ const interactiveRoles = [] ) .filter((role) => ( !roles.get(role).abstract - && roles.get(role).superClass.some((klasses) => includes(klasses, 'widget')) + && roles.get(role).superClass.some((klasses) => includes(klasses, 'widget', 'window')) )); const nonInteractiveRoles = roleNames .filter((role) => ( !roles.get(role).abstract - && !roles.get(role).superClass.some((klasses) => includes(klasses, 'widget')) + && !roles.get(role).superClass.some((klasses) => includes(klasses, 'widget', 'window')) // 'toolbar' does not descend from widget, but it does support // aria-activedescendant, thus in practice we treat it as a widget. diff --git a/src/util/isInteractiveElement.js b/src/util/isInteractiveElement.js index be907ab27..725aab0f9 100644 --- a/src/util/isInteractiveElement.js +++ b/src/util/isInteractiveElement.js @@ -43,7 +43,7 @@ const interactiveRoles = new Set(roleKeys // The `progressbar` is descended from `widget`, but in practice, its // value is always `readonly`, so we treat it as a non-interactive role. && name !== 'progressbar' - && role.superClass.some((classes) => includes(classes, 'widget')) + && role.superClass.some((classes) => includes(classes, 'widget', 'window')) ); }).concat( // 'toolbar' does not descend from widget, but it does support diff --git a/src/util/isInteractiveRole.js b/src/util/isInteractiveRole.js index 20513bd29..c603dd0a9 100644 --- a/src/util/isInteractiveRole.js +++ b/src/util/isInteractiveRole.js @@ -8,7 +8,7 @@ import flatMap from 'array.prototype.flatmap'; const roles = [...rolesMap.keys()]; const interactiveRoles = roles.filter((name) => ( !rolesMap.get(name).abstract - && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', `window`)) + && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', 'window')) )); // 'toolbar' does not descend from widget, but it does support diff --git a/src/util/isNonInteractiveElement.js b/src/util/isNonInteractiveElement.js index 85e1037a9..26b322c2b 100644 --- a/src/util/isNonInteractiveElement.js +++ b/src/util/isNonInteractiveElement.js @@ -35,7 +35,7 @@ const nonInteractiveRoles = new Set(roleKeys // treats them both as CellRole and since gridcell is interactive, we consider // cell interactive as well. && name !== 'cell' - && !role.superClass.some((classes) => includes(classes, 'widget')) + && !role.superClass.some((classes) => includes(classes, 'widget', 'window')) ); }).concat( // The `progressbar` is descended from `widget`, but in practice, its @@ -54,7 +54,7 @@ const interactiveRoles = new Set(roleKeys // This role is meant to have no semantic value. // @see https://www.w3.org/TR/wai-aria-1.2/#generic && name !== 'generic' - && role.superClass.some((classes) => includes(classes, 'widget')) + && role.superClass.some((classes) => includes(classes, 'widget', 'window')) ); }).concat( // 'toolbar' does not descend from widget, but it does support diff --git a/src/util/isNonInteractiveRole.js b/src/util/isNonInteractiveRole.js index 54aff8550..380eb2006 100644 --- a/src/util/isNonInteractiveRole.js +++ b/src/util/isNonInteractiveRole.js @@ -14,7 +14,7 @@ import flatMap from 'array.prototype.flatmap'; const roles = [...rolesMap.keys()]; const nonInteractiveRoles = roles.filter((name) => ( !rolesMap.get(name).abstract - && !rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget')) + && !rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', 'window')) )); /** From c05716683e50709b7e7e24f7f88a5aa82cf9012f Mon Sep 17 00:00:00 2001 From: sangikhan29 <109125374+sangikhan29@users.noreply.github.com> Date: Tue, 27 Jun 2023 12:52:48 -0400 Subject: [PATCH 07/11] fix includes statement --- src/util/isInteractiveElement.js | 2 +- src/util/isInteractiveRole.js | 2 +- src/util/isNonInteractiveElement.js | 2 +- src/util/isNonInteractiveRole.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/util/isInteractiveElement.js b/src/util/isInteractiveElement.js index 725aab0f9..792ff3c13 100644 --- a/src/util/isInteractiveElement.js +++ b/src/util/isInteractiveElement.js @@ -27,7 +27,7 @@ const nonInteractiveRoles = new Set(roleKeys // 'toolbar' does not descend from widget, but it does support // aria-activedescendant, thus in practice we treat it as a widget. && name !== 'toolbar' - && !role.superClass.some((classes) => includes(classes, 'widget', 'window')) + && !role.superClass.some((classes) => includes(classes, 'widget') || includes(classes, 'window')) ); }).concat( // The `progressbar` is descended from `widget`, but in practice, its diff --git a/src/util/isInteractiveRole.js b/src/util/isInteractiveRole.js index c603dd0a9..e160c2888 100644 --- a/src/util/isInteractiveRole.js +++ b/src/util/isInteractiveRole.js @@ -8,7 +8,7 @@ import flatMap from 'array.prototype.flatmap'; const roles = [...rolesMap.keys()]; const interactiveRoles = roles.filter((name) => ( !rolesMap.get(name).abstract - && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', 'window')) + && rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget') || includes(klasses, 'window')) )); // 'toolbar' does not descend from widget, but it does support diff --git a/src/util/isNonInteractiveElement.js b/src/util/isNonInteractiveElement.js index 26b322c2b..978b8b402 100644 --- a/src/util/isNonInteractiveElement.js +++ b/src/util/isNonInteractiveElement.js @@ -54,7 +54,7 @@ const interactiveRoles = new Set(roleKeys // This role is meant to have no semantic value. // @see https://www.w3.org/TR/wai-aria-1.2/#generic && name !== 'generic' - && role.superClass.some((classes) => includes(classes, 'widget', 'window')) + && role.superClass.some((classes) => includes(classes, 'widget') || includes(classes, 'window')) ); }).concat( // 'toolbar' does not descend from widget, but it does support diff --git a/src/util/isNonInteractiveRole.js b/src/util/isNonInteractiveRole.js index 380eb2006..bb521c42d 100644 --- a/src/util/isNonInteractiveRole.js +++ b/src/util/isNonInteractiveRole.js @@ -14,7 +14,7 @@ import flatMap from 'array.prototype.flatmap'; const roles = [...rolesMap.keys()]; const nonInteractiveRoles = roles.filter((name) => ( !rolesMap.get(name).abstract - && !rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget', 'window')) + && !rolesMap.get(name).superClass.some((klasses) => includes(klasses, 'widget') || includes(klasses, 'window')) )); /** From 453785fdf8f99c82d57b5be55d4acea95ac5e8a3 Mon Sep 17 00:00:00 2001 From: sangikhan29 <109125374+sangikhan29@users.noreply.github.com> Date: Tue, 27 Jun 2023 12:54:51 -0400 Subject: [PATCH 08/11] fix getInteractives as well --- __mocks__/genInteractives.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/__mocks__/genInteractives.js b/__mocks__/genInteractives.js index 82ad31f52..a36b12955 100644 --- a/__mocks__/genInteractives.js +++ b/__mocks__/genInteractives.js @@ -140,13 +140,13 @@ const interactiveRoles = [] ) .filter((role) => ( !roles.get(role).abstract - && roles.get(role).superClass.some((klasses) => includes(klasses, 'widget', 'window')) + && roles.get(role).superClass.some((klasses) => includes(klasses, 'widget') || includes(klasses, 'window')) )); const nonInteractiveRoles = roleNames .filter((role) => ( !roles.get(role).abstract - && !roles.get(role).superClass.some((klasses) => includes(klasses, 'widget', 'window')) + && !roles.get(role).superClass.some((klasses) => includes(klasses, 'widget') || includes(klasses, 'window')) // 'toolbar' does not descend from widget, but it does support // aria-activedescendant, thus in practice we treat it as a widget. From 00099a79bd9fe80ecbf260323ebe1598938b11d8 Mon Sep 17 00:00:00 2001 From: sangikhan29 <109125374+sangikhan29@users.noreply.github.com> Date: Tue, 15 Aug 2023 12:06:06 -0400 Subject: [PATCH 09/11] pass control-has-associated-label --- __tests__/src/rules/control-has-associated-label-test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/__tests__/src/rules/control-has-associated-label-test.js b/__tests__/src/rules/control-has-associated-label-test.js index fd2950830..097a509de 100644 --- a/__tests__/src/rules/control-has-associated-label-test.js +++ b/__tests__/src/rules/control-has-associated-label-test.js @@ -49,11 +49,14 @@ const alwaysValid = [ { code: '' }, { code: '' }, { code: '