Skip to content

ElementInternals: convert lib/commons/matches + lib/commons/standards to getAriaValue/hasAriaValue #5143

@Garbee

Description

@Garbee

Part of #5044 — incremental, per-subdirectory conversion of ARIA-attribute reads to the new internals-aware resolvers.

Scope: lib/commons/matches + lib/commons/standards (generic attribute matching)

Representative files/usages:

  • matches/attributes (vNode.attr(attrName))
  • matches/from-function
  • get-element-by-reference

Tighten so internals-driven ARIA values are visible to matchers without rewriting selector semantics (that is a future proposal).

Conversion pattern (shared by every #5044 sub-issue)

  1. Replace ARIA-attribute reads — vNode.attr('aria-*') / vNode.hasAttr('aria-*'), incl. variable-attr forms — with getAriaValue / hasAriaValue, only where reading an internals-supplied value makes sense.
  2. Consume normalized/typed return values (booleans; resolved vNode arrays for idref(s)); filter unattached elements (see ElementInternals: accessing empty internals idrefs property crashes Firefox #5139).
  3. Add ElementInternals test fixtures (_internals and axeInternalsMap) mirroring existing virtual-node tests.
  4. Update messages that name an ARIA attribute/role to reflect value source where confusing.

Out of scope

role-attribute reads (#5039); validity checks (aria-valid-attr, aria-valid-attr-value, aria-unsupported-attr); rule selector matching; form-label work (#5045).

Dependencies

Blocked by #5043; requires getAriaValue/hasAriaValue (#5042). Prefer landing after the lib/commons/aria sub-issue.

Acceptance criteria

  • Existing suite green with elementInternals: false.
  • New internals fixtures pass with elementInternals: true.
  • Messages updated where they name an attribute/role.

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions