Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[html-aam PR 484] contextual role concept proposal #2218

Open
wants to merge 21 commits into
base: main
Choose a base branch
from
Open
Changes from 20 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions html-aam/index.html
Original file line number Diff line number Diff line change
@@ -191,6 +191,69 @@ <h3>Exposing HTML Features That Do Not Directly Map to Accessibility APIs</h3>
the [[core-aam-1.2]].
</p>
</section>
<section id="mapping_contextual">
<h3>Exposing HTML Features With Contextual Roles</h3>
<p>
An element with a <strong>contextual role</strong> is one whose computed role semantics are based on its ancestral <a>accessibility tree</a> relationship to another element or elements. Or,
an element whose computed role is dependent upon whether it has other associated accessibility information, such as an author-provided accessible name.
</p>
<p>
For instance, an element that is an <strong>accessibility child</strong> of its required <strong>accessibility parent</strong> would expose a computed role for its given context, such as a
list item (`li` element) within an unordered list (`ul` element). However, the same element might be used within a different markup pattern and could therefore expose different
contextually-dependent computed roles, such as a `section` element with an author-provided accessible name (role `region`) versus an unnamed `section` element (role `generic`).
</p>
<p>When the conditions for an element's contextual role are not met, it will commonly expose a computed role of `generic` or with a <strong>minimum role</strong>, if applicable.</p>
scottaohara marked this conversation as resolved.
Show resolved Hide resolved
<div class="note">
<p>Previously, the concept of a contextual role was loosely referred to as an element's "scoped" relationship to another element.</p>
</div>
<div class="example">
<p>
A <code>li</code> element has an implicit WAI-ARIA role mapping of <code>listitem</code> only when the element is an <strong>accessibility child</strong> of a <code>menu</code>,
<code>ol</code> or <code>ul</code> element that has not had its `list` role mapping suppressed.
</p>
<pre><code>&lt;ul>
&lt;li>...&lt;/li> &lt;!-- computed role `listitem` -->
&lt;/ul>
&lt;article>
...
&lt;li>...&lt;/li> &lt;!-- computed role `generic`, not `listitem` -->
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I recall we agreed to get rid of the expectation to computed orphaned generics, since doing it in the engine was sometimes costly and always irrelevant to the user.

...</code></pre>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should use a different example than listitem, here and above, given the push back on the orphan roles tests which is partially being discussed here: #2166

But started with the roll back of orphan <li> tests in WPT.

Copy link
Member

@scottaohara scottaohara Dec 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

orphan li elements was not where the pushback was. it was orphan <element role=listitem> that had the pushback.

Copy link
Contributor

@cookiecrook cookiecrook Dec 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As an FYI for related WPT files, any time you're tempted to add an orphaned role test, please add a comment that points to the appropriate orphaned-roles-specific test file.

Copy link
Contributor

@cookiecrook cookiecrook Dec 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

orphan <li> elements was not where the pushback was. it was orphan <element role=listitem> that had the pushback.

As I understand it, it's still the same issue whether the role is implicit or explicit.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tried to message you this in slack, but i'm thinking of closing this PR down, and instead taking the approach of just clarifying the few elements that do have contextual roles mapping tables

</div>
<div class="example">
<p>
An <code>aside</code> element has an implicit WAI-ARIA role mapping of <code>complementary</code> only when the element is an <strong>accessibility child</strong> of the
<code>body</code> or <code>main</code> elements, or if the <code>aside</code> has been provided an accessible name.
</p>
<pre><code>&lt;body>
...
&lt;main>
...
&lt;article>
&lt;aside>...&lt;/aside> &lt;!-- computed role `generic`, not `complementary` -->
...
&lt;aside aria-label=named>...&lt;/aside> &lt;!-- computed role `complementary` -->
&lt;/article>
...
&lt;aside>...&lt;/aside> &lt;!-- computed role `complementary` -->
&lt;/main>
&lt;aside>...&lt;/aside> &lt;!-- computed role `complementary` -->
...
&lt;footer>
...
&lt;aside>...&lt;/aside> &lt;!-- computed role `generic`, not `complementary` -->
&lt;/footer>
...</code></pre>
</div>

<div class="example">
<p>A <code>section</code> element has an implicit WAI-ARIA role mapping of <code>region</code> only when the element is provided an <strong>accessible name</strong>.</p>
<pre><code>&lt;section title="accessible name">...&lt;/section> &lt;!-- computed role `region` -->
...
&lt;section aria-label="accessible name">...&lt;/section> &lt;!-- computed role `region` -->
...
&lt;section>...&lt;/section> &lt;!-- computed role `generic`, not `region` --></code></pre>
</div>
</section>
<section>
<h3>HTML Element Role Mappings</h3>
<ul>