diff --git a/.github/workflows/dependabot.yaml b/.github/dependabot.yaml similarity index 100% rename from .github/workflows/dependabot.yaml rename to .github/dependabot.yaml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..17d094fce --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +# Set update schedule for GitHub Actions + +version: 2 +updates: + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 10 + commit-message: + prefix: "chore: dependabot" diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 000000000..62ed253b0 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,43 @@ +spec:aria: + - changed-files: + - any-glob-to-any-file: 'index.html' + +spec:accname: + - changed-files: + - any-glob-to-any-file: 'accname/**' + +spec:core-aam: + - changed-files: + - any-glob-to-any-file: 'core-aam/**' + +spec:dpub-aam: + - changed-files: + - any-glob-to-any-file: 'dpub-aam/**' + +spec:dpub-aria: + - changed-files: + - any-glob-to-any-file: 'dpub-aria/**' + +spec:graphics-aam: + - changed-files: + - any-glob-to-any-file: 'graphics-aam/**' + +spec:graphics-aria: + - changed-files: + - any-glob-to-any-file: 'graphics-aria/**' + +spec:html-aam: + - changed-files: + - any-glob-to-any-file: 'html-aam/**' + +spec:svg-aam: + - changed-files: + - any-glob-to-any-file: 'svg-aam/**' + +spec:mathml-aam: + - changed-files: + - any-glob-to-any-file: 'mathml-aam/**' + +spec:pdf-aam: + - changed-files: + - any-glob-to-any-file: 'pdf-aam/**' diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index d30dcaa7b..2ad216caf 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,29 +2,19 @@ Closes #???? Describe Change Here! - - -# PR tracking -Check these when the relevant issue or PR has been made, OR after you have confirmed the -related change is not necessary (add N/A). Leave unchecked if you are unsure. Read the -[Process Document](https://github.com/w3c/aria/wiki/ARIA-WG-Process-Document/_edit) or -[Test Overview](https://github.com/w3c/aria/wiki/ARIA-Test-Overview) for more information. - -* [ ] Related Core AAM Issue/PR: -* [ ] Related AccName Issue/PR: -* [ ] Any other dependent changes? +And a few other todo items (delete this section after performing them): +* [ ] For every spec that this PR edits, please add the appropriate `spec:` label. If you don't have privileges to do this, editors will do it for you. +* [ ] If the change is [editorial](https://github.com/w3c/aria/blob/main/documentation/process.md#editorial-changes), please add "Editorial:" at the start of your PR name, and delete the "Test, Documentation and Implementation tracking" section below. # Test, Documentation and Implementation tracking -Once this PR and all related PRs have been approved by the working group, tests -should be written and issues should be opened on browsers. Add N/A and check when not -applicable. +Once this PR has been reviewed and has consensus from the working group, tests should be written and issues should be opened on browsers. Add N/A and check when not applicable. -* [ ] Related APG Issue/PR: -* [ ] MDN Issue/PR: * [ ] "author MUST" tests: * [ ] "user agent MUST" tests: -* [ ] Browser implementations (link to issue or when done, link to commit): +* [ ] Browser implementations (link to issue or commit): * WebKit: * Gecko: * Blink: * [ ] Does this need AT implementations? +* [ ] Related APG Issue/PR: +* [ ] MDN Issue/PR: diff --git a/.github/workflows/accname.yml b/.github/workflows/accname.yml new file mode 100644 index 000000000..93b00717f --- /dev/null +++ b/.github/workflows/accname.yml @@ -0,0 +1,69 @@ +name: accname ED +on: + push: + branches: + - 'main' + paths: + - 'common/**' + - 'accname/**' + workflow_dispatch: + +jobs: + dispatch: + runs-on: ubuntu-latest + steps: + - name: Dispatch to accname repo + run: | + curl -L -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{secrets.ARIA_EDITOR_DRAFTS}}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/w3c/accname/actions/workflows/build-from-monorepo.yaml/dispatches \ + -d '{"ref":"gh-pages"}' + update-accname: + runs-on: ubuntu-latest + steps: + - name: Checkout monorepo + uses: actions/checkout@v4 + with: + ref: main + path: aria + sparse-checkout: | + accname + common + - name: Copy common + run: | + mkdir aria/accname/common + cp -r aria/common/** aria/accname/common/ + sed -i 's|\.\./common|common|g' aria/accname/index.html + - uses: w3c/spec-prod@v2 + with: + TOOLCHAIN: respec + SOURCE: aria/accname/index.html + DESTINATION: aria/accname/index.html + W3C_ECHIDNA_TOKEN: ${{ secrets.ECHIDNA_TOKEN_ACCNAME }} + W3C_WG_DECISION_URL: https://lists.w3.org/Archives/Public/public-aria-admin/2018Sep/0011.html + W3C_BUILD_OVERRIDE: | + specStatus: WD + ARTIFACT_NAME: accname + - name: Checkout accname repo + uses: actions/checkout@v4 + with: + repository: w3c/accname + ref: gh-pages + path: accname + token: ${{ secrets.ARIA_EDITOR_DRAFTS }} + - uses: actions/download-artifact@v4 + with: + name: accname + - name: Copy files + run: | + cp -r aria.gh/aria/accname/** accname/ + - name: Push new files to child repo + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add . + git commit -m "ED update" + git push origin gh-pages + working-directory: accname diff --git a/.github/workflows/aria.yml b/.github/workflows/aria.yml new file mode 100644 index 000000000..369eeec07 --- /dev/null +++ b/.github/workflows/aria.yml @@ -0,0 +1,18 @@ +name: aria ED +on: + push: + branches: [main] + paths: + - index.html + workflow_dispatch: +jobs: + main: + name: ARIA ED + runs-on: ubuntu-20.04 + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - uses: w3c/spec-prod@v2 + with: + GH_PAGES_BRANCH: gh-pages \ No newline at end of file diff --git a/.github/workflows/core-aam.yml b/.github/workflows/core-aam.yml new file mode 100644 index 000000000..3d1780130 --- /dev/null +++ b/.github/workflows/core-aam.yml @@ -0,0 +1,72 @@ +name: core-aam ED +on: + push: + branches: + - 'main' + paths: + - 'common/**' + - 'core-aam/**' + workflow_dispatch: + +jobs: + dispatch: + runs-on: ubuntu-latest + steps: + - name: Dispatch to core-aam repo + run: | + curl -L -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{secrets.ARIA_EDITOR_DRAFTS}}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/w3c/core-aam/actions/workflows/build-from-monorepo.yaml/dispatches \ + -d '{"ref":"gh-pages"}' + update-core-aam: + name: Update Editors Draft and Publish to TR + runs-on: ubuntu-latest + steps: + - name: Checkout monorepo + uses: actions/checkout@v4 + with: + ref: main + path: aria + sparse-checkout: | + core-aam + common + - name: Copy common + run: | + mkdir aria/core-aam/common + cp -r aria/common/** aria/core-aam/common/ + sed -i 's|\.\./common|common|g' aria/core-aam/index.html + - uses: w3c/spec-prod@v2 + with: + TOOLCHAIN: respec + SOURCE: aria/core-aam/index.html + DESTINATION: aria/core-aam/index.html + W3C_ECHIDNA_TOKEN: ${{ secrets.ECHIDNA_TOKEN_CORE_AAM }} + W3C_WG_DECISION_URL: https://lists.w3.org/Archives/Public/public-aria-admin/2018Sep/0011.html + W3C_BUILD_OVERRIDE: | + specStatus: CRD + ARTIFACT_NAME: core-aam + - name: Checkout core-aam repo + uses: actions/checkout@v4 + with: + repository: w3c/core-aam + ref: gh-pages + path: core-aam + token: ${{ secrets.ARIA_EDITOR_DRAFTS }} + - uses: actions/download-artifact@v4 + with: + name: core-aam + - name: Copy files + run: | + cp -r aria.gh/aria/core-aam/** core-aam/ + ls -r core-aam + - name: Push new files to child repo + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add . + git commit -m "ED update" + git push origin gh-pages + working-directory: core-aam + diff --git a/.github/workflows/dpub-aam.yml b/.github/workflows/dpub-aam.yml new file mode 100644 index 000000000..3431cd7a9 --- /dev/null +++ b/.github/workflows/dpub-aam.yml @@ -0,0 +1,69 @@ +name: dpub-aam ED +on: + push: + branches: + - 'main' + paths: + - 'common/**' + - 'dpub-aam/**' + workflow_dispatch: + +jobs: + dispatch: + runs-on: ubuntu-latest + steps: + - name: Dispatch to dpub-aam repo + run: | + curl -L -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{secrets.ARIA_EDITOR_DRAFTS}}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/w3c/dpub-aam/actions/workflows/build-from-monorepo.yaml/dispatches \ + -d '{"ref":"gh-pages"}' + update-dpub-aam: + runs-on: ubuntu-latest + steps: + - name: Checkout monorepo + uses: actions/checkout@v4 + with: + ref: main + path: aria + sparse-checkout: | + dpub-aam + common + - name: Copy common + run: | + mkdir aria/dpub-aam/common + cp -r aria/common/** aria/dpub-aam/common/ + sed -i 's|\.\./common|common|g' aria/dpub-aam/index.html + - uses: w3c/spec-prod@v2 + with: + TOOLCHAIN: respec + SOURCE: aria/dpub-aam/index.html + DESTINATION: aria/dpub-aam/index.html + W3C_ECHIDNA_TOKEN: ${{ secrets.ECHIDNA_TOKEN_DPUB_AAM }} + W3C_WG_DECISION_URL: https://lists.w3.org/Archives/Public/public-aria-admin/2018Sep/0011.html + W3C_BUILD_OVERRIDE: | + specStatus: CRD + ARTIFACT_NAME: dpub-aam + - name: Checkout dpub-aam repo + uses: actions/checkout@v4 + with: + repository: w3c/dpub-aam + ref: gh-pages + path: dpub-aam + token: ${{ secrets.ARIA_EDITOR_DRAFTS }} + - uses: actions/download-artifact@v4 + with: + name: dpub-aam + - name: Copy files + run: | + cp -r aria.gh/aria/dpub-aam/** dpub-aam/ + - name: Push new files to child repo + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add . + git commit -m "ED update" + git push origin gh-pages + working-directory: dpub-aam diff --git a/.github/workflows/dpub-aria.yml b/.github/workflows/dpub-aria.yml new file mode 100644 index 000000000..8c5d4f9e7 --- /dev/null +++ b/.github/workflows/dpub-aria.yml @@ -0,0 +1,69 @@ +name: dpub-aria ED +on: + push: + branches: + - 'main' + paths: + - 'common/**' + - 'dpub-aria/**' + workflow_dispatch: + +jobs: + dispatch: + runs-on: ubuntu-latest + steps: + - name: Dispatch to dpub-aria repo + run: | + curl -L -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{secrets.ARIA_EDITOR_DRAFTS}}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/w3c/dpub-aria/actions/workflows/build-from-monorepo.yaml/dispatches \ + -d '{"ref":"gh-pages"}' + update-dpub-aria: + runs-on: ubuntu-latest + steps: + - name: Checkout monorepo + uses: actions/checkout@v4 + with: + ref: main + path: aria + sparse-checkout: | + dpub-aria + common + - name: Copy common + run: | + mkdir aria/dpub-aria/common + cp -r aria/common/** aria/dpub-aria/common/ + sed -i 's|\.\./common|common|g' aria/dpub-aria/index.html + - uses: w3c/spec-prod@v2 + with: + TOOLCHAIN: respec + SOURCE: aria/dpub-aria/index.html + DESTINATION: aria/dpub-aria/index.html + W3C_ECHIDNA_TOKEN: ${{ secrets.ECHIDNA_TOKEN_DPUB_ARIA }} + W3C_WG_DECISION_URL: https://lists.w3.org/Archives/Public/public-aria-admin/2018Sep/0011.html + W3C_BUILD_OVERRIDE: | + specStatus: CRD + ARTIFACT_NAME: dpub-aria + - name: Checkout dpub-aria repo + uses: actions/checkout@v4 + with: + repository: w3c/dpub-aria + ref: gh-pages + path: dpub-aria + token: ${{ secrets.ARIA_EDITOR_DRAFTS }} + - uses: actions/download-artifact@v4 + with: + name: dpub-aria + - name: Copy files + run: | + cp -r aria.gh/aria/dpub-aria/** dpub-aria/ + - name: Push new files to child repo + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add . + git commit -m "ED update" + git push origin gh-pages + working-directory: dpub-aria diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml deleted file mode 100644 index 5e5b88dfb..000000000 --- a/.github/workflows/gh-pages.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Deploy to gh-pages on push to main, check on pull requests - -# See https://github.com/w3c/spec-prod/blob/main/docs/examples.md#deploy-to-github-pages - -on: - pull_request: {} - push: - branches: [main] -jobs: - main: - name: Build, Validate and Deploy - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v2 - - uses: w3c/spec-prod@v2 - with: - TOOLCHAIN: respec - GH_PAGES_BUILD_OVERRIDE: | - lint: false - BUILD_FAIL_ON: nothing - GH_PAGES_BRANCH: gh-pages - VALIDATE_WEBIDL: false - VALIDATE_MARKUP: false diff --git a/.github/workflows/graphics-aam.yml b/.github/workflows/graphics-aam.yml new file mode 100644 index 000000000..216a7e3e2 --- /dev/null +++ b/.github/workflows/graphics-aam.yml @@ -0,0 +1,62 @@ +name: graphics-aam ED +on: + push: + branches: + - 'main' + paths: + - 'common/**' + - 'graphics-aam/**' + workflow_dispatch: + +jobs: + dispatch: + runs-on: ubuntu-latest + steps: + - name: Dispatch to graphics-aam repo + run: | + curl -L -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{secrets.ARIA_EDITOR_DRAFTS}}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/w3c/graphics-aam/actions/workflows/build-from-monorepo.yaml/dispatches \ + -d '{"ref":"gh-pages"}' + update-graphics-aam: + runs-on: ubuntu-latest + steps: + - name: Checkout monorepo + uses: actions/checkout@v4 + with: + ref: main + path: aria + sparse-checkout: | + graphics-aam + common + - uses: w3c/spec-prod@v2 + with: + TOOLCHAIN: respec + SOURCE: aria/graphics-aam/index.html + DESTINATION: aria/graphics-aam/index.html + ARTIFACT_NAME: graphics-aam + - name: Checkout graphics-aam repo + uses: actions/checkout@v4 + with: + repository: w3c/graphics-aam + ref: gh-pages + path: graphics-aam + token: ${{ secrets.ARIA_EDITOR_DRAFTS }} + - uses: actions/download-artifact@v4 + with: + name: graphics-aam + path: graphics-aam/ + # - name: Copy files + # run: | + # cp -r aria/common graphics-aam + # cp -r aria/graphics-aam . + - name: Push new files to child repo + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add . + git commit -m "Sync from monorepo" + git push origin gh-pages + working-directory: graphics-aam diff --git a/.github/workflows/html-amm.yml b/.github/workflows/html-amm.yml new file mode 100644 index 000000000..3c3912431 --- /dev/null +++ b/.github/workflows/html-amm.yml @@ -0,0 +1,70 @@ +name: html-aam ED +on: + push: + branches: + - 'main' + paths: + - 'common/**' + - 'html-aam/**' + workflow_dispatch: + +jobs: + dispatch: + runs-on: ubuntu-latest + steps: + - name: Dispatch to html-aam repo + run: | + curl -L -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{secrets.ARIA_EDITOR_DRAFTS}}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/w3c/html-aam/actions/workflows/build-from-monorepo.yaml/dispatches \ + -d '{"ref":"gh-pages"}' + update-html-aam: + runs-on: ubuntu-latest + steps: + - name: Checkout monorepo + uses: actions/checkout@v4 + with: + ref: main + path: aria + sparse-checkout: | + html-aam + common + - name: Copy common + run: | + mkdir aria/html-aam/common + cp -r aria/common/** aria/html-aam/common/ + sed -i 's|\.\./common|common|g' aria/html-aam/index.html + - uses: w3c/spec-prod@v2 + with: + TOOLCHAIN: respec + SOURCE: aria/html-aam/index.html + DESTINATION: aria/html-aam/index.html + W3C_ECHIDNA_TOKEN: ${{ secrets.ECHIDNA_TOKEN_HTML_AAM }} + W3C_WG_DECISION_URL: https://lists.w3.org/Archives/Public/public-aria-admin/2018Sep/0011.html + # W3C_NOTIFICATIONS_CC: "${{ secrets.CC }}" + W3C_BUILD_OVERRIDE: | + specStatus: WD + ARTIFACT_NAME: html-aam + - name: Checkout html-aam repo + uses: actions/checkout@v4 + with: + repository: w3c/html-aam + ref: gh-pages + path: html-aam + token: ${{ secrets.ARIA_EDITOR_DRAFTS }} + - uses: actions/download-artifact@v4 + with: + name: html-aam + - name: Copy files + run: | + cp -r aria.gh/aria/html-aam/** html-aam/ + - name: Push new files to child repo + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add . + git commit -m "ED update" + git push origin gh-pages + working-directory: html-aam diff --git a/.github/workflows/labeler.yaml b/.github/workflows/labeler.yaml new file mode 100644 index 000000000..c3f0462bd --- /dev/null +++ b/.github/workflows/labeler.yaml @@ -0,0 +1,15 @@ +name: "Pull Request Labeler" +on: +- pull_request_target + +jobs: + labeler: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 # Uploads repository content to the runner + - uses: actions/labeler@v5 + with: + sync-labels: true diff --git a/.github/workflows/mathml-aam.yml b/.github/workflows/mathml-aam.yml new file mode 100644 index 000000000..0d5c7b832 --- /dev/null +++ b/.github/workflows/mathml-aam.yml @@ -0,0 +1,62 @@ +name: mathml-aam ED +on: + push: + branches: + - 'main' + paths: + - 'common/**' + - 'mathml-aam/**' + workflow_dispatch: + +jobs: + dispatch: + runs-on: ubuntu-latest + steps: + - name: Dispatch to mathml-aam repo + run: | + curl -L -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{secrets.ARIA_EDITOR_DRAFTS}}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/w3c/mathml-aam/actions/workflows/build-from-monorepo.yaml/dispatches \ + -d '{"ref":"gh-pages"}' + update-mathml-aam: + runs-on: ubuntu-latest + steps: + - name: Checkout monorepo + uses: actions/checkout@v4 + with: + ref: main + path: aria + sparse-checkout: | + mathml-aam + common + - uses: w3c/spec-prod@v2 + with: + TOOLCHAIN: respec + SOURCE: aria/mathml-aam/index.html + DESTINATION: aria/mathml-aam/index.html + ARTIFACT_NAME: mathml-aam + - name: Checkout mathml-aam repo + uses: actions/checkout@v4 + with: + repository: w3c/mathml-aam + ref: gh-pages + path: mathml-aam + token: ${{ secrets.ARIA_EDITOR_DRAFTS }} + - uses: actions/download-artifact@v4 + with: + name: mathml-aam + path: mathml-aam/ + # - name: Copy files + # run: | + # cp -r aria/common mathml-aam + # cp -r aria/mathml-aam . + - name: Push new files to child repo + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add . + git commit -m "Sync from monorepo" + git push origin gh-pages + working-directory: mathml-aam diff --git a/.github/workflows/pdf-aam.yml b/.github/workflows/pdf-aam.yml new file mode 100644 index 000000000..6826d8e24 --- /dev/null +++ b/.github/workflows/pdf-aam.yml @@ -0,0 +1,69 @@ +name: pdf-aam ED +on: + push: + branches: + - 'main' + paths: + - 'common/**' + - 'pdf-aam/**' + workflow_dispatch: + +jobs: + dispatch: + runs-on: ubuntu-latest + steps: + - name: Dispatch to pdf-aam repo + run: | + curl -L -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{secrets.ARIA_EDITOR_DRAFTS}}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/w3c/pdf-aam/actions/workflows/build-from-monorepo.yaml/dispatches \ + -d '{"ref":"gh-pages"}' + update-pdf-aam: + runs-on: ubuntu-latest + steps: + - name: Checkout monorepo + uses: actions/checkout@v4 + with: + ref: main + path: aria + sparse-checkout: | + pdf-aam + common + - name: Copy common + run: | + mkdir aria/pdf-aam/common + cp -r aria/common/** aria/pdf-aam/common/ + sed -i 's|\.\./common|common|g' aria/pdf-aam/index.html + - uses: w3c/spec-prod@v2 + with: + TOOLCHAIN: respec + SOURCE: aria/pdf-aam/index.html + DESTINATION: aria/pdf-aam/index.html + # W3C_ECHIDNA_TOKEN: ${{ secrets.ECHIDNA_TOKEN_pdf_aam }} + # W3C_WG_DECISION_URL: https://lists.w3.org/Archives/Public/public-aria-admin/2018Sep/0011.html + # W3C_BUILD_OVERRIDE: | + # specStatus: WD + ARTIFACT_NAME: pdf-aam + - name: Checkout pdf-aam repo + uses: actions/checkout@v4 + with: + repository: w3c/pdf-aam + ref: gh-pages + path: pdf-aam + token: ${{ secrets.ARIA_EDITOR_DRAFTS }} + - uses: actions/download-artifact@v4 + with: + name: pdf-aam + - name: Copy files + run: | + cp -r aria/pdf-aam/** pdf-aam/ + - name: Push new files to child repo + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add . + git commit -m "ED update" + git push origin gh-pages + working-directory: pdf-aam diff --git a/.github/workflows/prettier.yaml b/.github/workflows/prettier.yaml index 284800354..3836b3520 100644 --- a/.github/workflows/prettier.yaml +++ b/.github/workflows/prettier.yaml @@ -15,13 +15,23 @@ jobs: - name: Checkout uses: actions/checkout@v3 with: - # Make sure the actual branch is checked out when running on pull requests - ref: ${{ github.head_ref }} - # This is important to fetch the changes to the previous commit + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} fetch-depth: 0 + - name: Check if PR is from a fork + id: check_fork + run: echo "::set-output name=is_fork::${{ github.event.pull_request.head.repo.fork }}" + - name: Prettify code + id: prettify uses: creyD/prettier_action@v4.3 with: + dry: true prettier_options: --write **/index.html --print-width 200 commit_message: "chore: prettier" + continue-on-error: true + + - name: Handle commit failure + if: ${{ steps.prettify.outcome == 'failure' && steps.check_fork.outputs.is_fork == 'true' }} + run: echo "Please run prettier locally" diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..a4ead5283 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "printWidth": 200 +} \ No newline at end of file diff --git a/README.md b/README.md index 87aed39ae..e68ee64be 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,52 @@ $ git fetch origin $ git branch -u origin/main main ``` -## Other Repositories - -This repository is for the main deliverable of the ARIA Working Group, Accessible Rich Internet Applications. There are several other deliverables, such as ARIA modules, Accessibility API Mappings, and support documents. These are maintained in separate repositories listed on the [ARIA Contribution](https://www.w3.org/WAI/ARIA/contribute) page. Please file issues in the repository specific to the specification to which the issue applies. +## Specifications in this repository + +This repository contains the main deliverable of the ARIA Working Group, Accessible Rich Internet Applications (ARIA), and should be used for issues related to the ARIA spec and and issues that involve both the ARIA spec in conjunction with other specifications maintained by the ARIA working group. All other specifications maintained by ARIA can be found in this repository as well, however, we have separate issue tracking repos for these separate specifications. + +* Accessible Rich Internet Applications (aria) + * [Spec](aria/index.html) + * [Editor's Draft](https://w3c.github.io/aria/) + * [Issue Repository](https://github.com/w3c/aria) +* Accessible Name and Description Computation (accname) + * [Spec](accname/index.html) + * [Editor's Draft](https://w3c.github.io/accname/) + * [Issue Repository](https://github.com/w3c/accname) +* Core Accessibility API Mappings (core-aam) + * [Spec](core-aam/index.html) + * [Editor's Draft](https://w3c.github.io/core-aam/) + * [Issue Repository](https://github.com/w3c/core-aam) +* HTML Accessibility API Mappings (html-aam) + * [Spec](html-aam/index.html) + * [Editor's Draft](https://w3c.github.io/html-aam/) + * [Issue Repository](https://github.com/w3c/html-aam) +* Digital Publishing WAI-ARIA Module (dpub-aria) + * [Spec](dpub-aria/index.html) + * [Editor's Draft](https://w3c.github.io/dpub-aria/) + * [Issue Repository](https://github.com/w3c/dpub-aria) +* Digital Publishing Accessibility API Mappings (dpub-aam) + * [Spec](dpub-aam/index.html) + * [Editor's Draft](https://w3c.github.io/dpub-aam/) + * [Issue Repository](https://github.com/w3c/dpub-aam) +* Graphics WAI-ARIA Module (graphics-aria) + * [Spec](graphics-aria/index.html) + * [Editor's Draft](https://w3c.github.io/graphics-aria/) + * [Issue Repository](https://github.com/w3c/graphics-aria) +* Graphics Accessibility API Mappings (graphics-aam) + * [Spec](graphics-aam/index.html) + * [Editor's Draft](https://w3c.github.io/graphics-aam) + * [Issue Repository](https://github.com/w3c/graphics-aam) +* SVG Accessibility API Mappings (svg-aam) + * [Spec](svg-aam/index.html) + * [Editor's Draft](https://w3c.github.io/svg-aam/) + * [Issue Repository](https://github.com/w3c/svg-aam) +* MathML Accessibility API Mappings (mathml-aam) + * [Spec](mathml-aam/index.html) + * [Editor's Draft](https://w3c.github.io/mathml-aam/) + * [Issue Repository](https://github.com/w3c/mathml-aam) + +In addition to these specifications, there are other deliverables of the [ARIA Contribution](https://www.w3.org/WAI/ARIA/contribute) page. Please file issues in the repository specific to the specification or deliverable to which the issue applies. ## Contributing to this Repository diff --git a/accname/.gitattributes b/accname/.gitattributes new file mode 100644 index 000000000..e5237fb0f --- /dev/null +++ b/accname/.gitattributes @@ -0,0 +1,12 @@ +# Ensure all text files do not accidentally become a CRLF file. +# Agreed upon during 5 August 2015 PF Editors concall. +# To override or prevent this behavior see the following sections. +* text eol=lf + +# Files that will always have CRLF line endings. Example: +# my-special-spec.html eol=crlf + +# Ensure non-text files don't get accidentally swept up by above. +*.png binary +*.jpg binary +*.zargo binary diff --git a/accname/.gitignore b/accname/.gitignore new file mode 100644 index 000000000..ead8624e4 --- /dev/null +++ b/accname/.gitignore @@ -0,0 +1,219 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +<<<<<<< HEAD +*.py[co] +======= +*.py[cod] +>>>>>>> a51b9db2d4ebd2968f49781325ba3e4741f0127f + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/accname/README.md b/accname/README.md new file mode 100644 index 000000000..a5a3a606a --- /dev/null +++ b/accname/README.md @@ -0,0 +1,5 @@ + +# Specification 'accname' + +This is the repository for accname. You're welcome to contribute! Let's make the Web rock our socks +off! diff --git a/accname/index.html b/accname/index.html new file mode 100644 index 000000000..9d0a72a6d --- /dev/null +++ b/accname/index.html @@ -0,0 +1,801 @@ + + + + Accessible Name and Description Computation 1.2 + + + + + + + + + + +
+

+ This document describes how user agents determine the names and + descriptions of accessible objects from web content languages. This information is in turn exposed through + accessibility APIs so that assistive technologies can identify these objects and present + their names or descriptions to users. Documenting the algorithm through which names and descriptions are to be determined promotes interoperable exposure of these properties among different + accessibility APIs and helps to ensure that this information appears in a manner consistent with author intent. +

+

+ The accessible name and description computation specification defines support that applies across multiple content technologies. This includes accessible name and description provided by + general-purpose + WAI-ARIA + [[WAI-ARIA]] roles, states, and [=ARIA/properties=] as well as features specific to individual content languages. +

+

+ This document updates and will eventually supersede the accessible name and description guidance in the + Accessible Name and Description Computation 1.1 [[ACCNAME-1.1]] W3C Recommendation. It is part of the + WAI-ARIA suite described in the + WAI-ARIA Overview. +

+
+
+
+

Introduction

+

+ User agents acquire information from the DOM [[DOM]] and create a parallel structure called the + accessibility tree, made up of accessible objects. An accessible object provides information about its role, + states, and [=ARIA/properties=]. An example is an accessible object whose role is menuitem, is currently in an enabled state, with a + haspopup property, indicating that it leads to a sub-menu. +

+

+ The two properties of accessible objects described in this document are its accessible name and accessible description. The name is a short label + that provides information about the purpose of the object. An example of an accessible name for a menu item is New, signifying that the menu item provides for the creation of new + documents, windows, and so on. +

+

+ The description is a short explanation that further clarifies the nature of the accessible object. It is not always necessary to provide a description if the name is sufficient, but it can + help a user better understand the use of the object. +

+

+ Accessibility APIs currently support flat, unstructured strings for accessible names and descriptions. The result + of the name/description computation is thus a flat string. +

+

+ The terms "accessible name" and "accessible description" are used to emphasize that they are properties of accessible objects as exposed by + Accessibility APIs. However, they are frequently referred to hereafter as simply "name" and "description". +

+
+
+

Important Terms

+
+

While some terms are defined in place, the following definitions are used throughout this document.

+
+
Assistive Technologies
+
+

Hardware and/or software that:

+
    +
  • relies on services provided by a user agent to retrieve and render Web content
  • +
  • works with a user agent or web content itself through the use of APIs, and
  • +
  • provides services beyond those offered by the user agent to facilitate user interaction with web content by people with disabilities
  • +
+

This definition may differ from that used in other documents.

+

Examples of assistive technologies that are important in the context of this document include the following:

+
    +
  • screen magnifiers, which are used to enlarge and improve the visual readability of rendered text and images;
  • +
  • screen readers, which are most-often used to convey information through synthesized speech or a refreshable Braille display;
  • +
  • text-to-speech software, which is used to convert text into synthetic speech;
  • +
  • speech recognition software, which is used to allow spoken control and dictation;
  • +
  • alternate input technologies (including head pointers, on-screen keyboards, single switches, and sip/puff devices), which are used to simulate the keyboard;
  • +
  • alternate pointing devices, which are used to simulate mouse pointing and clicking.
  • +
+
+
Accessible Description
+
+

+ An accessible description provides additional information, related to an interface element, that complements the accessible name. The accessible description might or might not be + visually perceivable. +

+
+
Accessible Name
+
+

+ The accessible name is the name of a user interface element. Each platform accessibility API provides the accessible name + property. The value of the accessible name may be derived from a visible (e.g., the visible text on a button) or invisible (e.g., the text alternative that describes an icon) property of + the user interface element. See related accessible description. +

+

+ A simple use for the accessible name property may be illustrated by an "OK" button. The text "OK" is the accessible name. When the button receives focus, assistive + technologies may concatenate the platform's role description with the accessible name. For example, a screen reader may speak "push-button OK" or "OK button". The + order of concatenation and specifics of the role description (e.g., "button", "push-button", "clickable button") are determined by platform + accessibility APIs or assistive technologies. +

+
+
Tooltip attribute
+
+

Any host language attribute that would result in a user agent generating a tooltip such as in response to a mouse hover in desktop user agents.

+
+
+
+
+
+
+

RFC-2119 Keywords

+

+ RFC-2119 keywords are formatted in uppercase and in bold type font. When the keywords shown above are used, but do not share this format, they do not convey formal information in the RFC + 2119 sense, and are merely explanatory, i.e., informative. As much as possible, such usages are avoided in this specification. +

+
+
+

Normative and Informative Sections

+

The indication whether a section is normative or non-normative (informative) applies to the entire section including sub-sections.

+

+ Informative sections provide information useful to understanding the specification. Such sections may contain examples of recommended practice, but it is not required to follow such + recommendations in order to conform to this specification. +

+
+
+
+

Name and Description

+

+ The starting point of the name and description computation is a DOM [=element=]. The output is a flat, unstructured string that can be as simple as a + single word, or a string of space-separated tokens. Examples include Save and Reload from disk. +

+

+ An important factor is the [=element|element's=] role, that determines which content contributes to the name string. Roles have a nameFrom + RDF property, with three possible values: +

+
+
author
+
+ name is generated from values provided by the author in explicit markup features such as the aria-label and aria-labelledby [=attribute=], or a host language + labeling mechanism, such as the alt or title [=attribute=] in HTML, or the desc [=element=] in + SVG. +
+
contents
+
+ name is generated from the Text [=nodes=] associated with the [=element=]. Although this may be allowed in addition to "author" in some roles, "content" is used only + if higher priority "author" features are not provided. Priority is defined by the text equivalent computation algorithm. +
+
prohibited
+
+ the element has no name. Authors MUST NOT use the aria-label or + aria-labelledby attributes to name the element. +
+
+

+ The Accessible Rich Internet Applications (WAI-ARIA) 1.2 [[!WAI-ARIA]] specification provides lists of + roles that support name from author, roles that support name from content and + roles that cannot be named. +

+
+

Name Computation

+

+ User agents MUST compute an accessible name using the rules outlined below in the section titled + Text Equivalent Computation. +

+
+ +
+

Description Computation

+

+ The following table provides the order of precedence for markup that can be applied to compute an accessible description. User agents MUST use + the first applicable entry from the table where the listed conditions are met, as described in the last column. The user agent MUST NOT use any markup other that the first relevant markup + found, even if that markup results in an empty description: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrecedenceAttributeApplicable conditionsHow used to compute description
1 + aria-describedby attribute + Use on any elementName computation on all nodes referenced by aria-describedby on the element, concatenated, and separated by a space character
2 + aria-description attribute + Use on any elementAs a flat string
3host language features which participate in the description calculation + Unique host language features MAY participate in the description computation for an element, only if they were not already used for the accessible name of the applicable element. See + HTML AAM: Accessible Description Computation + for the HTML elements which meet this condition. + Either a text equivalent computation of the host language element, or the string value of the host language attribute.
4host language tooltip attribute or equivalent feature (e.g., HTML title attribute) +
    +
  • Any element
  • +
  • Only use if not already used for the accessible name of this node
  • +
+
As a flat string
+
+
+

Text Equivalent Computation

+

+ The text equivalent computation is used by both the accessible name and accessible description. There are different rules provided for several + different types of [=element|elements=], [=nodes=], and combinations of markup. Text alternatives are built up, when appropriate, from all the relevant content contained within an + [=element=]. This is accomplished via steps 2B and 2F, which are recursive, using the full set of rules to retrieve text from its own children or nodes it references. +

+

+ The purpose of the computation is to create a perceivable label or description for alternative presentations, in the form of a flat string of space separated textual + tokens. +

+
+

Terminology

+
+
Root node
+
The DOM [=nodes|node=] or [=element=] for which the text alternative is sought.
+
Current node
+
+ The DOM [=nodes|node=] currently traversed to compute the root node's text equivalent. Initially, the current node is + the root node, but at later stages is either some descendant of the root node, or another referenced node. +
+
Rendered child nodes
+
The [=nodes=] that are rendered as child nodes of a given node when taking [=shadow root|shadow roots=] and [=slot|slots=] into consideration.
+
Flat string
+
+ A string of characters where all carriage returns, newlines, tabs, and form-feeds are replaced with a single space, and multiple spaces are reduced to a single space. The string contains + only character data; it does not contain any markup. +
+
Total accumulated text
+
The text equivalent computed up to, but not including the current node.
+
Accumulated text
+
Text accumulated at a step or sequence of steps described below. It is temporary storage for those steps.
+
Result
+
The text equivalent computed at one of the steps described below.
+
Append the result, without a space, to X
+
+
    +
  • If X is empty, copy the result to X.
  • +
  • If X is non-empty, copy the result to the end of X.
  • +
+
+
Append the result, with a space, to X
+
+
    +
  • If X is empty, copy the result to X.
  • +
  • If X is non-empty, add a space to the end of X and then copy the result to X after the space.
  • +
+
+
Prepend result, without a space, to X
+
+
    +
  • If X is empty, copy the result to X.
  • +
  • If X is non-empty, copy the result to the start of X.
  • +
+
+
Prepend the result, with a space, to X
+
+
    +
  • If X is empty, copy the result to X.
  • +
  • If X is non-empty, copy the result to the start of X, and add a space after the copy.
  • +
+
+
+
+
+

Computation steps

+

The text alternative for a given element is computed as follows:

+
    +
  1. + Initialization: Set the root node to the given element, the current node to the + root node, and the total accumulated text to the empty string (""). If the root node's role prohibits naming, return the empty string (""). +
  2. +
  3. + Computation: Compute the text alternative for the current node: +
      +
    1. + Hidden Not Referenced: If the current node is + [=element/hidden=] and is: +
        +
      1. Not part of an aria-labelledby or aria-describedby traversal, where the node directly referenced by that relation was hidden.
      2. +
      3. + Nor part of a native host language text alternative element (e.g. label in HTML) or + attribute traversal, where the root of that traversal was hidden. +
      4. +
      + Return the empty string. +
      +

      It's important to clarify the broad definition of hidden for the purposes of accessible name calculation:

      +
        +
      1. + Nodes with CSS properties display:none, visibility:hidden, visibility:collapse or content-visibility:hidden: They are + considered hidden, as they match the guidelines "not perceivable" and "explicitly hidden". +
      2. +
      3. + Nodes with CSS properties opacity:0 or filter:opacity(0%), or similar SVG mechanisms: They are not considered hidden. Text hidden with these methods + can still be selected or copied, and user agents still expose it in their accessibility trees. +
      4. +
      5. Nodes with the aria-hidden="true" property: it is considered hidden, matching the "explicitly hidden" guideline.
      6. +
      7. Nodes hidden off screen or behind another object: they are not considered hidden. They are exposed in the accessibility tree and they can even name on-screen objects.
      8. +
      +
      +
      +

      + By default, assistive technologies do not relay hidden information, but an author can explicitly override that and include hidden text as part of the + accessible name or accessible description by using aria-labelledby or aria-describedby. +

      +
      + + +
    2. +
    3. + LabelledBy: Otherwise, if the current node has an + aria-labelledby [=attribute=] that contains at least one valid IDREF, and the current node is not already part of an ongoing aria-labelledby or + aria-describedby traversal, process its IDREFs in the order they occur: +
        +
      1. + Set the accumulated text to the empty string. +
      2. +
      3. + For each IDREF: +
          +
        1. + Set the current node to the node referenced by the IDREF. +
        2. +
        3. + LabelledBy Recursion: Compute the text alternative of the + current node beginning with the overall Computation step. Set the result to that text alternative. +
        4. +
        5. + Append a space character and the result to the accumulated text. +
        6. +
        +
      4. +
      5. + Return the accumulated text if it is not the empty string (""). +
      6. +
      +
      +

      + The result of LabelledBy Recursion in combination with Hidden Not Referenced means that + user agents MUST include all nodes in the subtree as part of the accessible name or accessible description, + when the node referenced by aria-labelledby or aria-describedby is hidden. +

      + +
      +
    4. +
    5. + Embedded Control: Otherwise, if the current node is a control embedded within the label + (e.g. any element directly referenced by aria-labelledby) for another widget, where the user can adjust the embedded control's value, then return + the embedded control as part of the text alternative in the following manner: +
        +
      1. Textbox: If the embedded control has role textbox, return its value.
      2. +
      3. + Combobox/Listbox: If the embedded control has role combobox or listbox, + return the text alternative of the chosen option. +
      4. +
      5. + Range: If the embedded control has role range (e.g., a spinbutton or + slider): +
          +
        1. If the aria-valuetext property is present, return its value,
        2. +
        3. Otherwise, if the aria-valuenow property is present, return its value,
        4. +
        5. Otherwise, use the value as specified by a host language attribute.
        6. +
        +
      6. +
      + +
    6. +
    7. + AriaLabel: Otherwise, if the current node has an aria-label [=attribute=] + whose value is not undefined, not the empty string, nor, when trimmed of [=ascii whitespace|whitespace=], is not the empty string: +
        +
      1. + If traversal of the current node is due to recursion and the current node is an embedded control, ignore aria-label and + skip to rule Embedded Control. +
      2. +
      3. Otherwise, return the value of aria-label.
      4. +
      + +
    8. +
    9. + Host Language Label: Otherwise, if the current node's native markup provides an + [=attribute=] (e.g. alt) or [=element=] (e.g. HTML label or SVG title) that defines a text alternative, return that alternative in the form of + a flat string as defined by the host language, unless the element is marked as presentational (role="presentation" or role="none"). +
      + See HTML-AAM, + SVG-AAM, or other host language documentation for more information on markup that defines a text alternative. +
      +
      +

      + For example, in HTML, the img element's alt attribute defines a text alternative string, and the + label element provides text for the referenced form element. In SVG2, the desc and title elements provide a + description of their parent element. +

      +
      +
    10. +
    11. + Name From Content: Otherwise, if the current node's role allows + name from content, or if the current node is referenced by aria-labelledby, aria-describedby, or + is a native host language text alternative [=element=] (e.g. label in HTML), or is a descendant of a native host language text alternative [=element=]: +
        +
      1. + Name From Content Reset: Set the accumulated text to the empty string. +
      2. +
      3. + Name From Generated Content: Check for + CSS generated textual content associated with the current node and include it in the accumulated text. The + CSS ::before and ::after pseudo + elements [[!CSS2]] can provide textual content for [=element|elements=] that have a content model. +
          +
        1. + For ::before pseudo elements, User agents MUST prepend CSS textual content, without a space, + to the textual content of the current node. +
        2. +
        3. + For ::after pseudo elements, User agents MUST append CSS textual content, without a space, to + the textual content of the current node. +
        4. +
        +
      4. + +
      5. + Determine Child Nodes: Determine the rendered child nodes of the current node: +
          +
        1. + If the current node has an attached [=shadow root=], set the rendered child nodes to be the child nodes of the [=shadow root=]. +
        2. +
        3. + Otherwise, if the current node is a [=slot=] with [=slot/assigned nodes=], set the rendered child nodes to be the [=slot/assigned nodes=] of the + current node. +
        4. +
        5. Otherwise, set the rendered child nodes to be the child nodes of the current node.
        6. +
        +
      6. +
      7. + Name From Each Child: For each rendered child node of the + current node: +
          +
        1. + Set the current node to the rendered child node. +
        2. +
        3. + Compute the text alternative of the current node beginning with the overall + Computation step. Set the result to that text alternative. +
        4. +
        5. + Append the result to the accumulated text. +
        6. +
        +
      8. +
      9. + Return the accumulated text if it is not the empty string (""). +
      10. +
      +

      + Important: Each [=nodes|node=] in the subtree is consulted only once. If text has been collected from a descendant, but is referenced by another IDREF in some + descendant node, then that second, or subsequent, reference is not followed. This is done to avoid infinite loops. +

      +
      +

      + This step can apply to the child nodes themselves, which means the computation is recursive and results in text collected from all the elements in the current node's + subtree, no matter how deep it is. However, any given descendant [=nodes|node's=] text alternative can result from higher precedent markup described in steps B through D above, + where "Namefrom: author" attributes provide the text alternative for the entire subtree. +

      +
      +
      +

      + 18 January 2024: The ARIA Working Group is considering the feasibility of joining text strings with and without spaces, depending on the CSS display value of the + current node, and its adjacent nodes and pseudo-elements. The ongoing discussion is in AccName #225. +

      +
      +
    12. +
    13. + Text Node: Otherwise, if the current node is a Text [=Node=], return its textual + contents. +
    14. +
    15. + Recursive Name From Content: Otherwise, if the current node is a descendant of an + element whose Accessible Name or Accessible Description is being computed, and contains descendants, proceed to + Name From Content Reset. +
    16. +
    17. + Tooltip: Otherwise, if the current node has a Tooltip attribute, + return its value. +
      +

      Tooltip attributes are used only if nothing else, including subtree content, has provided results.

      +
      +
    18. +
    19. Append a space character and the result of each step above to the total accumulated text.
    20. +
    +
  4. +
  5. + After all steps are completed, the total accumulated text is used as the accessible name or accessible description of the + [=element=] that initiated the computation. +
  6. +
+
+
+
+
+

Accessible Name and Description Mapping

+

+ Information concerning name and description accessibility API mappings, including relationships, such as labelled-by/label-for and described-by/description-for, is documented in the + Core Accessibility API Mappings specification [[!CORE-AAM-1.2]]. See the mapping table entries for + aria-label, aria-labelledby, and aria-describedby. +

+
+
+

Appendices

+
+

Change Log

+
+

Substantive changes since the last public working draft

+ +
+
+

Substantive changes since the Accessible Name and Description Computation 1.1 Recommendation

+
    + +
  • + 27-June-2019: Add statement allowing for the possibility of naming being prohibited on the root node. Note: This change in and of itself has no implementation impact, but it allows other + specifications to optionally prohibit naming for a top-level element. Furthermore, even if this prohibition is made within a specification, that prohibition will not have any impact on + calculating name from contents. +
  • +
+
+
+
+

Acknowledgments

+

The following people contributed to the development of this document.

+
    + +
+
+

ARIA WG participants at the time of publication

+
    + +
+
+
+
+
+ + diff --git a/common/script/participants.js b/common/script/participants.js index a44728dfd..e161b31ab 100644 --- a/common/script/participants.js +++ b/common/script/participants.js @@ -8,43 +8,19 @@ function getParticipants() { // Define the ID of the list element where the user information will be inserted const LIST_ID = "ack_group"; - /** - * Fetches users and their affiliations from the API and returns an array of user information. - * Each element in the array is an object containing the user's title and affiliation. - * - * @async - * @function getUsersInfo - * @returns {Promise>} - A promise that resolves to an array of user information. - */ async function getUsersInfo() { - // Send a GET request to the users endpoint const response = await fetch(`${BASE_URL}/users`); - // Fetch the JSON data from the response const data = await response.json(); - // Extract the list of users const users = data._links.users; - - // Initialize an empty array to store user information - let usersInfo = []; - // Iterate over each user - for (const user of users) { - // Fetch the affiliation of the current user + + const usersInfo = await Promise.all(users.map(async (user) => { const affiliation = await getAffiliation(user); - // Push an object containing the user's title and affiliation to the usersInfo array - usersInfo.push({ title: user.title, affiliation: affiliation }); - } - // Return the array containing information of all users + return { title: user.title, affiliation: affiliation }; + })); + return usersInfo; } - - /** - * Fetches the affiliation of a given user from the API. - * - * @async - * @function getAffiliation - * @param {Object} user - The user object. - * @returns {Promise} - A promise that resolves to the title of the user's affiliation. - */ + async function getAffiliation(user) { // Send a GET request to the affiliations endpoint of the user const response = await fetch(user.href + "/affiliations/"); @@ -58,23 +34,18 @@ function getParticipants() { // Return the title of the affiliation return affiliation; } - - /** - * Fetches users and their affiliations, creates a list item for each user with their title and affiliation, - * and appends these list items to a specified list in the document. - * - * @async - * @function insertUsersInfoIntoDocument - */ async function insertUsersInfoIntoDocument() { const usersInfo = await getUsersInfo(); const usersList = document.querySelector(`#${LIST_ID} ul`); - - for (const user of usersInfo) { + const fragment = document.createDocumentFragment(); + + usersInfo.forEach(user => { const li = document.createElement("li"); li.textContent = `${user.title} (${user.affiliation})`; - usersList.appendChild(li); - } + fragment.appendChild(li); + }); + + usersList.appendChild(fragment); } insertUsersInfoIntoDocument(); diff --git a/core-aam/.gitattributes b/core-aam/.gitattributes new file mode 100644 index 000000000..e5237fb0f --- /dev/null +++ b/core-aam/.gitattributes @@ -0,0 +1,12 @@ +# Ensure all text files do not accidentally become a CRLF file. +# Agreed upon during 5 August 2015 PF Editors concall. +# To override or prevent this behavior see the following sections. +* text eol=lf + +# Files that will always have CRLF line endings. Example: +# my-special-spec.html eol=crlf + +# Ensure non-text files don't get accidentally swept up by above. +*.png binary +*.jpg binary +*.zargo binary diff --git a/core-aam/.gitignore b/core-aam/.gitignore new file mode 100644 index 000000000..f91ff2b91 --- /dev/null +++ b/core-aam/.gitignore @@ -0,0 +1,216 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml +*.publishproj + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[cod] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/core-aam/.pr-preview.json b/core-aam/.pr-preview.json new file mode 100644 index 000000000..a239968f5 --- /dev/null +++ b/core-aam/.pr-preview.json @@ -0,0 +1,4 @@ +{ + "src_file": "index.html", + "type": "respec" +} diff --git a/core-aam/README.md b/core-aam/README.md new file mode 100644 index 000000000..9ef9fa40d --- /dev/null +++ b/core-aam/README.md @@ -0,0 +1,4 @@ + +# Specification 'core-aam' + +This is the repository for Core Accessibility API Mappings (core-aam), which is part of the [ARIA suite](https://www.w3.org/WAI/ARIA/deliverables). General information about editing specifications is in the [main ARIA repository readme](https://github.com/w3c/aria/). diff --git a/core-aam/css/core-aam.css b/core-aam/css/core-aam.css new file mode 100644 index 000000000..f71ede309 --- /dev/null +++ b/core-aam/css/core-aam.css @@ -0,0 +1,178 @@ +ol{ list-style:decimal; } +ol ol{ list-style:upper-alpha; } +ol ol ol{ list-style:lower-roman; } +ol ol ol ol{ list-style:lower-alpha; } + +table{ + border:solid 2px #999; + border-width:1px 0 0 1px; + margin:0.1em 0 1em; + padding:0; + border-spacing:0; + border-collapse:collapse; +} +th, td{ + border:solid 2px #999; + border-width:0 1px 1px 0; + padding:0.15em 0.3em 0.1em; + /*min-width:20em;*/ + vertical-align:top; + text-align:left; +} +th+th, td+td{ + width:auto; +} +th{ + background-color:#eee; +} +caption{ + text-align:left; + color:#555; + font-style:normal; + margin:1em 0 0.1em; + padding:0 0 0 0.3em; +} +html code, html pre, html kbd{ /* more specific selector than the default W3C style sheet */ + /* Most browsers default 'monospace' to Courier, which has an ex-height of about 60% normal size. */ + /* Monaco has a normal ex-height so font sizes appear more consistent with surrounding non-monospaced text. */ + font-family: "Monaco", "Courier New", "Courier", monospace; + font-family: "Monaco", "Courier New", "Courier"; /* declare as separate rule to account for browser font-size inconsistencies, monospace fallback from previous rule should still work in the [almost non-existant] case that a user system does not have Courier */ + font-size:0.9em; +} +html pre { /* more specific selector than the default W3C style sheet */ + border: solid 1px #999; + background-color: #fcfcfc; + margin:1em 0; + padding:0.5em 0.8em; + font-size:0.75em; /* text in blocks code blocks looked too big now that font is back to normal size */ +} +pre .tag, code .tag, code.tag{ + color:#00c; /* blue */ +} +pre .str, code .str, code.str{ + color:#090; /* green */ +} +pre .comment, code .comment, code.comment, .comment .str, .comment .tag{ + color:#777; /* gray */ +} +/* +.role-reference, .role-reference:link, .role-reference:visited { + background-color: #eee; +} +.state-reference, .state-reference:link, .state-reference:visited { + background-color: #ffc; +} +.property-reference, .property-reference:link, .property-reference:visited { + background-color: #ccf; +} +.widget-reference, .widget-reference:link, .widget-reference:visited { + background-color: #9f6; +} +*/ +.role-reference, .state-reference, .property-reference, .widget-reference, .design-pattern-reference {} +.termref, a.termref:link { + color:#006400; + text-decoration:none; + font-style:italic; +} +a.termref:visited { + color:inherit; +} +a.termref:hover, a.termref:focus { + background-color: #fafad2; + color: #006400; +} +.empty { + display: none; +} +.note { + color:#444; + border:solid 1px #ccc; + margin:1em 0; + padding:1em 2em; +} +.ednote { + border:solid 3px #cca; + background-color:#ffd; + padding:0 0.8em; +} +.role-screenshot { + float: right; + margin-left: 1em; + margin-bottom: 1ex; +} +.role-screenshot p { + text-align: center; + font-size: smaller; +} +.image { + text-align: center; +} +.img { + margin-left: auto; + margin-right: auto; +} +.img p { + text-align: center; + font-weight: bold; + font-size: smaller; +} +.img-caption { + font-weight: bold; +} +/* +dl.runin dt { + display: run-in; +} +dl.runin dt:after { + content: ": "; +} +*/ +dl.compact dt { + font-weight:normal; +} +/* +dl.compact dd { + margin-left: 5em; +} +*/ +.rfc2119 { + font-weight: bold; + text-transform: uppercase; +} +.tocnum {} +.section {} +.todo { + background-color:#f99; +} +.issue { + background-color:#0c0; + text-transform:uppercase; +} + +.script-function, .script-property, .api-role, .api-method, .api-property, .api-state, .api-relation, .api-interface, .api-event, .api-object, .dom-property, .dom-method, .dom-event, .css-selector, .css-property { + font-family: monospace; +} +.script-function:after, .api-method:after, .dom-method:after { + font-family: monospace; + content: "()"; +} +.property-value, .api-property-value, .dom-property-value, .script-property-value, .css-property-value { + font-weight: bold; +} +.xsd-type {} + +/* Permalinks */ +.permalink { + float: right; + margin-top: -2.5em; + /*color:#333 !important;*/ +} +.permalink a, .permalink a:link, .permalink a:visited, .permalink a:hover, .permalink a:focus, .permalink a:active +{ + background:transparent !important; + text-decoration:none; +} +.permalink abbr { + border:0; +} diff --git a/core-aam/index.html b/core-aam/index.html new file mode 100644 index 000000000..e98f9fa5f --- /dev/null +++ b/core-aam/index.html @@ -0,0 +1,11264 @@ + + + + Core Accessibility API Mappings 1.2 + + + + + + + + + + + + + + +
+

+ This document describes how [=user agents=] should expose semantics of web content languages to accessibility APIs. This helps users with disabilities to obtain and interact with information using assistive technologies. Documenting these mappings promotes interoperable exposure of + roles, states, properties, and events implemented by accessibility APIs and helps to ensure that this information appears in a manner consistent with author intent. +

+

+ This Core Accessibility API Mappings specification defines support that applies across multiple content technologies, including general keyboard navigation support and mapping of + general-purpose roles, states, and properties provided in Web content via + WAI-ARIA + [[WAI-ARIA-1.2]]. Other Accessibility API Mappings specifications depend on and extend this Core specification for specific technologies, including native technology features and WAI-ARIA + extensions. This document updates and will eventually supersede the guidance in the Core Accessibility API Mappings 1.1 [[CORE-AAM-1.1]] W3C + Recommendation. It is part of the WAI-ARIA suite described in the + WAI-ARIA Overview. +

+
+
+

+ The Accessible Rich Internet Applications Working Group seeks feedback on any aspect of the specification. When submitting feedback, please consider issues in the context of the companion + documents. To comment, file an issue in the W3C core-aam GitHub repository. If this is + not feasible, send email to public-aria@w3.org (comment archive). In-progress updates to the document may be viewed in the publicly visible editors' draft. +

+
+
+

Introduction

+

+ The Core Accessibility API Mappings specifies how WAI-ARIA roles, states, and + [=ARIA/properties=] are expected to be exposed by user agents via platform accessibility APIs. It is part of a set of resources that + define and support the WAI-ARIA specification which includes the following documents: +

+ +

+ For an introduction to WAI-ARIA, see the + WAI-ARIA Overview. +

+
+

Accessibility APIs

+

+ Accessibility APIs make it possible to communicate accessibility information about user interfaces to assistive + technologies. This information includes: +

+
    +
  1. Descriptive properties (role, name, value, position, etc.)
  2. +
  3. Transient states (pressed, focused, etc.)
  4. +
  5. Events (text changed, button was clicked, checkbox was toggled)
  6. +
  7. Actions the user might take (click, check/toggle, drag, etc.)
  8. +
  9. Relationships (parent/child, description/described object, previous object/next object, etc.)
  10. +
  11. Textual content
  12. +
+

Accessibility APIs covered by this specification are:

+
    +
  • MSAA with IAccessible2 1.3 [[IAccessible2]]
  • +
  • User Interface Automation [[UI-AUTOMATION]]
  • +
  • ATK - Accessibility Toolkit [[ATK]] and Assistive Technology Service Provider Interface [[AT-SPI]], referred to hereafter as "ATK/AT-SPI"
  • +
  • macOS Accessibility Protocol [[AXAPI]]
  • +
+

+ The WAI-ARIA 1.0 User Agent Implementation Guide included mappings for [[UIA-EXPRESS]], also known as IAccessibleEx, + which was implemented in Microsoft Internet Explorer 8.0 - 11. New implementations are strongly encouraged to use [[[UI-AUTOMATION]]] instead. +

+

+ If user agent developers need to expose information using other accessibility APIs, it is recommended that they work closely with the + developer of the platform where the API runs, and assistive technology developers on that platform. +

+
+
+

Comparing Accessibility APIs

+

+ For various technological and historical reasons, accessibility APIs do not all work in the same way. In many cases, there is no simple one-to-one relationship between how each of them names + or exposes roles, states, and properties to assistive technologies. The following subsections describe a few of the distinguishing characteristics of some of the APIs. +

+
+
ATK/AT-SPI
+

+ MSAA, IAccessible2, UIA, and AX API each define an API that is shared by both the software application exposing information about its content and interactive components, and the assistive + technology consuming that information. Conversely, Linux/GNOME separates that shared interface into its two aspects, each represented by a different accessibility API: ATK or AT-SPI. +

+

+ ATK defines an interface that is implemented by software in order to expose accessibility information, whereas AT-SPI is a desktop service that gathers accessibility information from + active applications and relays it to other interested applications, usually assistive technologies. +

+

+ For example, the GNOME GUI toolkit [GTK], implements the relevant aspects of ATK for each widget (menu, combobox, checkbox, etc.) in order that GTK widgets expose accessibility information + about themselves. AT-SPI then acquires the information from applications built with GTK and makes it available to interested parties. +

+

+ ATK is most relevant to implementors, whereas AT-SPI is relevant to consumers. In the context of mapping WAI-ARIA roles, states and properties, user agents are implementors and use ATK. + Assistive Technologies are consumers, and use AT-SPI. +

+
+
+
UIA (UI Automation)
+

+ UI Automation expresses every element of the application user interface as an automation element. Automation elements form the nodes of the application accessibility tree, that can be + queried, traversed and interacted with by automation clients. +

+

There are several concepts central to UI Automation:

+
    +
  • Automation element - controls and some application content are presented as automation elements.
  • +
  • + Element properties - Automation elements have several common properties describing native framework element characteristics in an agnostic way that all automation clients can understand. + There are several ways to access element property values, described below. +
  • +
  • + Control Patterns - Some common interactivity in different frameworks is expressed as control patterns in UIA, allowing different automation clients to interact with controls using common + programmatic interfaces. +
  • +
  • Events - Similar to other accessibility APIs, automation elements support various events that allow automation providers to notify clients on important state changes.
  • +
+

+ All automation elements inherit from the IUIAutomationElement interface and all properties that are not specific to a particular control pattern can be queried through that + interface. There are several ways to access UI Automation element properties: +

+
    +
  • Direct property accessors to the current values - Current{PropertyName}, e.g. IUIAutomationElement::CurrentName for the Name property
  • +
  • + Cached property accessors - Cached{PropertyName}, e.g. IUIAutomationElement::CachedName for the Name property. Using cached values is preferred + when providers and clients are used in remote environments. +
  • +
  • + GetCurrentPropertyValue and passing the UIA Property ID enumeration value corresponding to that property to get the current value, e.g. + IUIAutomationElement::GetCurrentPropertyValue(UIA_NamePropertyId) for the Name property. +
  • +
  • + GetCachedPropertyValue and passing the UIA Property ID enumeration value corresponding to that property to get the cached value, e.g. + IUIAutomationElement::GetCachedPropertyValue(UIA_NamePropertyId) for the Name property. +
  • +
+

+ Properties for specific UIA control patterns are queried the same way using relevant control pattern interfaces. Taking Toggle Pattern as an example, to query the ToggleState property + clients can use IUIAutomationTogglePattern::CurrentToggleState or IUIAutomationTogglePattern::GetCurrentPropertyValue(UIA_ToggleToggleStatePropertyId) to get the current value. +

+

+ The property mappings in this specification provide the {PropertyName} and do not specify all specific ways to access the property value. Automation clients can access current + or cached values using conventions described above, depending on specific needs and coding style conventions. +

+
+
+
Accessible Names and Descriptions
+

+ Each platform accessibility API includes a way to assign and retrieve accessible name and + accessible description properties for each accessible object created in the + accessibility tree. How these properties are implemented and what they are called vary depending on the API. +

+

+ For instance, in MSAA, all accessible objects support the accName property, which stores the object's + accessible name. Where the object also supports having an + accessible description, MSAA stores this property in the object's accDescription property. +

+

+ Software using ATK can read and write to an object's accessible-name and accessible-description properties. In turn, AT-SPI can query the values of those + properties through its atspi_accessible_get_name and atspi_accessible_get_description functions. +

+

+ Automation elements in the UIA accessibility tree have a Name property. Where the object also supports having an + accessible description, UIA stores this property in the object's FullDescription property. +

+

+ The approach to accessible names and + accessible descriptions in AX API is somewhat different to the other platform + APIs. Accessible names are exposed using the AXTitle property when the name is visually rendered, while the + AXDescription property is used when the object's name is not rendered visually. An object's + accessible description, where provided by + aria-description or aria-describedby, should be exposed in the accessibilityCustomContent API. Otherwise, it should be exposed as AXHelp. +

+

For more detail, see the Accessible Name and Description Computation specification.

+
+
+
+
+
+

RFC-2119 Keywords

+

+ RFC-2119 keywords are formatted in uppercase and contained in a strong element with class="rfc2119". When the keywords shown above are used, but do not share this + format, they do not convey formal information in the RFC 2119 sense, and are merely explanatory, i.e., informative. As much as possible, such usages are avoided in this specification. +

+
+
+

Normative and Informative Sections

+

The indication whether a section is normative or non-normative (informative) applies to the entire section including sub-sections.

+

+ Informative sections provide information useful to understanding the specification. Such sections may contain examples of recommended practice, but it is not required to follow such + recommendations in order to conform to this specification. +

+
+
+

Features Deprecated in WAI-ARIA

+

+ The WAI-ARIA specification lists some features as deprecated. Although this means authors are encouraged not to use such features, it is expected + that the features could still be used in legacy content. Therefore, it is important that user agents continue to map these features to accessibility APIs, and doing so is part of conformance + to this specification. When future versions of the WAI-ARIA specification change such features from deprecated to removed, they will be removed from the mappings as well and user agents will + no longer be asked to continue support for those features. +

+
+
+
+

Important Terms

+
+

While some terms are defined in place, the following definitions are used throughout this document.

+
+
Accessibility Subtree
+
+

+ An [=accessible object=] in the accessibility tree and its descendants in that tree. It does not include objects which have relationships other than parent-child in that tree. For + example, it does not include objects linked via aria-flowto unless those objects are also descendants in the accessibility tree. +

+
+
Activation behavior
+
+

+ The action taken when an event, typically initiated by users through an input device, causes an element to fulfill a defined role. The role may be defined for that element by the + host language, or by author-defined variables, or both. The role for any given element may be a generic action, or may be unique to that element. For example, the activation behavior of + an HTML or SVG <a> element shall be to cause the user agent to traverse + the link specified in the href attribute, with the further optional parameter of specifying the browsing context for the traversal (such as the current window or tab, a + named window, or a new window); the activation behavior of an HTML <input> element with the type attribute + value submit shall be to send the values of the form elements to an author-defined IRI by the author-defined + HTTP method. +

+
+
+
+
+
+

Mapping WAI-ARIA to Accessibility APIs

+
+

General rules for exposing WAI-ARIA semantics

+

+ Where supported by the platform Accessibility API, [=user agents=] expose WAI-ARIA + semantics through the standard mechanisms of the desktop accessibility API. For example, for + WAI-ARIA widgets, compare how the widget is exposed in a similar desktop widget. In general most + WAI-ARIA widget capabilities are exposed through the role, value, Boolean states, and + relations of the accessibility API. +

+

+ With respect to WAI-ARIA 1.0 and 1.1, accessibility APIs operate in one + direction only. User agents publish WAI-ARIA information (roles, states, and properties) via an accessibility + API, and an AT can acquire that information using the same + API. However, the other direction is not supported. WAI-ARIA 1.0 and 1.1 do + not define mechanisms for assistive technologies to directly modify WAI-ARIA information. +

+

+ The terms "exposing", "mapping", and "including" refer to the creation of accessible object nodes within the + accessibility tree, and populating these objects with Accessibility API specific states and [=ARIA/properties=]. +

+
+
+

Conflicts between native markup semantics and WAI-ARIA

+

+ WAI-ARIA roles, states, and properties are intended to add semantic information when native host language + elements with these semantics are not available, and are generally used on elements that have no native semantics of their own. They can also be used on elements that + have similar but not identical semantics to the intended object (for instance, a nested list could be used to represent a tree structure). This method can be part of a fallback strategy for + older browsers that have no WAI-ARIA implementation, or because native presentation of the repurposed element reduces the amount of + style and/or script needed. Except for the cases outlined below, [=user agents=] MUST always use the WAI-ARIA semantics to define + how it exposes the element to accessibility APIs, rather than using the host language semantics. +

+

+ Host languages can have features that have implicit WAI-ARIA semantics corresponding to roles. When a + WAI-ARIA role is provided that has a corresponding role in the accessibility + API, user agents MUST use the semantic of the WAI-ARIA role for processing, + not the native semantic, unless the role requires WAI-ARIA states and properties whose attributes are explicitly forbidden on the + native element by the host language. Values for roles do not conflict in the same way as values for states and properties, and because authors are expected to have a valid reason to provide + a WAI-ARIA role even on elements that would not normally be repurposed. For example, spin buttons are typically constructed from + text fields (<input type="text">) in order to get most of the default keyboard support. But, the native role, "text field", is not correct because it + does not properly communicate the additional features of a spin button. The author adds the WAI-ARIA role of + spinbutton (<input type="text" role="spinbutton" ...>) so that the control is properly mapped in the accessibility + API. When a WAI-ARIA role is provided that does not have a corresponding role + in the accessibility API, user agents MAY expose the native semantic in addition to the + WAI-ARIA role. If the host language element is overridden by a + WAI-ARIA role whose semantics or structure is not equivalent to the native host language semantics or to a subclass of those + semantics, then treat any child elements having roles specified as Allowed Accessibility Child Roles as having presentation or + none. +

+

+ The above text differs slightly from the WAI-ARIA specification. The requirement for user agents to expose the + WAI-ARIA role instead of the native role was intended to only apply in cases where there is a direct mapping from the + WAI-ARIA role to a corresponding role in the accessibility API. The wording + of the requirement is not clear in the WAI-ARIA specification, however, and has been interpreted differently by implementers. The + requirement has been clarified here and an additional statement added to indicate that user agents may expose native semantics if there is not a direct mapping to a role in the accessibility + API. Because there are differing implementations, authors will be advised against adding such + WAI-ARIA roles to native elements that have their own semantics in the + WAI-ARIA Authoring Practices Guide. +

+

+ When WAI-ARIA states and properties correspond to host language features that have the same implicit + WAI-ARIA semantic, it can be problematic if the values become out of sync. For example, the + HTML checked attribute and the aria-checked attribute could have conflicting values. Therefore to prevent providing + conflicting states and properties to assistive technologies, host languages will explicitly declare where the use of + WAI-ARIA attributes on a host language element conflict with native attributes for that element. When a host language declares a + WAI-ARIA attribute to be in direct semantic conflict with a native attribute for a given element, user + agents MUST ignore the WAI-ARIA attribute and instead use the host language attribute with the same implicit semantic. +

+

+ Host languages might also document features that cannot be overridden with WAI-ARIA (these are called "strong native + semantics"). These can be features that have implicit WAI-ARIA semantics as well as features where the processing would be + uncertain if the semantics were changed with WAI-ARIA. While conformance checkers might signal an error or warning when a + WAI-ARIA role is used on elements with strong native semantics, user agents MUST still use the value of the semantic of the + WAI-ARIA role when exposing the element to accessibility APIs. +

+
+
+

Exposing attributes that do not directly map to accessibility API properties

+

+ Platform accessibility APIs might have features that are not in WAI-ARIA. Likewise, + WAI-ARIA exposes capabilities that are not supported by accessibility + APIs at the time of publication. There typically is not a one to one relationship between all + WAI-ARIA attributes and platform accessibility APIs. + When WAI-ARIA roles, states and [=ARIA/properties=] do not directly map to an + accessibility API, and there is a mechanism in the API to expose the + WAI-ARIA role, states, and properties and their values, [=user agents=] MUST expose the + WAI-ARIA data using that mechanism as follows: +

+
    +
  • + In IAccessible2 and ATK/AT-SPI, use object attributes to expose + semantics that are not directly supported in the APIs. Object attributes are name-value pairs that are + loosely specified, and very flexible for exposing things where there is no specific interface in an accessibility API. For example, + at this time, the aria-live attribute can be exposed via an object attribute because accessibility + APIs have no such property available. Specific rules for exposing object attribute name-value pairs are described throughout this + document, and rules for the general cases are in State and Property Mapping. +
  • +
  • + In Microsoft UIA, use the AriaRole and AriaProperties properties to expose semantics that are not directly + supported in the control type. +
  • +
+

+ MSAA does not provide a mechanism for exposing attributes that do not map directly to the API and among implementers, there is no + agreement on how to do it. +

+

+ User agents MUST also expose the entire role string through this mechanism and MAY also expose WAI-ARIA attributes and values + through this mechanism even when there is a direct mapping to an accessibility API. +

+

+ Browser implementers are advised to publicly document their API methods for exposing any relevant information, so that + assistive technology developers can use the API to support user features. +

+
+
+

Role mapping

+

+ Platform accessibility APIs traditionally have had a finite set of predefined roles that are expected by + assistive technologies on that platform and only one or two roles may be exposed. In contrast, + WAI-ARIA allows multiple roles to be specified as an ordered set of space-separated valid role tokens. The additional roles are + fallback roles similar to the concept of specifying multiple fonts in case the first choice font type is not supported. +

+
+

General rules

+

+ User agents MUST expose the WAI-ARIA role string if the API supports a + mechanism to do so. This allows assistive technologies to do their own additional processing of roles. +

+
    +
  • + MSAA: + not supported. User agents SHOULD NOT expose a custom role in + MSAA's accRole property. +
  • +
  • IAccessible2: expose as an object attribute pair (xml-roles:"string")
  • +
  • + UIA: expose as AriaRole property. The AriaRole property can also support secondary roles using a space as a + separator. +
  • +
  • + ATK/AT-SPI: expose as an object attribute pair + (xml-roles:"string") +
  • +
+
+
+

Computed Role

+

+ The `computedrole` of an element is a string that represents the role of the element as computed by the browser engine. The `computedrole` is used primarily for the purposes of developer + tools and specification comformance and interoperability testing. +

+

+ User agents provide this role string, for example, in developer tools, and in response to the WebDriver function + `getComputedRole`, which is used for + interoperability testing of ARIA, HTML-AAM, and other specifications. +

+ +

+ When an element has a role but is not contained in the required context (for example, an orphaned `listitem` without the required accessible parent of role `list`), User Agents MUST ignore + the role token, and return the `computedrole` as if the ignored role token had not been included. +

+ +

+ When host language elements do not have an exact or equivalent mapping to a valid, non-abstract role, the related Accessibilty API Mapping extension specification MAY specify a unique + `computedrole` string as the return value for interoperability testing purposes, such as `<video> -> "html-video"` in [[HTML-AAM]]. However, authors MUST NOT use any + host-language-prefixed `computedrole` string in the `role` attribute (such as `html-video`), unless the token also matches valid, defined role (such as `dpub-chapter`). User Agents MUST + ignore any abstract or invalid role token. +

+ +
+
+

Role Mapping Tables

+

alert

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + alert +
Computed Role +

alert

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_ALERT
+ Event: The user agent SHOULD fire EVENT_SYSTEM_ALERT. [Note 2] +
UIA + Control Type: Group
+ Localized Control Type: alert
+ LiveSetting: Assertive (2)
+ Event: The user agent SHOULD fire a system alert event. [Note 2] +
ATK/AT-SPI + Role: ROLE_NOTIFICATION
+ Event: The user agent SHOULD fire a system alert event. [Note 2] +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXApplicationAlert
+ Event: The user agent SHOULD fire a system alert event. [Note 2] +
+

alertdialog

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + alertdialog +
Computed Role +

alertdialog

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_DIALOG
+ Event: The user agent SHOULD fire EVENT_SYSTEM_ALERT. [Note 2] +
UIA + Control Type: Pane
+ Event: The user agent SHOULD fire a system alert event. [Note 2] +
ATK/AT-SPI + Role: ROLE_ALERT
+ Interface: Window
+ Event: The user agent SHOULD fire a system alert event. [Note 2] +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXApplicationAlertDialog
+ Event: The user agent SHOULD fire a system alert event. [Note 2] +
+

application

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + application +
Computed Role +

application

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_APPLICATION +
UIA + Control Type: Pane
+ Localized Control Type: application +
ATK/AT-SPI + Role: ROLE_EMBEDDED +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXWebApplication
+
+

article

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + article +
Computed Role +

article

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_DOCUMENT
+ State: STATE_SYSTEM_READONLY
+ Object Attribute: xml-roles:article +
UIA + Control Type: Group
+ Localized Control Type: article +
ATK/AT-SPI + Role: ROLE_ARTICLE
+ Object Attribute: xml-roles:article +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXDocumentArticle
+
+

banner

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + banner +
Computed Role +

banner

+
MSAA + IAccessible2 + Role: IA2_ROLE_LANDMARK
+ Object Attribute: xml-roles:banner +
UIA + Control Type: Group
+ Localized Control Type: banner
+ Landmark Type: Custom
+ Localized Landmark Type: banner +
ATK/AT-SPI + Role: ROLE_LANDMARK
+ Object Attribute: xml-roles:banner +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXLandmarkBanner
+
+

blockquote

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + blockquote +
Computed Role +

blockquote

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Role: IA2_ROLE_BLOCK_QUOTE +
UIA + Control Type: Group
+ Localized Control Type: blockquote +
ATK/AT-SPI + Role: ROLE_BLOCK_QUOTE
+
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: <nil>
+
+

button with default values for aria-pressed and aria-haspopup

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + button with default values for aria-pressed and + aria-haspopup +
Computed Role +

button

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_PUSHBUTTON +
UIA + Control Type: Button +
ATK/AT-SPI + Role: ROLE_PUSH_BUTTON +
+ AX API[Note 1] + + AXRole: AXButton
+ AXSubrole: <nil>
+
+

button with non-false value for aria-haspopup

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + button with non-false value for aria-haspopup +
Computed Role +

button

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_BUTTONMENU +
UIA + Control Type: Button +
ATK/AT-SPI + Role: ROLE_PUSH_BUTTON +
+ AX API[Note 1] + + AXRole: AXPopUpButton
+ AXSubrole: <nil>
+
+

button with defined value for aria-pressed

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + button with defined value for aria-pressed +
Computed Role +

button

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_PUSHBUTTON
+ Role: IA2_ROLE_TOGGLE_BUTTON +
UIA + Control Type: Button +
ATK/AT-SPI + Role: ROLE_TOGGLE_BUTTON +
+ AX API[Note 1] + + AXRole: AXCheckBox
+ AXSubrole: AXToggle
+
+

caption

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + caption +
Computed Role +

caption

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Role: IA2_ROLE_CAPTION +
UIA + Control Type: Text +
ATK/AT-SPI + Role: ROLE_CAPTION +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: <nil>
+
+

cell

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + cell +
Computed Role +

cell

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_CELL
+ Interface: IAccessibleTableCell +
UIA + Control Type: DataItem
+ Localized Control Type: item
+ Control Pattern: GridItem
+ Control Pattern: TableItem +
ATK/AT-SPI + Role: ROLE_TABLE_CELL
+ Interface: TableCell +
+ AX API[Note 1] + + AXRole: AXCell
+ AXSubrole: <nil>
+
+

checkbox

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + checkbox +
Computed Role +

checkbox

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_CHECKBUTTON
+ See also: aria-checked in the State and Property Mapping Tables +
UIA + Control Type: Checkbox
+ See also: aria-checked in the State and Property Mapping Tables +
ATK/AT-SPI + Role: ROLE_CHECK_BOX
+ See also: aria-checked in the State and Property Mapping Tables +
+ AX API[Note 1] + + AXRole: AXCheckBox
+ AXSubrole: <nil>
+ See also: aria-checked in the State and Property Mapping Tables +
+

code

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + code +
Computed Role +

code

+
MSAA + IAccessible2 + Role: IA2_ROLE_TEXT_FRAME
+ Object Attribute: xml-roles:code +
UIA + Control Type: Text
+ Localized Control Type: code +
ATK/AT-SPI + Role: ROLE_STATIC
+ Object Attribute: xml-roles:code +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXCodeStyleGroup
+
+

columnheader

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + columnheader +
Computed Role +

columnheader

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_COLUMNHEADER
+ Interface: IAccessibleTableCell +
UIA + Control Type: DataItem
+ Localized Control Type: column header
+ Control Pattern: GridItem
+ Control Pattern: TableItem +
ATK/AT-SPI + Role: ROLE_COLUMN_HEADER
+ Interface: TableCell +
+ AX API[Note 1] + + AXRole: AXCell
+ AXSubrole: <nil>
+
+

combobox

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + combobox +
Computed Role +

combobox

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_COMBOBOX
+ State: STATE_SYSTEM_HASPOPUP
+ State: STATE_SYSTEM_COLLAPSED if aria-expanded is not "true" +
UIA + Control Type: Combobox +
ATK/AT-SPI + Role: ROLE_COMBO_BOX
+ State: STATE_EXPANDABLE
+ State: STATE_HAS_POPUP +
+ AX API[Note 1] + + AXRole: AXComboBox
+ AXSubrole: <nil>
+
+

comment

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + comment +
Computed Role +

comment

+
MSAA + IAccessible2 + Role: IA2_ROLE_COMMENT
+ Object Attribute: xml-roles:comment +
UIA + Control Type: Group
+ Localized Control Type: comment
+
ATK/AT-SPI + Role: ROLE_COMMENT
+ Object Attribute: xml-roles:comment +
+ AX API[Note 1] + + AXRole: AXGroup
+
+

complementary

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + complementary +
Computed Role +

complementary

+
MSAA + IAccessible2 + Role: IA2_ROLE_LANDMARK
+ Object Attribute: xml-roles:complementary +
UIA + Control Type: Group
+ Localized Control Type: complementary
+ Landmark Type: Custom
+ Localized Landmark Type: complementary +
ATK/AT-SPI + Role: ROLE_LANDMARK
+ Object Attribute: xml-roles:complementary +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXLandmarkComplementary
+
+

contentinfo

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + contentinfo +
Computed Role +

contentinfo

+
MSAA + IAccessible2 + Role: IA2_ROLE_LANDMARK
+ Object Attribute: xml-roles:contentinfo +
UIA + Control Type: Group
+ Localized Control Type: content information
+ Landmark Type: Custom
+ Localized Landmark Type: content information +
ATK/AT-SPI + Role: ROLE_LANDMARK
+ Object Attribute: xml-roles:contentinfo +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXLandmarkContentInfo
+
+

definition

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + definition +
Computed Role +

definition

+
MSAA + IAccessible2 + Object Attribute: xml-roles:definition +
UIA + Control Type: Group
+ Localized Control Type: definition +
ATK/AT-SPI + Role: ROLE_DESCRIPTION_VALUE
+ Object Attribute: xml-roles:definition +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXDefinition
+
+

deletion

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + deletion +
Computed Role +

deletion

+
MSAA + IAccessible2 + Role: IA2_ROLE_CONTENT_DELETION +
UIA + Control Type: Text
+ Localized Control Type: deletion +
ATK/AT-SPI + Role: ROLE_CONTENT_DELETION
+ Object Attribute: xml-roles:deletion +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXDeleteStyleGroup
+ AXAttributedStringForTextMarkerRange: contains AXIsSuggestedDeletion = 1; for all text contained in a deletion +
+

dialog

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + dialog +
Computed Role +

dialog

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_DIALOG +
UIA + Control Type: Pane +
ATK/AT-SPI + Role: ROLE_DIALOG
+ Interface: Window +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXApplicationDialog
+
+

directory (deprecated)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + directory +
Computed Role +

list

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_LIST +
UIA + Control Type: List +
ATK/AT-SPI + Role: ROLE_LIST +
+ AX API[Note 1] + + AXRole: AXList
+ AXSubrole: AXContentList
+
+

document

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + document +
Computed Role +

document

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_DOCUMENT
+ State: STATE_SYSTEM_READONLY +
UIA + Control Type: Document +
ATK/AT-SPI + Role: ROLE_DOCUMENT_FRAME +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXDocument
+
+

emphasis

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + emphasis +
Computed Role +

emphasis

+
MSAA + IAccessible2 + Role: IA2_ROLE_TEXT_FRAME
+ Object Attribute: xml-roles:emphasis +
UIA + Control Type: Text
+ Localized Control Type: emphasis +
ATK/AT-SPI + Role: ROLE_STATIC
+ Object Attribute: xml-roles:emphasis +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXEmphasisStyleGroup
+
+

feed

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + feed +
Computed Role +

feed

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Object Attribute: xml-roles:feed +
UIA + Control Type: Group
+ Localized Control Type: feed +
ATK/AT-SPI + Role: ROLE_PANEL
+ Object Attribute: xml-roles:feed +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXApplicationGroup
+
+

figure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + figure +
Computed Role +

figure

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Object Attribute: xml-roles:figure +
UIA + Control Type: Group
+ Localized Control Type: figure +
ATK/AT-SPI + Role: ROLE_PANEL
+ Object Attribute: xml-roles:figure +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: <nil>
+
+

form with an accessible name

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + form with an accessible name +
Computed Role +

form

+
MSAA + IAccessible2 + Role: IA2_ROLE_FORM
+ Object Attribute: xml-roles:form +
UIA + Control Type: Group
+ Localized Control Type: form
+ Landmark Type: Form +
ATK/AT-SPI + Role: ROLE_LANDMARK
+ Object Attribute: xml-roles:form +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXLandmarkForm
+
+

form without an accessible name

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + form without an accessible name +
Computed Role +

form

+
MSAA + IAccessible2 + Do not expose the element as a landmark. Use the native host language role of the element instead. +
UIA + Do not expose the element as a landmark. Use the native host language role of the element instead. +
ATK/AT-SPI + Do not expose the element as a landmark. Use the native host language role of the element instead. +
+ AX API[Note 1] + + Do not expose the element as a landmark. Use the native host language role of the element instead. +
+

generic

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + generic +
Computed Role +

generic

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Role: IA2_ROLE_SECTION +
UIA + Control Type: Group +
ATK/AT-SPI + Role: ROLE_SECTION
+
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: <nil>
+
+

grid

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + grid +
Computed Role +

grid

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_TABLE
+ Object Attribute: xml-roles:grid
+ Interface: IAccessibleTable2
+ Method: IAccessible::accSelect()
+ Method: IAccessible::get_accSelection() +
UIA + Control Type: DataGrid
+ Control Pattern: Grid
+ Control Pattern: Table
+ Control Pattern: Selection +
ATK/AT-SPI + Role: ROLE_TABLE
+ Object Attribute: xml-roles:grid
+ Interface: Table
+ Interface: Selection +

+ Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return + false for all Selection methods that provide a means to modify the selection. +

+
+ AX API[Note 1] + + AXRole: AXTable
+ AXSubrole: <nil>
+ AXColumnHeaderUIElements: a list of pointers to the columnheader elements
+ AXHeader: a pointer to the row or group containing those columnheader elements
+ AXRowHeaderUIElements: a list of pointers to the rowheader elements +
+

gridcell

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + gridcell +
Computed Role +

gridcell

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_CELL
+ Interface: IAccessibleTableCell +
UIA + Control Type: DataItem
+ Localized Control Type: item
+ Control Pattern: SelectionItem
+ Control Pattern: GridItem
+ Control Pattern: TableItem
+ SelectionItem.SelectionContainer: the containing grid +
ATK/AT-SPI + Role: ROLE_TABLE_CELL
+ Interface: TableCell +
+ AX API[Note 1] + + AXRole: AXCell
+ AXSubrole: <nil>
+
+

group

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + group +
Computed Role +

group

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING +
UIA + Control Type: Group +
ATK/AT-SPI + Role: ROLE_PANEL +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXApplicationGroup
+
+

heading

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + heading +
Computed Role +

heading

+
MSAA + IAccessible2 + Role: IA2_ROLE_HEADING
+ Object Attribute: xml-roles:heading +
UIA + Control Type: Text
+ Localized Control Type: heading +
ATK/AT-SPI + Role: ROLE_HEADING +
+ AX API[Note 1] + + AXRole: AXHeading
+ AXSubrole: <nil>
+
+

image

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + image +
Computed Role +

image

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GRAPHIC
+ Interface: IAccessibleImage +
UIA + Control Type: Image +
ATK/AT-SPI + Role: ROLE_IMAGE
+ Interface: Image +
+ AX API[Note 1] + + AXRole: AXImage
+ AXSubrole: <nil>
+
+

img

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + img +
Computed Role +

image

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GRAPHIC
+ Interface: IAccessibleImage +
UIA + Control Type: Image +
ATK/AT-SPI + Role: ROLE_IMAGE
+ Interface: Image +
+ AX API[Note 1] + + AXRole: AXImage
+ AXSubrole: <nil>
+
+

insertion

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + insertion +
Computed Role +

insertion

+
MSAA + IAccessible2 + Role: IA2_ROLE_CONTENT_INSERTION +
UIA + Control Type: Text
+ Localized Control Type: insertion +
ATK/AT-SPI + Role: ROLE_CONTENT_INSERTION
+ Object Attribute: xml-roles:insertion +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXInsertStyleGroup
+ AXAttributedStringForTextMarkerRange: contains AXIsSuggestedInsertion = 1; for all text contained in a insertion +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + link +
Computed Role +

link

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_LINK
+ State: STATE_SYSTEM_LINKED
+ State: STATE_SYSTEM_LINKED on its descendants
+ Interface: IAccessibleHypertext +
UIA + Control Type: HyperLink
+ Control Pattern: Value +
ATK/AT-SPI + Role: ROLE_LINK
+ Interface: HyperlinkImpl +
+ AX API[Note 1] + + AXRole: AXLink
+ AXSubrole: <nil>
+
+

list

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + list +
Computed Role +

list

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_LIST
+ State: STATE_SYSTEM_READONLY +
UIA + Control Type: List +
ATK/AT-SPI + Role: ROLE_LIST +
+ AX API[Note 1] + + AXRole: AXList
+ AXSubrole: AXContentList
+
+

listbox without an accessibility parent of combobox

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + listbox +
Computed Role +

listbox

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_LIST
+ Method: IAccessible::accSelect()
+ Method: IAccessible::get_accSelection() +
UIA + Control Type: List
+ Control Pattern: Selection +
ATK/AT-SPI + Role: ROLE_LIST_BOX
+ Interface: Selection +

+ Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return + false for all Selection methods that provide a means to modify the selection. +

+
+ AX API[Note 1] + + AXRole: AXList
+ AXSubrole: <nil>
+
+

listbox with an accessibility parent of combobox

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + listbox +
Computed Role +

listbox

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_LIST
+ Method: IAccessible::accSelect()
+ Method: IAccessible::get_accSelection() +
UIA + Control Type: List
+ Control Pattern: Selection +
ATK/AT-SPI + Role: ROLE_MENU
+ Interface: Selection +

+ Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return + false for all Selection methods that provide a means to modify the selection. +

+
+ AX API[Note 1] + + AXRole: AXList
+ AXSubrole: <nil>
+
+

listitem

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + listitem +
Computed Role +

listitem

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_LISTITEM
+ State: STATE_SYSTEM_READONLY +
UIA + Control Type: ListItem
+ Control Pattern: SelectionItem
+ SelectionItem.SelectionContainer: the containing list +
ATK/AT-SPI + Role: ROLE_LIST_ITEM +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: <nil>
+
+

log

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + log +
Computed Role +

log

+
MSAA + IAccessible2 + Object Attribute: xml-roles:log
+ Object Attribute: container-live:polite
+ Object Attribute: live:polite
+ Object Attribute: container-live-role:log +
UIA + Control Type: Group
+ Localized Control Type: log
+ LiveSetting: Polite (1) +
ATK/AT-SPI + Role: ROLE_LOG
+ Object Attribute: xml-roles:log
+ Object Attribute: container-live:polite
+ Object Attribute: live:polite
+ Object Attribute: container-live-role:log +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXApplicationLog
+
+

main

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + main +
Computed Role +

main

+
MSAA + IAccessible2 + Role: IA2_ROLE_LANDMARK
+ Object Attribute: xml-roles:main +
UIA + Control Type: Group
+ Localized Control Type: main
+ Landmark Type: Main +
ATK/AT-SPI + Role: ROLE_LANDMARK
+ Object Attribute: xml-roles:main +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXLandmarkMain
+
+

mark

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + mark +
Computed Role +

mark

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Role: IA2_ROLE_MARK
+ Object Attribute: xml-roles:mark +
UIA + Control Type: Group +
ATK/AT-SPI + Role: ROLE_MARK
+ Object Attribute: xml-roles:mark +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXRoleDescription: highlight
+ AXAttributedStringForTextMarkerRange: contains AXHighlight = 1; for all text contained in a mark +
+

marquee

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + marquee +
Computed Role +

marquee

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_ANIMATION
+ Object Attribute: xml-roles:marquee
+ Object Attribute: container-live:off
+ Object Attribute: live:off +
UIA + Control Type: Group
+ Localized Control Type: marquee
+ LiveSetting: Off (0) +
ATK/AT-SPI + Role: ROLE_MARQUEE
+ Object Attribute: container-live:off
+ Object Attribute: live:off +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXApplicationMarquee
+
+

math

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + math +
Computed Role +

math

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_EQUATION +
UIA + Control Type: Group
+ Localized Control Type: math +
ATK/AT-SPI + Role: ROLE_MATH +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXDocumentMath
+
+

menu

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + menu +
Computed Role +

menu

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_MENUPOPUP
+ Method: IAccessible::accSelect()
+ Method: IAccessible::get_accSelection() +
UIA + Control Type: Menu +
ATK/AT-SPI + Role: ROLE_MENU
+ Interface: Selection +

+ Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return + false for all Selection methods that provide a means to modify the selection. +

+
+ AX API[Note 1] + + AXRole: AXMenu
+ AXSubrole: <nil>
+
+

menubar

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + menubar +
Computed Role +

menubar

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_MENUBAR
+ Method: IAccessible::accSelect()
+ Method: IAccessible::get_accSelection() +
UIA + Control Type: MenuBar +
ATK/AT-SPI + Role: ROLE_MENU_BAR
+ Interface: Selection +

+ Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return + false for all Selection methods that provide a means to modify the selection. +

+
+ AX API[Note 1] + + AXRole: AXMenuBar
+ AXSubrole: <nil>
+
+

menuitem

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + menuitem +
Computed Role +

menuitem

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_MENUITEM +
UIA + Control Type: MenuItem +
ATK/AT-SPI + Role: ROLE_MENU_ITEM +
+ AX API[Note 1] + + AXRole: AXMenuItem
+ AXSubrole: <nil>
+
+

menuitemcheckbox

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + menuitemcheckbox +
Computed Role +

menuitemcheckbox

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_CHECKBUTTON or ROLE_SYSTEM_MENUITEM
+ Role: IA2_ROLE_CHECK_MENU_ITEM
+ See also: aria-checked in the State and Property Mapping Tables +
UIA + Control Type: MenuItem
+ Control Pattern: Toggle
+ See also: aria-checked in the State and Property Mapping Tables +
ATK/AT-SPI + Role: ROLE_CHECK_MENU_ITEM
+ See also: aria-checked in the State and Property Mapping Tables +
+ AX API[Note 1] + + AXRole: AXMenuItem
+ AXSubrole: <nil>
+ See also: aria-checked in the State and Property Mapping Tables +
+

menuitemradio

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + menuitemradio +
Computed Role +

menuitemradio

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_RADIOBUTTON or ROLE_SYSTEM_MENUITEM
+ Role: IA2_ROLE_RADIO_MENU_ITEM
+ See also: aria-checked in the State and Property Mapping Tables +
UIA + Control Type: MenuItem
+ Control Pattern: Toggle
+ Control Pattern: SelectionItem
+ See also: aria-checked in the State and Property Mapping Tables +
ATK/AT-SPI + Role: ROLE_RADIO_MENU_ITEM
+ See also: aria-checked in the State and Property Mapping Tables +
+ AX API[Note 1] + + AXRole: AXMenuItem
+ AXSubrole: <nil>
+ See also: aria-checked in the State and Property Mapping Tables +
+

meter

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + meter +
Computed Role +

meter

+
MSAA + IAccessible2 + Role: IA2_ROLE_LEVEL_BAR
+ Interface: IAccessibleValue +
UIA + Control Type: ProgressBar
+ Localized Control Type: meter
+ Control Pattern: RangeValue +
ATK/AT-SPI + Role: ROLE_LEVEL_BAR
+ Interface: Value +
+ AX API[Note 1] + + AXRole: AXLevelIndicator
+ AXSubrole: AXMeter
+
+

navigation

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + navigation +
Computed Role +

navigation

+
MSAA + IAccessible2 + Role: IA2_ROLE_LANDMARK
+ Object Attribute: xml-roles:navigation +
UIA + Control Type: Group
+ Localized Control Type: navigation
+ Landmark Type: Navigation +
ATK/AT-SPI + Role: ROLE_LANDMARK
+ Object Attribute: xml-roles:navigation +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXLandmarkNavigation
+
+

none

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + none +
Computed Role +

none

+
MSAA + IAccessible2 +

+ For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the + accessibility tree, expose it as IA2_ROLE_TEXT_FRAME. [=user agents=] SHOULD prune empty descendants from the + accessibility tree. +

+
UIA +

+ For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the + accessibility tree, expose it using the text pattern. [=user agents=] SHOULD prune empty descendants from the + accessibility tree. +

+
ATK/AT-SPI +

+ For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the + accessibility tree, expose it as ROLE_SECTION. [=user agents=] SHOULD prune empty descendants from the + accessibility tree. +

+
+ AX API[Note 1] + +

+ For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the + accessibility tree, expose it as AXGroup. [=user agents=] SHOULD prune empty descendants from the accessibility tree. +

+
+

note

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + note +
Computed Role +

note

+
MSAA + IAccessible2 + Role: IA2_ROLE_NOTE +
UIA + Control Type: Group
+ Localized Control Type: note +
ATK/AT-SPI + Role: ROLE_COMMENT +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXDocumentNote
+
+

option not inside combobox

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + option not inside combobox +
Computed Role +

option

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_LISTITEM
+ See also: aria-checked in the State and Property Mapping Tables +
UIA + Control Type: ListItem
+ Control Pattern: Invoke
+ See also: aria-checked in the State and Property Mapping Tables +
ATK/AT-SPI + Role: ROLE_LIST_ITEM
+ See also: aria-checked in the State and Property Mapping Tables
+
+ AX API[Note 1] + + AXRole: AXStaticText
+ AXSubrole: <nil>
+ See also: aria-checked in the State and Property Mapping Tables +
+

option inside combobox

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + option inside combobox +
Computed Role +

option

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_LISTITEM
+ See also: aria-checked in the State and Property Mapping Tables +
UIA + Control Type: ListItem
+ Control Pattern: Invoke
+ See also: aria-checked in the State and Property Mapping Tables +
ATK/AT-SPI + Role: ROLE_MENU_ITEM
+ See also: aria-checked in the State and Property Mapping Tables
+
+ AX API[Note 1] + + AXRole: AXStaticText
+ AXSubrole: <nil>
+ See also: aria-checked in the State and Property Mapping Tables +
+

paragraph

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + paragraph +
Computed Role +

paragraph

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Role: IA2_ROLE_PARAGRAPH +
UIA + Control Type: Text +
ATK/AT-SPI + Role: ROLE_PARAGRAPH +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: <nil>
+
+

presentation

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + presentation +
Computed Role +

none

+
MSAA + IAccessible2 +

+ For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the + accessibility tree, expose it as IA2_ROLE_TEXT_FRAME. [=user agents=] SHOULD prune empty descendants from the + accessibility tree. +

+
UIA +

+ For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the + accessibility tree, expose it using the text pattern. [=user agents=] SHOULD prune empty descendants from the + accessibility tree. +

+
ATK/AT-SPI +

+ For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the + accessibility tree, expose it as ROLE_SECTION. [=user agents=] SHOULD prune empty descendants from the + accessibility tree. +

+
+ AX API[Note 1] + +

+ For objects that have specified allowed accessibility children (e.g., a grid with gridcell children, a list with listitem children), and the descendant is in the + accessibility tree, expose it as AXGroup. [=user agents=] SHOULD prune empty descendants from the accessibility tree. +

+
+

progressbar

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + progressbar +
Computed Role +

progressbar

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_PROGRESSBAR
+ State: STATE_SYSTEM_READONLY
+ Interface: IAccessibleValue +
UIA + Control Type: ProgressBar
+ Control Pattern: RangeValue if aria-valuenow, aria-valuemax, or aria-valuemin is present +
ATK/AT-SPI + Role: ROLE_PROGRESS_BAR
+ Interface: Value +

+ Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return + false for all Value methods that provide a means to modify the value. +

+
+ AX API[Note 1] + + AXRole: AXProgressIndicator
+ AXSubrole: <nil>
+
+

radio

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + radio +
Computed Role +

radio

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_RADIOBUTTON
+ See also: aria-checked in the State and Property Mapping Tables +
UIA + Control Type: RadioButton
+ Control Pattern: Toggle
+ Control Pattern: SelectionItem
+ See also: aria-checked in the State and Property Mapping Tables +
ATK/AT-SPI + Role: ROLE_RADIO_BUTTON
+ See also: aria-checked in the State and Property Mapping Tables +
+ AX API[Note 1] + + AXRole: AXRadioButton
+ AXSubrole: <nil>
+ See also: aria-checked in the State and Property Mapping Tables +
+

radiogroup

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + radiogroup +
Computed Role +

radiogroup

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING +
UIA + Control Type: List +
ATK/AT-SPI + Role: ROLE_PANEL +
+ AX API[Note 1] + + AXRole: AXRadioGroup
+ AXSubrole: <nil>
+
+

region with an accessible name

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + region with an accessible name +
Computed Role +

region

+
MSAA + IAccessible2 + Role: IA2_ROLE_LANDMARK
+ Object Attribute: xml-roles:region +
UIA + Control Type: Group
+ Localized Control Type: region
+ Landmark Type: Custom
+ Localized Landmark Type: region +
ATK/AT-SPI + Role: ROLE_LANDMARK
+ Object Attribute: xml-roles:region +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXLandmarkRegion
+
+

region without an accessible name

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + region without an accessible name +
Computed Role +

Use native host language role.

+
MSAA + IAccessible2 + Do not expose the element as a landmark. Use the native host language role of the element instead. +
UIA + Do not expose the element as a landmark. Use the native host language role of the element instead. +
ATK/AT-SPI + Do not expose the element as a landmark. Use the native host language role of the element instead. +
+ AX API[Note 1] + + Do not expose the element as a landmark. Use the native host language role of the element instead. +
+

row not inside treegrid

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + row not inside treegrid +
Computed Role +

row

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_ROW +
UIA + Control Type: DataItem
+ Localized Control Type: row
+ Control Pattern: SelectionItem +
ATK/AT-SPI + Role: ROLE_TABLE_ROW +
+ AX API[Note 1] + + AXRole: AXRow
+ AXSubrole: <nil>
+
+

row inside treegrid

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + row inside treegrid +
Computed Role +

row

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_OUTLINEITEM +
UIA + Control Type: DataItem
+ Localized Control Type: row
+ Control Pattern: SelectionItem +
ATK/AT-SPI + Role: ROLE_TABLE_ROW +
+ AX API[Note 1] + + AXRole: AXRow
+ AXSubrole: <nil>
+
+

rowgroup

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + rowgroup +
Computed Role +

rowgroup

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING +
UIA + Control Type: Group +
ATK/AT-SPI + Role: ROLE_PANEL +
+ AX API[Note 1] + + Not mapped +
+

rowheader

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + rowheader +
Computed Role +

rowheader

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_ROWHEADER
+ Interface: IAccessibleTableCell +
UIA + Control Type: HeaderItem +
ATK/AT-SPI + Role: ROLE_ROW_HEADER
+ Interface: TableCell +
+ AX API[Note 1] + + AXRole: AXCell
+ AXSubrole: <nil>
+
+

scrollbar

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + scrollbar +
Computed Role +

scrollbar

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_SCROLLBAR
+ Interface: IAccessibleValue +
UIA + Control Type: ScrollBar
+ Control Pattern: RangeValue +
ATK/AT-SPI + Role: ROLE_SCROLL_BAR
+ Interface: Value +

+ Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return + false for all Value methods that provide a means to modify the value. +

+
+ AX API[Note 1] + + AXRole: AXScrollBar
+ AXSubrole: <nil>
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + search +
Computed Role +

search

+
MSAA + IAccessible2 + Role: IA2_ROLE_LANDMARK
+ Object Attribute: xml-roles:search +
UIA + Control Type: Group
+ Localized Control Type: search
+ Landmark Type: Search +
ATK/AT-SPI + Role: ROLE_LANDMARK
+ Object Attribute: xml-roles:search +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXLandmarkSearch
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + searchbox +
Computed Role +

searchbox

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_TEXT
+ Object Attribute: text-input-type:search +
UIA + Control Type: Edit
+ Localized Control Type: search box +
ATK/AT-SPI + Role: ROLE_ENTRY
+ Object Attribute: xml-roles:searchbox
+ Object Attribute: text-input-type:search + +
+ Interface: EditableText if aria-readonly is not "true" +
+ AX API[Note 1] + + AXRole: AXTextField
+ AXSubrole: AXSearchField
+
+

sectionfooter

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + sectionfooter +
Computed Role +

sectionfooter

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Object Attribute: xml-roles:sectionfooter +
UIA + Control Type: Group
+ Localized Control Type: section footer +
ATK/AT-SPI + Role: ROLE_FOOTER
+
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXSectionFooter
+ AXRoleDescription: section footer +
+

sectionheader

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + sectionheader +
Computed Role +

sectionheader

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Object Attribute: xml-roles:sectionheader +
UIA + Control Type: Group
+ Localized Control Type: section header +
ATK/AT-SPI + Role: ROLE_HEADER +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXSectionHeader
+ AXRoleDescription: section header +
+

separator (non-focusable)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + separator (non-focusable) +
Computed Role +

seperator

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_SEPARATOR +
UIA + Control Type: Separator +
ATK/AT-SPI + Role: ROLE_SEPARATOR +
+ AX API[Note 1] + + AXRole: AXSplitter
+ AXSubrole: <nil>
+
+

separator (focusable)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + separator (focusable) +
Computed Role +

seperator

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_SEPARATOR
+ Interface: IAccessibleValue +
UIA + Control Type: Thumb
+ Control Pattern: RangeValue +
ATK/AT-SPI + Role: ROLE_SEPARATOR
+ Interface: Value +

+ Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return + false for all Value methods that provide a means to modify the value. +

+
+ AX API[Note 1] + + AXRole: AXSplitter
+ AXSubrole: <nil>
+
+

slider

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + slider +
Computed Role +

slider

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_SLIDER
+ Interface: IAccessibleValue +
UIA + Control Type: Slider
+ Control Pattern: RangeValue +
ATK/AT-SPI + Role: ROLE_SLIDER
+ Interface: Value +

+ Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return + false for all Value methods that provide a means to modify the value. +

+
+ AX API[Note 1] + + AXRole: AXSlider
+ AXSubrole: <nil>
+
+

spinbutton

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + spinbutton +
Computed Role +

spinbutton

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_SPINBUTTON
+ Interface: IAccessibleValue +
UIA + Control Type: Spinner
+ Control Pattern: RangeValue +
ATK/AT-SPI + Role: ROLE_SPIN_BUTTON
+ Interface: Value +

+ Because WAI-ARIA does not support modifying the value via the accessibility API, user agents MUST return + false for all Value methods that provide a means to modify the value. +

+
+ AX API[Note 1] + + AXRole: AXIncrementor
+ AXSubrole: <nil>
+
+

status

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + status +
Computed Role +

status

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_STATUSBAR
+ Object Attribute: container-live:polite
+ Object Attribute: live:polite
+ Object Attribute: container-live-role:status +
UIA + Control Type: Group
+ Localized Control Type: status
+ LiveSetting: Polite (1) +
ATK/AT-SPI + Role: ROLE_STATUSBAR
+ Object Attribute: container-live:polite
+ Object Attribute: live:polite
+ Object Attribute: container-live-role:status +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXApplicationStatus
+
+

strong

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + strong +
Computed Role +

strong

+
MSAA + IAccessible2 + Role: IA2_ROLE_TEXT_FRAME
+ Object Attribute: xml-roles:strong +
UIA + Control Type: Text
+ Localized Control Type: strong +
ATK/AT-SPI + Role: ROLE_STATIC
+ Object Attribute: xml-roles:strong +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXStrongStyleGroup
+
+

subscript

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + subscript +
Computed Role +

subscript

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Role: IA2_ROLE_TEXT_FRAME
+ Text Attribute: text-position:sub +
UIA + Control Type: Text
+ Styles used are exposed by IsSubscript attribute of the TextRange Control Pattern implemented on the accessible object. +
ATK/AT-SPI + Role: ROLE_SUBSCRIPT +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXSubscriptStyleGroup
+
+

suggestion

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + suggestion +
Computed Role +

suggestion

+
MSAA + IAccessible2 + Role: IA2_ROLE_SUGGESTION
+ Object Attribute: xml-roles:suggestion +
UIA + Control Type: Group
+ Localized Control Type: suggestion
+
ATK/AT-SPI + Role: ROLE_SUGGESTION
+ Object Attribute: xml-roles:suggestion +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXAttributedStringForTextMarkerRange: contains AXIsSuggestion = 1; for all text contained in a suggestion +
+

superscript

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + superscript +
Computed Role +

superscript

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Role: IA2_ROLE_TEXT_FRAME
+ Text Attribute: text-position:super +
UIA + Control Type: Text
+ Styles used are exposed by IsSuperscript attribute of the TextRange Control Pattern implemented on the accessible object. +
ATK/AT-SPI + Role: ROLE_SUPERSCRIPT +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXSuperscriptStyleGroup
+
+

switch

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + switch +
Computed Role +

switch

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_CHECKBUTTON
+ Role: IA2_ROLE_TOGGLE_BUTTON
+ Object Attribute: xml-roles:switch
+ See also: aria-checked in the State and Property Mapping Tables +
UIA + Control Type: Button
+ Localized Control Type: toggleswitch
+ Control Pattern: Toggle
+ See also: aria-checked in the State and Property Mapping Tables +
ATK/AT-SPI + Role: ROLE_TOGGLE_BUTTON
+ Object Attribute: xml-roles:switch
+ See also: aria-checked in the State and Property Mapping Tables +
+ AX API[Note 1] + + AXRole: AXCheckBox
+ AXSubrole: AXSwitch
+ See also: aria-checked in the State and Property Mapping Tables +
+

tab

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + tab +
Computed Role +

tab

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_PAGETAB
+ State: STATE_SYSTEM_SELECTED if focus is inside tabpanel associated with + aria-labelledby +
UIA + Control Type: TabItem +
ATK/AT-SPI + Role: ROLE_PAGE_TAB
+ State: STATE_SELECTED if focus is inside tabpanel associated with + aria-labelledby +
+ AX API[Note 1] + + AXRole: AXRadioButton
+ AXSubrole: AXTabButton
+
+

table

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + table +
Computed Role +

table

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_TABLE
+ Object Attribute: xml-roles:table
+ Interface: IAccessibleTable2 +
UIA + Control Type: Table
+ Control Pattern: Grid
+ Control Pattern: Table +
ATK/AT-SPI + Role: ROLE_TABLE
+ Object Attribute: xml-roles:table
+ Interface: Table +
+ AX API[Note 1] + + AXRole: AXTable
+ AXSubrole: <nil>
+ AXColumnHeaderUIElements: a list of pointers to the columnheader elements
+ AXHeader: a pointer to the row or group containing those columnheader elements
+ AXRowHeaderUIElements: a list of pointers to the rowheader elements +
+

tablist

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + tablist +
Computed Role +

tablist

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_PAGETABLIST
+ Method: IAccessible::accSelect()
+ Method: IAccessible::get_accSelection() +
UIA + Control Type: Tab
+ Control Pattern: Selection +
ATK/AT-SPI + Role: ROLE_PAGE_TAB_LIST
+ Interface: Selection +

+ Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return + false for all Selection methods that provide a means to modify the selection. +

+
+ AX API[Note 1] + + AXRole: AXTabGroup
+ AXSubrole: <nil>
+
+

tabpanel

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + tabpanel +
Computed Role +

tabpanel

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_PANE or ROLE_SYSTEM_PROPERTYPAGE +
UIA + Control Type: Pane +
ATK/AT-SPI + Role: ROLE_SCROLL_PANE +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXTabPanel
+
+

term

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + term +
Computed Role +

term

+
MSAA + IAccessible2 + Role: IA2_ROLE_TEXT_FRAME
+ Object Attribute: xml-roles:term +
UIA + Control Type: Text
+ Localized Control Type: term +
ATK/AT-SPI + Role: ROLE_DESCRIPTION_TERM +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXTerm
+
+

textbox when aria-multiline is false

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + textbox when aria-multiline is false +
Computed Role +

textbox

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_TEXT
+ State: IA2_STATE_SINGLE_LINE +
UIA + Control Type: Edit +
ATK/AT-SPI + Role: ROLE_ENTRY
+ State: STATE_SINGLE_LINE
+ Interface: EditableText if aria-readonly is not "true" +
+ AX API[Note 1] + + AXRole: AXTextField
+ AXSubrole: <nil>
+
+

textbox when aria-multiline is true

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + textbox when aria-multiline is true +
Computed Role +

textbox

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_TEXT
+ State: IA2_STATE_MULTI_LINE +
UIA + Control Type: Edit +
ATK/AT-SPI + Role: ROLE_ENTRY
+ State: STATE_MULTI_LINE
+ Interface: EditableText if aria-readonly is not "true" +
+ AX API[Note 1] + + AXRole: AXTextArea
+ AXSubrole: <nil>
+
+

time

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + time +
Computed Role +

time

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_GROUPING
+ Object Attribute: xml-roles:time +
UIA + Control Type: Text
+ Localized Control Type: time
+ Note: create a separate UIA Control of type Text. This is different from most UIA text mappings, which only create ranges in the page text pattern. +
ATK/AT-SPI + Role: ROLE_STATIC
+ Object Attribute: xml-roles:time +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXTimeGroup
+
+

timer

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + timer +
Computed Role +

timer

+
MSAA + IAccessible2 + Object Attribute: xml-roles:timer
+ Object Attribute: container-live:off
+ Object Attribute: live:off
+ Object Attribute: container-live-role:timer +
UIA + Control Type: Group
+ Localized Control Type: timer
+ LiveSetting: Off (0) +
ATK/AT-SPI + Role: ROLE_TIMER
+ Object Attribute: container-live:off
+ Object Attribute: live:off
+ Object Attribute: container-live-role:timer +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXApplicationTimer
+
+

toolbar

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + toolbar +
Computed Role +

toolbar

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_TOOLBAR +
UIA + Control Type: ToolBar +
ATK/AT-SPI + Role: ROLE_TOOL_BAR +
+ AX API[Note 1] + + AXRole: AXToolbar
+ AXSubrole: <nil>
+
+

tooltip

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + tooltip +
Computed Role +

tooltip

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_TOOLTIP +
UIA + Control Type: ToolTip +
ATK/AT-SPI + Role: ROLE_TOOL_TIP +
+ AX API[Note 1] + + AXRole: AXGroup
+ AXSubrole: AXUserInterfaceTooltip
+
+

tree

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + tree +
Computed Role +

tree

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_OUTLINE
+ Method: IAccessible::accSelect()
+ Method: IAccessible::get_accSelection() +
UIA + Control Type: Tree +
ATK/AT-SPI + Role: ROLE_TREE
+ Interface: Selection +

+ Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return + false for all Selection methods that provide a means to modify the selection. +

+
+ AX API[Note 1] + + AXRole: AXOutline
+ AXSubrole: <nil>
+
+

treegrid

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + treegrid +
Computed Role +

treegrid

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_OUTLINE
+ Interface: IAccessibleTable2
+ Method: IAccessible::accSelect()
+ Method: IAccessible::get_accSelection() +
UIA + Control Type: DataGrid +
ATK/AT-SPI + Role: ROLE_TREE_TABLE
+ Interface: Table
+ Interface: Selection +

+ Because WAI-ARIA does not support modifying the selection via the accessibility API, user agents MUST return + false for all Selection methods that provide a means to modify the selection. +

+
+ AX API[Note 1] + + AXRole: AXTable
+ AXSubrole: <nil>
+
+

treeitem

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + treeitem +
Computed Role +

treeitem

+
MSAA + IAccessible2 + Role: ROLE_SYSTEM_OUTLINEITEM
+ See also: aria-checked in the State and Property Mapping Tables +
UIA + Control Type: TreeItem
+ See also: aria-checked in the State and Property Mapping Tables +
ATK/AT-SPI + Role: ROLE_TREE_ITEM
+ See also: aria-checked in the State and Property Mapping Tables +
+ AX API[Note 1] + + AXRole: AXRow
+ AXSubrole: AXOutlineRow
+ See also: aria-checked in the State and Property Mapping Tables +
+
+

+ [Note 1] + User agent should return a user-presentable, localized string value for the AXRoleDescription. +

+
+
+

+ [Note 2] This specification does not currently contain guidance for when user agents should fire system alert events. Some guidance may be added to the specification at a + later date but it will be a recommendation (SHOULD), not a requirement (MUST). +

+
+
+
+ +
+

State and Property Mapping

+

This section describes how to expose WAI-ARIA states and [=ARIA/properties=].

+
+

General rules

+
    +
  1. + [=User agents=] MUST compute managed states VISIBLE/INVISIBLE, SHOWING/OFFSCREEN, etc. This typically is done + in the same way as for ordinary elements that do not have WAI-ARIA attributes present. The + FOCUSABLE/FOCUSED states may be affected by aria-activedescendant. +
  2. +
  3. + User agents MUST continue to expose native semantics in addition to WAI-ARIA state and property semantics except where an + explicit WAI-ARIA override is allowed by the host language. For example, an HTML checkbox may have an + aria-labelledby attribute but the native HTML semantics must still + be exposed. +
  4. +
  5. User agents MUST expose additional states for certain roles as defined in the Role Mapping Tables.
  6. +
  7. + User agents MUST compute states for the relevant WAI-ARIA attributes and map to the + accessibility API as specified in the State and Property Mapping Tables. To determine the relevant + WAI-ARIA attributes, refer to the + Definition of Roles [[!WAI-ARIA-1.2]]]. Where the author has not provided values for required attributes, user agents SHOULD + process as if the default value was provided. +
  8. +
  9. + Some WAI-ARIA properties are not global, and are only supported on certain roles. If a non-global + WAI-ARIA state or property is used where it is not supported, user agents SHOULD NOT map the given + WAI-ARIA property to the platform accessibility API. For example, if + aria-checked="true" is specified on <div role="grid">, it should not be exposed in + MSAA implementations as STATE_SYSTEM_CHECKED. +
  10. +
  11. + When an explicit or inherited role of none or presentation is applied to an element, the user agent MUST implement the rules for the + none or the presentation role defined in + Accessible Rich Internet Applications (WAI-ARIA) 1.2 [[!WAI-ARIA-1.2]]]. +
  12. +
+
+
+

State and Property Mapping Tables

+
+

Not Mapped

+

+ There are a number of occurrences in the table where a given state or property is declared "Not mapped". In some cases, this occurs for the default value of the state/property, and is + equivalent to its absence. User agents might find it quicker to map the value than check to see if it is the default. For computational efficiency, user agents MAY expose the state or + property value if doing so is equivalent to not mapping it. These cases are marked with an asterisk. +

+

+ In other cases, it is mandatory that the state/property not be mapped, since exposing it implies a related affordance. An example is + aria-grabbed. Its absence not only indicates that the accessible object is not grabbed, but further defines it as not grab-able. These cases are marked as "Not mapped" without an asterisk. +

+
+

aria-activedescendant

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-activedescendant +
MSAA + IAccessible2See Focus Changes.
UIASee Focus Changes.
ATK/AT-SPISee Focus Changes.
AX API + See Focus Changes.
+ Property: AXSelectedRows: pointer to active descendant node +
+

aria-atomic=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-atomic=true +
MSAA + IAccessible2 + Object Attribute: atomic:true
+ Object Attribute: container-atomic:true
+ Object Attribute: container-atomic:true on all descendants
+ Relation: IA2_RELATION_MEMBER_OF pointing to this element (the atomic root)
+ See also: Changes to document content or node visibility +
UIA + Property: AriaProperties.atomic: true
+ See also: Changes to document content or node visibility +
ATK/AT-SPI + Object Attribute: atomic:true
+ Object Attribute: container-atomic:true
+ Object Attribute: container-atomic:true on all descendants
+ Relation: RELATION_MEMBER_OF pointing to this element (the atomic root)
+ See also: Changes to document content or node visibility +
AX API + Property: AXARIAAtomic: YES
+ See also: Changes to document content or node visibility +
+

aria-atomic=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-atomic=false +
MSAA + IAccessible2 + Not mapped*, but if mapped:
+ Object Attribute: atomic:false
+ Object Attribute: container-atomic:false
+ Object Attribute: container-atomic:false on all descendants
+ Relation: IA2_RELATION_MEMBER_OF pointing to this element (the atomic root)
+ See also: Changes to document content or node visibility +
UIA + Property: AriaProperties.atomic: false
+ See also: Changes to document content or node visibility +
ATK/AT-SPI + Not mapped*, but if mapped:
+ Object Attribute: atomic:false
+ Object Attribute: container-atomic:false
+ Object Attribute: container-atomic:false on all descendants
+ Relation: RELATION_MEMBER_OF pointing to this element (the atomic root)
+ See also: Changes to document content or node visibility +
AX API + Property: AXARIAAtomic: NO
+ See also: Changes to document content or node visibility +
+

aria-autocomplete=inline, list, or both

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-autocomplete=inline, list, or both +
MSAA + IAccessible2 + Object Attribute: autocomplete:<value>
+ State: IA2_STATE_SUPPORTS_AUTOCOMPLETION +
UIA + Not mapped +
ATK/AT-SPI + Object Attribute: autocomplete:<value>
+ State: STATE_SUPPORTS_AUTOCOMPLETION +
AX API + Not mapped +
+

aria-autocomplete=none

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-autocomplete=none +
MSAA + IAccessible2 + Not mapped* +
UIA + Not mapped* +
ATK/AT-SPI + Not mapped* +
AX API + Not mapped* +
+

aria-braillelabel

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-braillelabel +
MSAA + IAccessible2 + Object Attribute: braillelabel:<value> +
UIA + Property: AriaProperties.braillelabel: <value> +
ATK/AT-SPI + Object Attribute: braillelabel:<value> +
AX API + Property: AXBrailleLabel +
+

aria-brailleroledescription

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-brailleroledescription +
MSAA + IAccessible2 + Object Attribute: brailleroledescription:<value> +
UIA + Property: AriaProperties.brailleroledescription: <value> +
ATK/AT-SPI + Object Attribute: brailleroledescription:<value> +
AX API + Property: AXBrailleRoleDescription +
+

aria-brailleroledescription is undefined or the empty string

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-brailleroledescription is undefined or the empty string +
MSAA + IAccessible2 + Not mapped +
UIA + Not mapped +
ATK/AT-SPI + Not mapped +
AX API + Not mapped +
+

aria-busy=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-busy=true +
MSAA + IAccessible2 + State: STATE_SYSTEM_BUSY +
UIA + Property: AriaProperties.busy: true +
ATK/AT-SPI + State: STATE_BUSY +
AX API + Property: AXElementBusy: YES +
+

aria-busy=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-busy=false +
MSAA + IAccessible2 + State: STATE_SYSTEM_BUSY not exposed +
UIA + Property: AriaProperties.busy: false +
ATK/AT-SPI + State: STATE_BUSY not exposed +
AX API + Property: AXElementBusy: NO +
+

aria-checked=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-checked=true +
MSAA + IAccessible2 + State: STATE_SYSTEM_CHECKED
+ Object Attribute: checkable:true +
UIA + Property: Toggle.ToggleState: On (1)
+ Property: SelectionItem.IsSelected: True for radio and menuitemradio +
ATK/AT-SPI + State: STATE_CHECKABLE
+ State: STATE_CHECKED +
AX API + Property: AXValue: 1
+ Property: AXMenuItemMarkChar: for menuitemcheckbox and menuitemradio +
+

aria-checked=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-checked=false +
MSAA + IAccessible2 + State: STATE_SYSTEM_CHECKED not exposed
+ Object Attribute: checkable:true +
UIA + Property: Toggle.ToggleState: Off (0)
+ Property: SelectionItem.IsSelected: False for radio and menuitemradio +
ATK/AT-SPI + State: STATE_CHECKABLE
+ State: STATE_CHECKED not exposed +
AX API + Property: AXValue: 0
+ Property: AXMenuItemMarkChar: <nil> for menuitemcheckbox and menuitemradio +
+

aria-checked=mixed

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-checked=mixed +
MSAA + IAccessible2 + State: STATE_SYSTEM_MIXED
+ Object Attribute: checkable:true +
UIA + Property: Toggle.ToggleState: Indeterminate (2) +
ATK/AT-SPI + State: STATE_INDETERMINATE
+ State: STATE_CHECKABLE
+ State: STATE_CHECKED not exposed +
AX API + Property: AXValue: 2
+ Property: AXMenuItemMarkChar: <nil> for menuitemcheckbox and menuitemradio +
+

aria-checked is undefined

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-checked is undefined +
MSAA + IAccessible2 + Not mapped +
UIA + Not mapped +
ATK/AT-SPI + Not mapped +
AX API + Not mapped +
+

aria-colcount

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-colcount +
MSAA + IAccessible2 + Object Attribute: colcount:<value>
+ Method: IAccessible2::groupPosition(): similarItemsInGroup=<value> on cells and headers +
UIA + Property: Grid.ColumnCount: <value> +
ATK/AT-SPI + Object Attribute: colcount should contain the author-provided value.
+ Method: atk_table_get_n_columns() should return the actual number of columns. +
AX API + Property: AXARIAColumnCount: <value> +
+

aria-colindex

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-colindex +
MSAA + IAccessible2 + Object Attribute: colindex:<value>
+ Method: IAccessible2::groupPosition(): positionInGroup=<value> on cells and headers +
UIA + Property: GridItem.Column: <value> (zero-based) +
ATK/AT-SPI + Object Attribute: colindex should contain the author-provided value.
+ Method: atk_table_cell_get_position() should return the actual (zero-based) column index. +
AX API + Property: AXARIAColumnIndex: <value> +
+

aria-colindextext

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-colindextext +
MSAA + IAccessible2 + Object Attribute: colindextext:<value> +
UIA + Property: AriaProperties.colindextext: <value> +
ATK/AT-SPI + Object Attribute: colindextext:<value> +
AX API + Property: AXColumnIndexDescription: <value> +
+

aria-colspan

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-colspan +
MSAA + IAccessible2 + Object Attribute: colspan:<value>
+ Method: IAccessibleTableCell::columnExtent(): <value> +
UIA + Property: GridItem.ColumnSpan: <value> +
ATK/AT-SPI + Object Attribute: colspan should contain the author-provided value.
+ Method: atk_table_cell_get_row_column_span() should return the actual column span. +
AX API + Property: AXColumnIndexRange.length: <value> +
+

aria-controls

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-controls +
MSAA + IAccessible2 + Relation: IA2_RELATION_CONTROLLER_FOR points to accessible nodes matching IDREFs
+ Reverse Relation: IA2_RELATION_CONTROLLED_BY points to element
+ See also: Mapping Additional Relations +
UIA + Property: ControllerFor: pointers to accessible nodes matching IDREFs +
ATK/AT-SPI + Relation: RELATION_CONTROLLER_FOR points to accessible nodes matching IDREFs
+ Reverse Relation: RELATION_CONTROLLED_BY points to element
+ See also: Mapping Additional Relations +
AX API + Property: AXLinkedUIElements: pointers to accessible nodes matching IDREFs +
+

aria-current with non-false allowed value

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-current with non-false allowed value +
MSAA + IAccessible2 + Object Attribute: current:<value> +
UIA + Property: AriaProperties.current: <value> +
ATK/AT-SPI + Object Attribute: current:<value>
+ State: STATE_ACTIVE +
AX API + Property: AXARIACurrent: <value> +
+

aria-current with unrecognized value

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-current with unrecognized value +
MSAA + IAccessible2 + Object Attribute: current:true +
UIA + Property: AriaProperties.current: true +
ATK/AT-SPI + Object Attribute: current:true
+ State: STATE_ACTIVE +
AX API + Property: AXARIACurrent: true +
+

aria-current is false or undefined

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-current is false or undefined +
MSAA + IAccessible2 + Not mapped* +
UIA + Not mapped* +
ATK/AT-SPI + Not mapped* +
AX API + Not mapped* +
+

aria-describedby

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-describedby +
MSAA + IAccessible2 + Property: accDescription: <value>
+ Relation: IA2_RELATION_DESCRIBED_BY points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ Reverse Relation: IA2_RELATION_DESCRIPTION_FOR points to element
+ See also: Name Computation and Mapping Additional Relations +
UIA + Property: FullDescription: <value>
+ See also: Name Computation +
ATK/AT-SPI + Property: Description: <value>
+ Relation: RELATION_DESCRIBED_BY points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ Reverse Relation: RELATION_DESCRIPTION_FOR points to element
+ See also: Name Computation and Mapping Additional Relations +
AX API + In the accessibilityCustomContent API, expose as an AXCustomContent object with { label: "description" } and `value` set to the description + string.
+ - See also: Name Computation +
+

aria-description

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-description +
MSAA + IAccessible2 + Property: accDescription: <value>
+ See also: Name Computation +
UIA + Property: FullDescription: <value>
+ See also: Name Computation +
ATK/AT-SPI + Property: Description: <value>
+ See also: Name Computation +
AX API + In the accessibilityCustomContent API, expose as an AXCustomContent object with { label: "description" } and `value` set to the description + string.
+ See also: Name Computation +
+

aria-details

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-details +
MSAA + IAccessible2 + Relation: IA2_RELATION_DETAILS points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ Reverse Relation: IA2_RELATION_DETAILS_FOR points to element
+ See also: Mapping Additional Relations +
UIA + Property: DescribedBy: points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree +
ATK/AT-SPI + Relation: RELATION_DETAILS points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ Reverse Relation: RELATION_DETAILS_FOR points to element
+ See also: Mapping Additional Relations +
AX API + Not mapped* +
+

aria-disabled=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-disabled=true +
MSAA + IAccessible2 + State: STATE_SYSTEM_UNAVAILABLE
+ State: STATE_SYSTEM_UNAVAILABLE on all descendants with STATE_SYSTEM_FOCUSABLE +
UIA + Property: IsEnabled: false +
ATK/AT-SPI + State: STATE_ENABLED not exposed +
AX API + Property: AXEnabled: NO +
+

aria-disabled=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-disabled=false +
MSAA + IAccessible2 + State: STATE_SYSTEM_UNAVAILABLE not exposed +
UIA + Property: IsEnabled: true +
ATK/AT-SPI + State: STATE_ENABLED +
AX API + Property: AXEnabled: YES +
+

aria-dropeffect=copy, move, link, execute, or popup

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-dropeffect=copy, move, link, execute, or popup +
MSAA + IAccessible2 + Object Attribute: dropeffect:<value> +
UIA + Property: AriaProperties.dropeffect: <value> +
ATK/AT-SPI + Object Attribute: dropeffect:<value> +
AX API + array AXDropEffects +
+

aria-dropeffect=none

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-dropeffect=none +
MSAA + IAccessible2 + Object Attribute: dropeffect:none if there are no other valid tokens
+ Not mapped* if not specified by the author +
UIA + Not mapped* +
ATK/AT-SPI + Object Attribute: dropeffect:none if there are no other valid tokens
+ Not mapped* if not specified by the author +
AX API + Not mapped* +
+

aria-errormessage

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-errormessage +
MSAA + IAccessible2 + Relation: IA2_RELATION_ERROR points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ Reverse Relation: IA2_RELATION_ERROR_FOR points to element
+ See also: Mapping Additional Relations +
UIA + Property: ControllerFor: pointer to the target accessible object +
ATK/AT-SPI + Relation: RELATION_ERROR_MESSAGE points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ Reverse Relation: RELATION_ERROR_FOR points to element
+ See also: Mapping Additional Relations +
AX API + Property: AXErrorMessageElements: pointers to accessible nodes matching IDREFs +
+

aria-expanded=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-expanded=true +
MSAA + IAccessible2 + State: STATE_SYSTEM_EXPANDED +
UIA + Property: ExpandCollapse.ExpandCollapseState: Expanded +
ATK/AT-SPI + State: STATE_EXPANDABLE
+ State: STATE_EXPANDED +
AX API + Property: AXExpanded: YES +
+

aria-expanded=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-expanded=false +
MSAA + IAccessible2 + State: STATE_SYSTEM_COLLAPSED +
UIA + Property: ExpandCollapse.ExpandCollapseState: Collapsed +
ATK/AT-SPI + State: STATE_EXPANDABLE
+ State: STATE_EXPANDED not exposed +
AX API + Property: AXExpanded: NO +
+

aria-expanded is undefined

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-expanded is undefined +
MSAA + IAccessible2 + Not mapped +
UIA + Not mapped +
ATK/AT-SPI + Not mapped +
AX API + Not mapped +
+

aria-flowto

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-flowto +
MSAA + IAccessible2 + Relation: IA2_RELATION_FLOW_TO points to accessible nodes matching IDREFs
+ Reverse Relation: IA2_RELATION_FLOW_FROM points to element
+ See also: Mapping Additional Relations +
UIA + Property: FlowsTo: pointers to accessible nodes matching IDREFs +
ATK/AT-SPI + Relation: RELATION_FLOWS_TO points to accessible nodes matching IDREFs
+ Reverse Relation: RELATION_FLOWS_FROM points to element
+ See also: Mapping Additional Relations +
AX API + Property: AXLinkedUIElements: pointers to accessible nodes matching IDREFs +
+

aria-grabbed=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-grabbed=true +
MSAA + IAccessible2 + Object Attribute: grabbed:true +
UIA + Property: AriaProperties.grabbed: true +
ATK/AT-SPI + Object Attribute: grabbed:true +
AX API + Property: AXGrabbed: YES +
+

aria-grabbed=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-grabbed=false +
MSAA + IAccessible2 + Object Attribute: grabbed:false +
UIA + Property: AriaProperties.grabbed: false +
ATK/AT-SPI + Object Attribute: grabbed:false +
AX API + Property: AXGrabbed: NO +
+

aria-grabbed is undefined

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-grabbed is undefined +
MSAA + IAccessible2 + Not mapped +
UIA + Not mapped +
ATK/AT-SPI + Not mapped +
AX API + Not mapped +
+

aria-haspopup=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-haspopup=true +
MSAA + IAccessible2 + State: STATE_SYSTEM_HASPOPUP
+ Object Attribute: haspopup:menu +
UIA + Control Pattern: ExpandCollapse + See also: aria-expanded +
ATK/AT-SPI + State: STATE_HAS_POPUP
+ Object Attribute: haspopup:menu +
AX API + Property: AXPopupValue:menu
+ Action: AXShowMenu +
+

aria-haspopup=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-haspopup=false +
MSAA + IAccessible2 + State: STATE_SYSTEM_HASPOPUP not exposed
+ Object Attribute: haspopup:false +
UIA + Not mapped* +
ATK/AT-SPI + Not mapped* +
AX API + Not mapped* +
+

aria-haspopup=dialog

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-haspopup=dialog +
MSAA + IAccessible2 + State: STATE_SYSTEM_HASPOPUP
+ Object Attribute: haspopup:dialog +
UIA + Control Pattern: ExpandCollapse
+ See also: aria-expanded +
ATK/AT-SPI + State: STATE_HAS_POPUP
+ Object Attribute: haspopup:dialog +
AX API + Property: AXPopupValue:dialog
+ Action: AXShowMenu +
+

aria-haspopup=grid

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-haspopup=grid +
MSAA + IAccessible2 + State: STATE_SYSTEM_HASPOPUP
+ Object Attribute: haspopup:grid +
UIA + Control Pattern: ExpandCollapse
+ See also: aria-expanded +
ATK/AT-SPI + State: STATE_HAS_POPUP
+ Object Attribute: haspopup:grid +
AX API + Property: AXPopupValue:grid
+ Action: AXShowMenu +
+

aria-haspopup=listbox

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-haspopup=listbox +
MSAA + IAccessible2 + State: STATE_SYSTEM_HASPOPUP
+ Object Attribute: haspopup:listbox +
UIA + Control Pattern: ExpandCollapse
+ See also: aria-expanded +
ATK/AT-SPI + State: STATE_HAS_POPUP
+ Object Attribute: haspopup:listbox +
AX API + Property: AXPopupValue:listbox
+ Action: AXShowMenu +
+

aria-haspopup=menu

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-haspopup=menu +
MSAA + IAccessible2 + State: STATE_SYSTEM_HASPOPUP
+ Object Attribute: haspopup:menu +
UIA + Control Pattern: ExpandCollapse
+ See also: aria-expanded +
ATK/AT-SPI + State: STATE_HAS_POPUP
+ Object Attribute: haspopup:menu +
AX API + Property: AXPopupValue:menu
+ Action: AXShowMenu +
+

aria-haspopup=tree

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-haspopup=tree +
MSAA + IAccessible2 + State: STATE_SYSTEM_HASPOPUP
+ Object Attribute: haspopup:tree +
UIA + Control Pattern: ExpandCollapse
+ See also: aria-expanded +
ATK/AT-SPI + State: STATE_HAS_POPUP
+ Object Attribute: haspopup:tree +
AX API + Property: AXPopupValue:tree
+ Action: AXShowMenu +
+

aria-hidden=true on unfocused element

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-hidden=true on unfocused element +
MSAA + IAccessible2 + Element SHOULD NOT be exposed
+ See also: Including Elements in the Accessibility Tree in the WAI-ARIA specification +
UIA + Element SHOULD NOT be exposed
+ See also: Including Elements in the Accessibility Tree in the WAI-ARIA specification +
ATK/AT-SPI + Element SHOULD NOT be exposed
+ See also: Including Elements in the Accessibility Tree in the WAI-ARIA specification +
AX API + Element SHOULD NOT be exposed
+ See also: Including Elements in the Accessibility Tree in the WAI-ARIA specification +
+

aria-hidden=true when element is focused or fires an accessibility event

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-hidden=true when element is focused or fires an accessibility event +
MSAA + IAccessible2 + Object Attribute: hidden:true
+ See also: Including Elements in the Accessibility Tree in the WAI-ARIA specification +
UIA + Property: AriaProperties.hidden: true
+ See also: Including Elements in the Accessibility Tree in the WAI-ARIA specification +
ATK/AT-SPI + Object Attribute: hidden:true
+ See also: Including Elements in the Accessibility Tree in the WAI-ARIA specification +
AX API + Not mapped
+ See also: Including Elements in the Accessibility Tree in the WAI-ARIA specification +
+

aria-hidden=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-hidden=false +
MSAA + IAccessible2 + Not mapped +
UIA + Not mapped +
ATK/AT-SPI + Not mapped +
AX API + Not mapped +
+

aria-invalid=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-invalid=true +
MSAA + IAccessible2 + State: IA2_STATE_INVALID_ENTRY
+ Text Attribute: invalid:true +
UIA + Property: IsDataValidForForm: false +
ATK/AT-SPI + State: STATE_INVALID_ENTRY
+ Text Attribute: invalid:true +
AX API + Property: AXInvalid: true +
+

aria-invalid=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-invalid=false +
MSAA + IAccessible2 + State: IA2_STATE_INVALID_ENTRY not exposed +
UIA + Property: IsDataValidForForm: true +
ATK/AT-SPI + State: STATE_INVALID_ENTRY not exposed +
AX API + Property: AXInvalid: false +
+

aria-invalid=spelling or grammar

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-invalid=spelling or grammar +
MSAA + IAccessible2 + State: IA2_STATE_INVALID_ENTRY
+ Text Attribute: invalid:<value> +
UIA + Property: IsDataValidForForm: <value> +
ATK/AT-SPI + State: STATE_INVALID_ENTRY
+ Text Attribute: invalid:<value> +
AX API + Property: AXInvalid: <value> +
+

aria-invalid with unrecognized value

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-invalid with unrecognized value +
MSAA + IAccessible2 + State: IA2_STATE_INVALID_ENTRY
+ Text Attribute: invalid:true +
UIA + Property: IsDataValidForForm: false +
ATK/AT-SPI + State: STATE_INVALID_ENTRY
+ Text Attribute: invalid:true +
AX API + Property: AXInvalid: true +
+

aria-keyshortcuts

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-keyshortcuts +
MSAA + IAccessible2 + Property: accKeyboardShortcut: <value> +
UIA + Property: AcceleratorKey: <value> +
ATK/AT-SPI + Object Attribute: keyshortcuts:<value> +
AX API + Property: AXKeyShortcutsValue: <value> +
+

aria-label

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-label +
MSAA + IAccessible2 + Property: accName: <value>
+ See also: Name Computation +
UIA + Property: Name: <value>
+ See also: Name Computation +
ATK/AT-SPI + Property: Name: <value>
+ See also: Name Computation +
AX API + Property: AXDescription: <value>
+ See also: Name Computation +
+

aria-labelledby

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-labelledby +
MSAA + IAccessible2 + Property: accName: <value>
+ Relation: IA2_RELATION_LABELLED_BY points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ Reverse Relation: IA2_RELATION_LABEL_FOR points to element
+ See also: Name Computation and Mapping Additional Relations +
UIA + Property: Name: <value>
+ Property: LabeledBy: points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ See also: Name Computation +
ATK/AT-SPI + Property: Name: <value>
+ Relation: RELATION_LABELLED_BY points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ Reverse Relation: RELATION_LABEL_FOR points to element
+ See also: Name Computation and Mapping Additional Relations +
AX API + Property: AXDescription: <value> if the value is not exposed visually
+ Property: AXTitle: <value> if the value is exposed visually
+ Property: AXTitleUIElement points to accessible node matching IDREF, if there is a single referenced element that is in the accessibility tree
+ See also: Name Computation +
+

aria-level on non-heading

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-level on non-heading +
MSAA + IAccessible2 + Object Attribute: level:<value>
+ Method: IAccessible2::groupPosition(): groupLevel=<value> on roles that support aria-posinset and aria-setsize
+ See also: groupPosition() +
UIA + Property: AriaProperties.level: <value> +
ATK/AT-SPI + Object Attribute: level:<value> +
AX API + Property: AXDisclosureLevel: <value> (zero-based), when used on an outline row (like a + treeitem or group) +
+

aria-level on heading

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-level on heading +
MSAA + IAccessible2 + Object Attribute: level:<value> +
UIA + Property: AriaProperties.level: <value>
+ Property: StyleId_Heading: <value> +
ATK/AT-SPI + Object Attribute: level:<value> +
AX API + Property: AXValue: <value> +
+

aria-live=assertive

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-live=assertive +
MSAA + IAccessible2 + Object Attribute: live:assertive
+ Object Attribute: container-live:assertive
+ Object Attribute: container-live:assertive on all descendants
+ See also: Changes to document content or node visibility +
UIA + Property: LiveSetting: "assertive"
+ See also: Changes to document content or node visibility +
ATK/AT-SPI + Object Attribute: live:assertive
+ Object Attribute: container-live:assertive
+ Object Attribute: container-live:assertive on all descendants
+ See also: Changes to document content or node visibility +
AX API + Property: AXARIALive: "assertive"
+ See also: Changes to document content or node visibility +
+

aria-live=polite

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-live=polite +
MSAA + IAccessible2 + Object Attribute: live:polite
+ Object Attribute: container-live:polite
+ Object Attribute: container-live:polite on all descendants
+ See also: Changes to document content or node visibility +
UIA + Property: LiveSetting: "polite"
+ See also: Changes to document content or node visibility +
ATK/AT-SPI + Object Attribute: live:polite
+ Object Attribute: container-live:polite
+ Object Attribute: container-live:polite on all descendants
+ See also: Changes to document content or node visibility +
AX API + Property: AXARIALive: "polite"
+ See also: Changes to document content or node visibility +
+

aria-live=off

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-live=off +
MSAA + IAccessible2 + Object Attribute: live:off
+ Object Attribute: container-live:off
+ Object Attribute: container-live:off on all descendants +
UIA + Property: LiveSetting: "off" +
ATK/AT-SPI + Object Attribute: live:off
+ Object Attribute: container-live:off
+ Object Attribute: container-live:off on all descendants
+
AX API + Property: AXARIALive: "off" +
+

aria-modal=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-modal=true +
MSAA + IAccessible2 + State: IA2_STATE_MODAL +
UIA + Property: Window.IsModal: true
+
ATK/AT-SPI + State: STATE_MODAL +
AX API + Prune the accessibility tree such that the background content is no longer exposed. No specific property is set on the accessible object that corresponds to + the element with aria-modal="true". Only the tree whose root is that modal accessible object is exposed. +
+

aria-modal=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-modal=false +
MSAA + IAccessible2 + State: IA2_STATE_MODAL not exposed +
UIA + Property: Window.IsModal: false
+
ATK/AT-SPI + State: STATE_MODAL not exposed +
AX API + Grow the accessibility tree such that the background content is exposed. No specific property is set on the accessible object that corresponds to the + element with aria-modal="false". +
+

aria-multiline=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-multiline=true +
MSAA + IAccessible2 + State: IA2_STATE_MULTI_LINE
+ State: IA2_STATE_SINGLE_LINE not exposed +
UIA + Property: AriaProperties.multiline: true +
ATK/AT-SPI + State: STATE_MULTI_LINE
+ State: STATE_SINGLE_LINE not exposed +
AX API + Not mapped
+ See also: textbox in the Role Mapping Tables +
+

aria-multiline=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-multiline=false +
MSAA + IAccessible2 + State: IA2_STATE_SINGLE_LINE
+ State: IA2_STATE_MULTI_LINE not exposed +
UIA + Not mapped +
ATK/AT-SPI + State: STATE_SINGLE_LINE
+ State: STATE_MULTI_LINE not exposed +
AX API + Not mapped
+ See also: textbox in the Role Mapping Tables +
+

aria-multiselectable=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-multiselectable=true +
MSAA + IAccessible2 + State: STATE_SYSTEM_MULTISELECTABLE
+ State: STATE_SYSTEM_EXTSELECTABLE
+ See also: Selection for details on accessibility events +
UIA + Property: Selection.CanSelectMultiple: true
+ See also: Selection for details on accessibility events +
ATK/AT-SPI + State: STATE_MULTISELECTABLE
+ See also: Selection for details on accessibility events +
AX API + Not mapped
+ See also: Selection for details on accessibility events +
+

aria-multiselectable=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-multiselectable=false +
MSAA + IAccessible2 + State: STATE_SYSTEM_MULTISELECTABLE not exposed
+ State: STATE_SYSTEM_EXTSELECTABLE not exposed
+ See also: Selection for details on accessibility events +
UIA + Not mapped* +
ATK/AT-SPI + State: STATE_MULTISELECTABLE not exposed +
AX API + Not mapped* +
+

aria-orientation=horizontal

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-orientation=horizontal +
MSAA + IAccessible2 + State: IA2_STATE_HORIZONTAL
+ State: IA2_STATE_VERTICAL not exposed +
UIA + Property: Orientation: horizontal +
ATK/AT-SPI + State: STATE_HORIZONTAL
+ State: STATE_VERTICAL not exposed +
AX API + Property: AXOrientation: AXHorizontalOrientation +
+

aria-orientation=vertical

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-orientation=vertical +
MSAA + IAccessible2 + State: IA2_STATE_VERTICAL
+ State: IA2_STATE_HORIZONTAL not exposed +
UIA + Property: Orientation: vertical +
ATK/AT-SPI + State: STATE_VERTICAL
+ State: STATE_HORIZONTAL not exposed +
AX API + Property: AXOrientation: AXVerticalOrientation +
+

aria-orientation is undefined

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-orientation is undefined +
MSAA + IAccessible2 + Not mapped* +
UIA + Not mapped* +
ATK/AT-SPI + State: STATE_VERTICAL not exposed
+ State: STATE_HORIZONTAL not exposed +
AX API + Property: AXOrientation: AXUnknownOrientation +
+

aria-owns

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-owns +
MSAA + IAccessible2 +

+ User agents MAY expose the elements that are referenced by this property as children of the current element. In which case, if multiple + aria-owns relationships are found, use only the first one. If the accessibility tree is not modified, expose as: +

+ Relation: IA2_RELATION_NODE_PARENT_OF points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ Reverse Relation: IA2_RELATION_NODE_CHILD_OF points to element
+ See also: Mapping Additional Relations +
UIA + Expose the elements that are referenced by this property as children of the current element. If multiple + aria-owns relationships are found, use only the first one. +
ATK/AT-SPI +

+ User agents MAY expose the elements that are referenced by this property as children of the current element. In which case, if multiple + aria-owns relationships are found, use only the first one. If the accessibility tree is not modified, expose as: +

+ Relation: RELATION_NODE_PARENT_OF points to accessible nodes matching IDREFs, if the referenced objects are in the accessibility tree
+ Reverse Relation: RELATION_NODE_CHILD_OF points to element
+ See also: Mapping Additional Relations +
AX API + Property: AXOwns: pointers to accessible nodes matching IDREFs +
+

aria-placeholder

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-placeholder +
MSAA + IAccessible2 + Object Attribute: placeholder-text:<value> +
UIA + Property: HelpText: <value> +
ATK/AT-SPI + Object Attribute: placeholder-text:<value> +
AX API + Property: AXPlaceholderValue: <value> +
+

aria-posinset

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-posinset +
MSAA + IAccessible2 + Object Attribute: posinset:<value>
+ See also: Group Position +
UIA + Property: AriaProperties.posinset: <value>
+ See also: Group Position +
ATK/AT-SPI + Object Attribute: posinset:<value>
+ See also: Group Position +
AX API + Property: AXARIAPosInSet: <value>
+ See also: Group Position +
+

aria-pressed=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-pressed=true +
MSAA + IAccessible2 + State: STATE_SYSTEM_PRESSED
+ See also: button with defined value for aria-pressed +
UIA + Property: Toggle.ToggleState: On (1) +
ATK/AT-SPI + State: STATE_PRESSED
+ See also: button with defined value for aria-pressed +
AX API + Property: AXValue: 1
+ See also: button with defined value for aria-pressed +
+

aria-pressed=mixed

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-pressed=mixed +
MSAA + IAccessible2 + State: STATE_SYSTEM_MIXED
+ See also: button with defined value for aria-pressed +
UIA + Property: Toggle.ToggleState: Indeterminate (2) +
ATK/AT-SPI + State: STATE_INDETERMINATE
+ See also: button with defined value for aria-pressed +
AX API + Property: AXValue: 2
+ See also: button with defined value for aria-pressed +
+

aria-pressed=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-pressed=false +
MSAA + IAccessible2 + State: STATE_SYSTEM_PRESSED not exposed
+ See also: button with defined value for aria-pressed +
UIA + Property: Toggle.ToggleState: Off (3) +
ATK/AT-SPI + State: STATE_PRESSED not exposed
+ See also: button with defined value for aria-pressed +
AX API + Property: AXValue: 0
+ See also: button with defined value for aria-pressed +
+

aria-pressed is undefined

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-pressed is undefined +
MSAA + IAccessible2 + Not mapped* +
UIA + Not mapped* +
ATK/AT-SPI + Not mapped* +
AX API + Not mapped* +
+

aria-readonly=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-readonly=true +
MSAA + IAccessible2 + State: STATE_SYSTEM_READONLY +
UIA + Property: Value.IsReadOnly: true, if the element implements + IValueProvider.
+ Property: RangeValue.IsReadOnly: true, if the element implements + IRangeValueProvider.
+ Property: AriaProperties.readonly: true +
ATK/AT-SPI + State: STATE_READ_ONLY
+ State: STATE_EDITABLE not exposed on text input roles
+ State: STATE_CHECKABLE not exposed on roles supporting aria-checked
+ State: STATE_CHECKABLE not exposed on radio descendants when used on a radiogroup +
AX API + Method: AXUIElementIsAttributeSettable(AXValue): NO +
+

aria-readonly=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-readonly=false +
MSAA + IAccessible2 + State: STATE_SYSTEM_READONLY not exposed
+ State: IA2_STATE_EDITABLE +
UIA + Property: Value.IsReadOnly: false, if the element implements + IValueProvider.
+ Property: RangeValue.IsReadOnly: false, if the element implements + IRangeValueProvider.
+ Property: AriaProperties.readonly: false +
ATK/AT-SPI + State: STATE_READ_ONLY not exposed +
AX API + Method: AXUIElementIsAttributeSettable(AXValue): YES +
+

aria-readonly is unspecified on gridcell

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-readonly is unspecified on gridcell +
MSAA + IAccessible2 + The gridcell MUST inherit any author-provided value for aria-readonly from the containing grid or treegrid. Expose the inherited + value on the gridcell as described for aria-readonly="true" and + aria-readonly="false". +
UIA + The gridcell MUST inherit any author-provided value for aria-readonly from the containing grid or treegrid. Expose the inherited + value on the gridcell as described for aria-readonly="true" and + aria-readonly="false". +
ATK/AT-SPI + The gridcell MUST inherit any author-provided value for aria-readonly from the containing grid or treegrid. Expose the inherited + value on the gridcell as described for aria-readonly="true" and + aria-readonly="false". +
AX API + The gridcell MUST inherit any author-provided value for aria-readonly from the containing grid or treegrid. Expose the inherited + value on the gridcell as described for aria-readonly="true" and + aria-readonly="false". +
+

aria-relevant

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-relevant +
MSAA + IAccessible2 + Object Attribute: relevant:<value>
+ Object Attribute: container-relevant:<value>
+ Object Attribute: container-relevant:<value> on all descendants
+ See also: Changes to document content or node visibility +
UIA + Property: AriaProperties.relevant: <value>
+ See also: Changes to document content or node visibility +
ATK/AT-SPI + Object Attribute: relevant:<value>
+ Object Attribute: container-relevant:<value>
+ Object Attribute: container-relevant:<value> on all descendants
+ See also: Changes to document content or node visibility +
AX API + Property: AXARIARelevant: <value>
+ See also: Changes to document content or node visibility +
+

aria-required=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-required=true +
MSAA + IAccessible2 + State: IA2_STATE_REQUIRED +
UIA + Property: IsRequiredForForm: true +
ATK/AT-SPI + State: STATE_REQUIRED +
AX API + Property: AXRequired: YES +
+

aria-required=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-required=false +
MSAA + IAccessible2 + Not mapped* +
UIA + Not mapped* +
ATK/AT-SPI + Not mapped* +
AX API + Not mapped* +
+

aria-roledescription

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-roledescription +
MSAA + IAccessible2 + Method: localizedExtendedRole(): <value> +
UIA + Localized Control Type: <value> +
ATK/AT-SPI + Object Attribute: roledescription:<value> +
AX API + Property: AXRoleDescription: <value> +
+

aria-roledescription is undefined or the empty string

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-roledescription is undefined or the empty string +
MSAA + IAccessible2 + Not mapped +
UIA + Localized Control Type is defined as that specified for the role of the element: based on the explicit role if the role attribute is provided; otherwise, based on the implicit + role for the host language. +
ATK/AT-SPI + Not mapped +
AX API + AXRoleDescription is defined as that specified for the role of the element: based on the explicit role if the role attribute is provided; otherwise, based on the implicit role for + the host language. +
+

aria-rowcount

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-rowcount +
MSAA + IAccessible2 + Object Attribute: rowcount:<value>
+ Method: IAccessible2::groupPosition(): similarItemsInGroup=<value> on rows +
UIA + Property: Grid.RowCount: <value> +
ATK/AT-SPI + Object Attribute: rowcount should contain the author-provided value.
+ Method: atk_table_get_n_rows() should return the actual number of rows. +
AX API + Property: AXARIARowCount: <value> +
+

aria-rowindex

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-rowindex +
MSAA + IAccessible2 + Object Attribute: rowindex:<value>
+ Method: IAccessible2::groupPosition(): positionInGroup=<value> on rows +
UIA + Property: GridItem.Row: <value> (zero-based) +
ATK/AT-SPI + Object Attribute: rowindex should contain the author-provided value.
+ Method: atk_table_cell_get_position() should return the actual (zero-based) row index. +
AX API + Property: AXARIARowIndex: <value> +
+

aria-rowindextext

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-rowindextext +
MSAA + IAccessible2 + Object Attribute: rowindextext:<value> +
UIA + Property: AriaProperties.rowindextext: <value> +
ATK/AT-SPI + Object Attribute: rowindextext:<value> +
AX API + Property: AXRowIndexDescription: <value> +
+

aria-rowspan

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-rowspan +
MSAA + IAccessible2 + Object Attribute: rowspan:<value>
+ Method: IAccessibleTableCell::rowExtent(): column=<value> +
UIA + Property: GridItem.RowSpan: <value> +
ATK/AT-SPI + Object Attribute: rowspan should contain the author-provided value.
+ Method: atk_table_cell_get_row_column_span() should return the actual row span. +
AX API + Property: AXRowIndexRange.length: <value> +
+

aria-selected=true

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-selected=true +
MSAA + IAccessible2 + State: STATE_SYSTEM_SELECTABLE
+ State: STATE_SYSTEM_SELECTED
+ See also: Selection for details on accessibility events +
UIA + Property: SelectionItem.IsSelected: true +
ATK/AT-SPI + State: STATE_SELECTABLE
+ State: STATE_SELECTED
+ See also: Selection for details on accessibility events +
AX API + Property: AXSelected: YES +
+

aria-selected=false

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-selected=false +
MSAA + IAccessible2 + State: STATE_SYSTEM_SELECTABLE
+ State: STATE_SYSTEM_SELECTED not exposed
+ See also: Selection for details on accessibility events +
UIA + Property: SelectionItem.IsSelected: false +
ATK/AT-SPI + State: STATE_SELECTABLE
+ State: STATE_SELECTED not exposed
+ See also: Selection for details on accessibility events +
AX API + Property: AXSelected: NO +
+

aria-selected is undefined

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-selected is undefined +
MSAA + IAccessible2 + Not mapped +
UIA + Not mapped +
ATK/AT-SPI + Not mapped +
AX API + Not mapped +
+

aria-setsize

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-setsize +
MSAA + IAccessible2 + Object Attribute: setsize:<value>
+ See also: Group Position +
UIA + Property: AriaProperties.setsize: <value>
+ See also: Group Position +
ATK/AT-SPI +

+ If the author-provided value of aria-setsize is -1, the exposed value should be based on the number of objects in the + DOM. +

+ Object Attribute: setsize:<value>
+ State: STATE_INDETERMINATE if the author-provided value is -1
+ See also: Group Position +
AX API + Property: AXARIASetSize: <value>
+ See also: Group Position +
+

aria-sort=ascending

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-sort=ascending +
MSAA + IAccessible2 + Object Attribute: sort:ascending +
UIA + Property: AriaProperties.sort: ascending
+ Property: ItemStatus: ascending if the element maps to + HeaderItem Control Type +
ATK/AT-SPI + Object Attribute: sort:ascending +
AX API + Property: AXSortDirection: AXAscendingSortDirection +
+

aria-sort=descending

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-sort=descending +
MSAA + IAccessible2 + Object Attribute: sort:descending +
UIA + Property: AriaProperties.sort: descending
+ Property: ItemStatus: descending if the element maps to + HeaderItem Control Type +
ATK/AT-SPI + Object Attribute: sort:descending +
AX API + Property: AXSortDirection: AXDescendingSortDirection +
+

aria-sort=other

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-sort=other +
MSAA + IAccessible2 + Object Attribute: sort:other +
UIA + Property: AriaProperties.sort: other
+ Property: ItemStatus: other if the element maps to + HeaderItem Control Type +
ATK/AT-SPI + Object Attribute: sort:other +
AX API + Property: AXSortDirection: AXUnknownSortDirection +
+

aria-sort=none

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-sort=none +
MSAA + IAccessible2 + Object Attribute: sort:none, if the value is not unspecified +
UIA + Not mapped* +
ATK/AT-SPI + Object Attribute: sort:none, if the value is not unspecified +
AX API + Not mapped* +
+

aria-valuemax

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-valuemax +
MSAA + IAccessible2 + Method: IAccessibleValue::maximumValue(): <value>
+ See also: Handling Author Errors for States and Properties +
UIA + Property: RangeValue.Maximum: <value>
+ See also: Handling Author Errors for States and Properties +
ATK/AT-SPI + Method: atk_value_get_maximum_value(): <value>
+ See also: Handling Author Errors for States and Properties +
AX API + Property: AXMaxValue: <value>
+ See also: Handling Author Errors for States and Properties +
+

aria-valuemin

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-valuemin +
MSAA + IAccessible2 + Method: IAccessibleValue::minimumValue(): <value>
+ See also: Handling Author Errors for States and Properties +
UIA + Property: RangeValue.Minimum: <value>
+ See also: Handling Author Errors for States and Properties +
ATK/AT-SPI + Method: atk_value_get_minimum_value(): <value>
+ See also: Handling Author Errors for States and Properties +
AX API + Property: AXMinValue: <value>
+ See also: Handling Author Errors for States and Properties +
+

aria-valuenow

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-valuenow +
MSAA + IAccessible2 + Method: IAccessibleValue::currentValue(): <value>
+ Method: IAccessible::get_accValue(): <value> if aria-valuetext is not defined
+ See also: Handling Author Errors for States and Properties +
UIA + Property: RangeValue.Value: <value>
+ See also: Handling Author Errors for States and Properties +
ATK/AT-SPI + Method: atk_value_get_current_value(): <value>
+ See also: Handling Author Errors for States and Properties +
AX API + Property: AXValue: <value>
+ See also: Handling Author Errors for States and Properties +
+

aria-valuetext

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-valuetext +
MSAA + IAccessible2 + Method: IAccessible::get_accValue(): <value>
+ Object Attribute: valuetext:<value>
+ See also: Handling Author Errors for States and Properties +
UIA + Property: Value.Value: <value>
+ See also: Handling Author Errors for States and Properties +
ATK/AT-SPI + Object Attribute: valuetext:<value>
+ See also: Handling Author Errors for States and Properties +
AX API + Property: AXValueDescription: <value>
+ See also: Handling Author Errors for States and Properties +
+
+
+
+

Special Processing Requiring Additional Computation

+
+

Name and Description

+

+ For information on how to compute an accessible name or + accessible description, see the section titled + Accessible Name and Description Computation of the + Accessible Name and Description Computation specification. +

+
+
+

Relations

+

+ Often in a GUI, there are relationships between the widgets that can be exposed programmatically + to assistive technology. WAI-ARIA provides several relationship [=ARIA/properties=] which are globally + applicable to any element: aria-controls, aria-describedby, aria-flowto, aria-labelledby, aria-owns, aria-posinset, and aria-setsize. Therefore, it is not important to check the role before computing them. [=User agents=] can simply map these relations to + accessibility APIs as defined in the section titled State and Property Mapping. +

+
+

Reverse Relations

+

+ A reverse relation exists when an element's ID is referenced by a [=ARIA/property=] in another element. For + APIs that support reverse relations, [=user agents=] MUST use the mapping defined in the + State and Property Mapping Tables when an element's ID is referenced by a relation property of another element and the referenced element is + in the accessibility tree. All WAI-ARIA references must point to an element that is exposed as an accessible object in the accessibility tree. When the referenced object is not exposed + in the accessibility tree (e.g. because it is [=element/hidden=]), the reference is null. aria-labelledby and aria-describedby have an additional feature, which + allows them to pull a flattened string from the referenced element to populate the name or description fields of the accessibility API. This feature is described in the + Name and Description section. +

+

+ Special case: If both aria-labelledby and HTML + <label for= … > are used, the user agent MUST use the WAI-ARIA relation and MUST ignore the + HTML label relation. +

+

+ Note that aria-describedby may reference structured or interactive information where users would want to be able + to navigate to different sections of content. User agents MAY provide a way for the user to navigate to structured information referenced by + aria-describedby and assistive technology SHOULD provide such a method. +

+
+
+

Implied reverse relations

+

+ In addition to the explicit relations defined by WAI-ARIA [=ARIA/properties=], reverse relations are implied in two other + situations: elements with role="treeitem" where the ancestor does not have an + aria-owns property and descendants of elements with + aria-atomic property. +

+

+ In the case of role="treeitem", when aria-owns is + not used, [=user agents=] SHOULD do the following where reverse relations are supported by the API: +

+
    +
  • + If the current treeitem uses aria-level, then walk backwards in the tree until a treeitem is found with a lower + aria-level, then set RELATION_NODE_CHILD_OF to that element. If the top of the tree is reached, then set RELATION_NODE_CHILD_OF to the tree element itself. +
  • +
  • + If the parent of the treeitem has a role of + group, then walk backwards from the group until an element with a role of + treeitem is found, then set RELATION_NODE_CHILD_OF to that element. +
  • +
+

+ In the case of aria-atomic, where reverse relations are supported by the API: +

+
    +
  • + User agents SHOULD check the chain of ancestor elements for aria-atomic="true". If found, user agents SHOULD set the RELATION_MEMBER_OF relation to point to the ancestor that sets + aria-atomic="true". +
  • +
+
+
+
+

Group Position

+

+ aria-level, aria-posinset, and aria-setsize are all 1-based. When the [=ARIA/property=] is not present or is "0", it indicates the + property is not computed or not supported. If any of these properties are specified by the author as either "0" or a negative number, [=user agents=] SHOULD use "1" + instead. +

+

+ If aria-level is not provided or inherited for an element of role + treeitem or comment, user agents implementing IAccessible2 or ATK/AT-SPI MUST compute it by + following the explicit or computed RELATION_NODE_CHILD_OF relations. +

+

+ If aria-posinset and aria-setsize are not provided, + user agents MUST compute them as follows: +

+
    +
  • + for role="treeitem" and role="comment", walk + the tree backward and forward until the explicit or computed level becomes less than the current item's level. Count items only if they are at the same level as the current item. +
  • +
  • + Otherwise, if the role supports aria-posinset and + aria-setsize, process the parent (DOM parent or parent defined by aria-owns), counting items that have the same role. +
  • +
  • + Because these value are 1-based, include the current item in the computation. For aria-posinset, include the current item and other group items if they are before the current item in the DOM. For aria-setsize, add to that the number of items in the same group after the current item in the DOM. +
  • +
+

+ If the author provides one or more of aria-setsize and aria-posinset, it is the author's responsibility to supply them for all elements in the set. [=User agent=] + correction of missing values in this case is not defined. +

+

+ MSAA/IAccessible2 API mappings involve an additional function, groupPosition() [[IAccessible2]], when + aria-level, aria-posinset, and/or aria-setsize are present on an element, or are computed by the user agent. When this occurs: +

+
    +
  • + aria-level is exposed in the groupLevel parameter of groupPosition(), +
  • +
  • + aria-setsize is exposed in the similarItemsInGroup parameter, and +
  • +
  • + aria-posinset is exposed in the positionInGroup parameter. +
  • +
+
+
+
+

Actions

+

As part of mapping roles to accessible objects as defined in Role Mapping, users agents expose a default action on the object.

+
    +
  • + MSAA: If an AT calls DoDefaultAction on an accessible object, the user agent SHOULD simulate a click on the + DOM element which is mapped to that accessible object. +
  • +
  • + IAccessible2: If an AT calls the IAccessibleAction on an accessible object, the user agent SHOULD simulate a click on the + DOM element which is mapped to that accessible object. +
  • +
  • + UIA Automation: If an AT calls any UIA pattern method on an accessible object, the user agent + SHOULD simulate a click on the DOM element which is mapped to that accessible object. +
  • +
  • + ATK/AT-SPI: If an AT calls an + action on an accessible object, the user agent SHOULD simulate a click on the DOM element which is mapped to that accessible object. +
  • +
  • + AX API: If an AT triggers an AXPress action on an accessible object, the user agent + SHOULD simulate a click on the DOM element which is mapped to that accessible object. +
  • +
+

+ Authors will need to create handlers for those click events that update WAI-ARIA states and properties in the + DOM accordingly, so that those updated states can be populated by the user agent in the Accessibility + API. +

+
+
+

Events

+

+ [=User agents=] fire events for user actions, WAI-ARIA state changes, changes to + document content or node visibility, changes in selection and operation of menus as defined in the following sections. +

+
+

State and Property Change Events

+

+ [=User agents=] MUST notify assistive technology of state changes as defined in the table below, SHOULD notify assistive technology of + [=ARIA/property=] changes if the accessibility API defines a change event for the property, and SHOULD NOT notify assistive technology of + property changes if the accessibility API does not define a change event for the property. For example, IAccessible2 defines an event + to be used when aria-activedescendant changes. + WAI-ARIA properties that are expected to change include + aria-activedescendant, aria-valuenow, and aria-valuetext. +

+

In some APIs, AT will only be notified of events to which it has subscribed.

+

+ For simplicity and performance the user agent MAY trim out change events for state or property changes that assistive technologies typically ignore, such as events + that are happening in a window that does not currently have focus. +

+

+ Translators: For label text associated with the following table and its toggle buttons, see the mappingTableLabels object in the <head> section of this + document. +

+

aria-activedescendant

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-activedescendant +
MSAA + IAccessible2 event + See Focus Changes. +

In addition:

+

IA2_EVENT_ACTIVE_DESCENDANT_CHANGED

+
UIA event + See Focus Changes. +

In addition:

+

PropertyChangedEvent

+

Property: AriaProperties

+
ATK/AT-SPI eventSee Focus Changes.
AX API Notification + See Focus Changes. +

In addition: AXSelectedChildrenChanged

+
+

aria-busy (state)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-busy (state) +
MSAA + IAccessible2 event + EVENT_OBJECT_STATECHANGE +
UIA event + PropertyChangedEvent +

Property: AriaProperties

+
ATK/AT-SPI event + object:state-changed:busy +
AX API Notification + AXElementBusyChanged +
+

aria-checked (state)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-checked (state) +
MSAA + IAccessible2 event + EVENT_OBJECT_STATECHANGE +
UIA event + PropertyChangedEvent +

Properties: AriaProperties, ToggleState as part of toggle pattern

+
ATK/AT-SPI event + object:state-changed:checked +
AX API Notification + AXValueChanged +
+

aria-current (state)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-current (state) +
MSAA + IAccessible2 event + IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED +
UIA event + PropertyChangedEvent +

Property: AriaProperties

+
ATK/AT-SPI event + object:state-changed:active +
AX API Notification + AXCurrentStateChanged +
+

aria-disabled (state)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-disabled (state) +
MSAA + IAccessible2 event + EVENT_OBJECT_STATECHANGE +
UIA event + PropertyChangedEvent +

Properties: AriaProperties, IsEnabled

+
ATK/AT-SPI eventobject:state-changed:enabled and object:state-changed:sensitive
AX API Notification + AXDisabledStateChanged +
+

aria-describedby

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-describedby +
MSAA + IAccessible2 event + EVENT_OBJECT_DESCRIPTIONCHANGE +
UIA event + PropertyChangedEvent +

Properties: DescribedBy

+
ATK/AT-SPI event + object:property-change:accessible-description +
AX API Notification + AXDescribedByChanged +
+

aria-dropeffect (property, deprecated)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-dropeffect (property, deprecated) +
MSAA + IAccessible2 event + IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED +
UIA event + PropertyChangedEvent +

Property: AriaProperties

+
ATK/AT-SPI event + object:property-change +
AX API Notification + AXDropEffectChanged +
+

aria-expanded (state)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-expanded (state) +
MSAA + IAccessible2 event + EVENT_OBJECT_STATECHANGE +
UIA event + PropertyChangedEvent +

Properties: AriaProperties, ExpandCollapseState as part of the ExpandCollapse pattern

+
ATK/AT-SPI event + object:state-changed:expanded +
AX API Notification + AXRowExpanded,
+ AXRowCollapsed,
+ AXRowCountChanged +
+

aria-grabbed (state, deprecated)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-grabbed (state, deprecated) +
MSAA + IAccessible2 event +

EVENT_OBJECT_SELECTION

+

IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED

+
UIA event + PropertyChangedEvent +

Property: AriaProperties

+
ATK/AT-SPI event + object:property-change +
AX API Notification + AXGrabbedStateChanged +
+

aria-hidden (state)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-hidden (state) +
MSAA + IAccessible2 event + IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED +
UIA event + StructureChangedEvent +

PropertyChangedEvent

+

Property: AriaProperties

+
ATK/AT-SPI event + object:property-change +
AX API Notification + AXUIElementDestroyed,
+ AXUIElementCreated +
+

aria-invalid (state)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-invalid (state) +
MSAA + IAccessible2 event + EVENT_OBJECT_STATECHANGE +
UIA event + PropertyChangedEvent +

Properties: AriaProperties, IsDataValidForForm

+
ATK/AT-SPI event + object:state-changed:invalid_entry +
AX API Notification + AXInvalidStatusChanged +
+

aria-label and aria-labelledby

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-label and aria-labelledby +
MSAA + IAccessible2 event + EVENT_OBJECT_NAMECHANGE +
UIA event + PropertyChangedEvent +

Property for aria-label: AriaProperties

+

Property for aria-labelledby: LabeledBy

+
ATK/AT-SPI event + object:property-change:accessible-name +
AX API Notification + AXLabelCreated +
+

aria-pressed (state)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-pressed (state) +
MSAA + IAccessible2 event + EVENT_OBJECT_STATECHANGE +
UIA event + PropertyChangedEvent +

Properties: AriaProperties, ToggleState as part of toggle pattern

+
ATK/AT-SPI event + object:state-changed:pressed +
AX API Notification + AXPressedStateChanged +
+

aria-readonly

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-readonly +
MSAA + IAccessible2 event + EVENT_OBJECT_STATECHANGE +
UIA event + PropertyChangedEvent +

Property: AriaProperties

+
ATK/AT-SPI event + object:state-changed:readonly +
AX API Notification + AXReadOnlyStatusChanged +
+

aria-required

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-required +
MSAA + IAccessible2 event + EVENT_OBJECT_STATECHANGE +
UIA event + PropertyChangedEvent +

Properties: AriaProperties, IsRequiredForForm

+
ATK/AT-SPI event + object:state-changed:required +
AX API Notification + AXRequiredStatusChanged +
+

aria-selected (state)

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-selected (state) +
MSAA + IAccessible2 eventSee section Selection for details.
UIA eventSee section Selection for details.
ATK/AT-SPI eventSee section Selection for details.
AX API NotificationSee section Selection for details.
+

aria-valuenow

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-valuenow +
MSAA + IAccessible2 event + EVENT_OBJECT_VALUECHANGE +
UIA event + PropertyChangedEvent +

Properties: AriaProperties, also RangeValueValue if element is mapped with RangeValue Control Pattern

+
ATK/AT-SPI event + object:property-change:accessible-value +
AX API Notification + AXValueChanged +
+

aria-valuetext

+ + + + + + + + + + + + + + + + + + + + + + + +
ARIA Specification + aria-valuetext +
MSAA + IAccessible2 event + EVENT_OBJECT_VALUECHANGE +
UIA event + PropertyChangedEvent +

Property: AriaProperties

+
ATK/AT-SPI event + object:property-change:accessible-value +
AX API Notification + AXValueChanged +
+
+
+

Changes to document content or node visibility

+

+ Processing document changes is important regardless of WAI-ARIA. The events described in the table below are used by user agents + to inform AT of changes to the DOM via the accessibility tree. For the purposes of conformance with + this standard, [=user agents=] MUST implement the behavior described in this section whenever WAI-ARIA attributes are applied to + dynamic content on a Web page. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Table of document change scenarios and events to be fired in each + API +
ScenarioMSAA + IAccessible2 eventUIA eventATK/AT-SPI eventAX API Notification
When text is removedIA2_EVENT_TEXT_REMOVEDEVENT_OBJECT_LIVEREGIONCHANGEDtext_changed::deleteIf in a live region, AXLiveRegionChanged.
If in aria-errormessage, AXValidationErrorChanged.
When text is insertedIA2_EVENT_TEXT_INSERTEDEVENT_OBJECT_LIVEREGIONCHANGEDtext_changed::insertIf in a live region, AXLiveRegionChanged.
If in aria-errormessage, AXValidationErrorChanged.
When text is changedIA2_EVENT_TEXT_REMOVE and IA2_EVENT_TEXT_INSERTEDEVENT_OBJECT_LIVEREGIONCHANGEDtext_changed::delete and text_changed::insertIf in a live region, AXLiveRegionChanged.
If in aria-errormessage, AXValidationErrorChanged.
+

Fire these events for node changes where the node in question is an element and has an accessible object:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Table of document change scenarios and events to be fired in each + API +
ScenarioMSAAMicrosoft UIA eventATK/AT-SPI eventAX API Notification
When an accessibility subtree is [=element/hidden=] + EVENT_OBJECT_HIDE
+ The MSAA event called EVENT_OBJECT_DESTROY is not used because this has a history of stability issues and assistive + technology avoids it. In any case, from the user's point of view, there is no difference between something that is hidden or destroyed. +
AutomationElement..::.StructureChangedEventchildren_changed::remove +

AXUIElementDestroyed

+

If in a live region, AXLiveRegionChanged

+
When an accessibility subtree is removed + EVENT_OBJECT_REORDER
+ The MSAA event called EVENT_OBJECT_DESTROY is not used because this has a history of stability issues and assistive + technology avoids it. In any case, from the user's point of view, there is no difference between something that is hidden or destroyed. +
AutomationElement..::.StructureChangedEventchildren_changed::remove +

AXUIElementDestroyed

+

If in a live region, AXLiveRegionChanged

+
When an accessibility subtree is shownEVENT_OBJECT_SHOW children_changed::add +

AXUIElementCreated

+

If in a live region, AXLiveRegionChanged

+
When an accessibility subtree is insertedEVENT_OBJECT_REORDER children_changed::add +

AXUIElementCreated

+

If in a live region, AXLiveRegionChanged

+
When an accessibility subtree is movedTreat it as a removal from one place and insertion in anotherTreat it as a removal from one place and insertion in anotherTreat it as a removal from one place and insertion in another +

AXUIElementDestroyed/ AXUIElementCreated

+

If in a live region, AXLiveRegionChanged

+
When an accessibility subtree is changed (e.g. replaceNode)Treat it as a removal and insertionTreat it as a removal and insertionTreat it as a removal and insertion +

AXUIElementDestroyed/ AXUIElementCreated

+

If in a live region, AXLiveRegionChanged

+
+

+ In some cases, node changes may occur where the node is not an element or has no accessible object. For example, a numbered list bullet ("12.") may have a node in the accessibility tree + but not in the DOM tree. For text within a paragraph marked in HTML as + <strong>, the <strong> element has a node in the DOM tree but may not have one in the accessibility tree. + The text itself will of course be in the accessibility tree along with the identification of the range of text that is formatted as strong. If any of the changes described in the table + above occur on such a node, user agents SHOULD compute and fire relevant text change events as described above. +

+

+ User agents SHOULD ensure that an assistive technology, running in process can receive notification of a node being removed prior to removal. This allows an assistive technology, such as a + screen reader, to refer back to the corresponding DOM node being deleted. This is important for live regions where + removals are important. For example, a screen reader would want to notify a user that another user has left a chat room. The event in + MSAA would be EVENT_OBJECT_HIDE. For ATK/AT-SPI + this would be children_changed::remove. And in macOS, the event is AXLiveRegionChanged. This also requires the user agent to provide a unique ID in the + accessibility API notification identifying the unique node being removed. +

+

+ When firing any of the above-mentioned change events, it is very useful to provide information about whether the change was caused by user input (as opposed to a timeout initiated from the + page load, etc.). This allows the assistive technology to have different rules for presenting changes from the real world as opposed to from user action. Mouse hovers are not considered + explicit user input because they can occur from accidental bumps of the mouse. +

+

To expose whether a change occurred from user input:

+
    +
  • + In ATK/AT-SPI this can be provided by appending the string + ":system" to the event name when the user did not cause the change. +
  • +
  • + In IAccessible2, which screen readers typically access in process on the same thread, the best practice is to expose the object attribute event-from-user-input:true on the + accessible object for the event, if the user caused the change. +
  • +
+

Exposing additional useful information about the context of the change:

+
    +
  • + In ATK/AT-SPI and IAccessible2, the + RELATION_MEMBER_OF relation on the accessible event's target accessible object SHOULD point to any ancestor with + aria-atomic="true" (if any). +
  • +
  • + In ATK/AT-SPI and IAccessible2, the container-live, + container-relevant, container-busy, container-atomic object attributes SHOULD be exposed on the accessible event object, providing the computed + value for the related WAI-ARIA properties. The computed value is the value of the closest ancestor. It is recommended to not + expose the object attribute if the default value is used. +
  • +
+

Additional MSAA events may be necessary:

+
    +
  • + If something changes in an ancestor with a mapped MSAA role of ROLE_SYSTEM_ALERT, then an + EVENT_SYSTEM_ALERT event SHOULD be fired for the alert. The alert role has an implied value of "assertive" for the + aria-live property. +
  • +
  • Menu events may need to be fired. See Special Events for Menus.
  • +
+
+
+

Focus Changes

+

The following table defines the accessibility API keyboard focus states and events.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Table of + accessibility APIs + for focus states and + events +
 MSAAMicrosoft UIAATK/AT-SPIAX API
Focusable stateSTATE_SYSTEM_FOCUSABLE + Current state reflected in IUIAutomationElement::CurrentIsKeyboardFocusable, can be retrieved with IUIAutomationElement::GetCurrentPropertyValue method using + UIA_IsKeyboardFocusablePropertyId property identifier. + STATE_FOCUSABLEboolean AXFocused: the AXUIElementIsAttributeSettable method returns YES.
Focused stateSTATE_SYSTEM_FOCUSED + Current state reflected in IUIAutomationElement::CurrentHasKeyboardFocus, can be retrieved with IUIAutomationElement::GetCurrentPropertyValue method using + UIA_HasKeyboardFocusPropertyId property identifier. + STATE_FOCUSEDboolean AXFocused
Focus eventEVENT_OBJECT_FOCUSClients can subscribe with IUIAutomation::AddFocusChangedEventHandler using callback interface is IUIAutomationFocusChangedEventHandler + object:state-changed:focused and: + + AXFocusedUIElementChanged
+
+
+

Selection

+

There are two cases for selection:

+
    +
  • Single selection
  • +
  • Multiple selection
  • +
+

+ In the single selection case, selection follows focus (see the section "Focus States and Events Table" for information about focus events). User + agents MUST fire the following events when aria-selected changes: +

+ + + + + + + + + + + + + + + + + + +
+ Single selection events +
ScenarioMSAAMicrosoft UIAATK/AT-SPIAX API
Focus changeEVENT_OBJECT_SELECTION and EVENT_OBJECT_STATECHANGE on newly focused item. + UIA_SelectionItem_ElementSelectedEventId on the newly focused element. +

If on a gridcell, row, option, or tab, fire UIA_SelectionItem_ElementSelectedEventId.

+
+
    +
  • object:selection-changed on the current container,
  • +
  • + object:state-changed:selected on the descendant accessible object whose selection has changed: +
      +
    • detail1 = 1 for the descendant which just became selected.
    • +
    • detail1 = 0 for the descendant which just became unselected.
    • +
    +
  • +
+
AXSelectedChildrenChanged
+

+ The multiple selection case occurs when aria-multiselectable="true" on an element with a role that supports that [=ARIA/property=]. User agents MUST fire the following events + when aria-selected changes on a descendant, as follows: +

+

+ The multiple selection case occurs when aria-multiselectable="true" on an element with a role that supports that [=ARIA/property=]. There are several important aspects: +

+
    +
  1. + In Microsoft UIA, the Selection and SelectionItem Control Patterns expose the selection availability, state, and + methods. +
  2. +
  3. + User agents MUST fire the following events when aria-selected changes on a descendant, as follows: +
  4. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Multiple selection events +
ScenarioMSAAMicrosoft UIAATK/AT-SPIAX API
+ Toggle aria-selected + EVENT_OBJECT_SELECTIONADD/EVENT_OBJECT_SELECTIONREMOVE on the item. + SelectionItem Control Pattern:UIA_SelectionItem_ElementAddedToSelectionEventId or UIA_SelectionItem_ElementRemovedFromSelectionEventId on the + item. + +
    +
  • object:selection-changed on the current container,
  • +
  • + object:state-changed:selected on any descendant accessible object whose selection has changed: +
      +
    • detail1 = 1 for any descendant which just became selected.
    • +
    • detail1 = 0 for any descendant which just became unselected.
    • +
    +
  • +
+
AXSelectedChildrenChanged
Selection follows focusEVENT_OBJECT_SELECTION and EVENT_OBJECT_STATECHANGE on newly focused item.FocusChangedEvent should be fired but individual selection event may not happen, to avoid redundancy. +
    +
  • object:selection-changed on the current container,
  • +
  • + object:state-changed:selected on any descendant accessible object whose selection has changed: + +
  • +
+
AXSelectedChildrenChanged
Select or deselect many items at onceUser agent MAY fire an EVENT_OBJECT_SELECTIONWITHIN. If this event is fired the other events noted above MAY be trimmed out for performance. + For each element selected or deselected, fire SelectionItem Control Pattern: UIA_SelectionItem_ElementAddedToSelectionEventId or + UIA_SelectionItem_ElementRemovedFromSelectionEventId on the current container. User agents MAY choose to fire the Selection Control Pattern Invalidated event, which + indicates that the selection in a container has changed significantly and requires sending more addition and removal events than the InvalidateLimit constant permits. + +
    +
  • the user agent MAY fire a single object:selection-changed event on the container, vs. multiple events, for performance,
  • +
  • + object:state-changed:selected on any descendant accessible object whose selection has changed: + +
  • +
+
AXSelectedChildrenChanged
+
+
+

Special Events for Menus

+

+ Some APIs, provide special events whenever a menu is opened or closed. [=User agents=] SHOULD provide the + events as described in the table below. If provided, because menus can be made visible or [=element/hidden=] using a variety of techniques, a [=user agent=] MUST ensure that the events are + nested and symmetrical. +

+

+ Frequently, a menubar is used to organize a hierarchy of menus. In those cases, the menubar MUST be a + DOM parent of the associated menuitems, or one defined by aria-owns. In other cases, no menubar is involved; for example, when the menu is associated with a toolbar button, or is a context menu. + Nonetheless the relevant menu events are provided as described in the following table. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Menu events +
ScenarioMSAAMicrosoft UIAAX API

Menubar is currently not active, and user moves focus to the menubar from elsewhere thereby activating it. As a result, a menuitem in the menubar is focused.

Activate the menubar and fire EVENT_SYSTEM_MENUSTART on the accessible object for the menubar.MenuModeStartEvent on the accessible object for the menu.AXMenuOpenedNotification

Focus a menuitem while menubar is activated, or focus a menuitem in a menu.

EVENT_OBJECT_FOCUSAutomationFocusChangedEventAXMenuItemSelectedNotification
+

Menu popup made visible (menu is opened).

+

Should only be fired once until the menu is closed and opened again.

+
EVENT_SYSTEM_MENUPOPUPSTARTMenuOpenedEvent, then a focus event on a menuitem.AXMenuOpenedNotification
Menu popup hidden (menu is closed).EVENT_SYSTEM_MENUPOPUPEND once only for accessible menu object and only if EVENT_SYSTEM_MENUPOPUPSTART was fired for it.MenuClosedEventAXMenuClosedNotification
Any open menus are closed including sub-menus, and user moves focus away from the menubar; menubar is deactivated.EVENT_SYSTEM_MENUEND on the menubar and deactivate the menubar.MenuClosedEvent, then MenuModeEndEventAXMenuClosedNotification
+
+
+
+ +
+

Privacy considerations

+

+ In accordance with Web Platform Design Principles, this specification provides no programmatic + interface to determine if information is being used by Assistive Technologies. However, this specification does allow an author to present different information to users of Assistive + Technologies from the information available to users who do not use Assistive Technologies. This is possible using many features of the ARIA and CORE-AAM specifications, just as this is + possible using many other parts of the web technology stack. This content disparity could be abused to perform + active fingerprinting of users of Assistive Technologies. +

+
+
+

Security considerations

+

This specification introduces no new security considerations.

+
+ +
+

Change Log

+
+

Substantive changes since the last Candidate Recommendation Snapshot

+
    + +
  • 14-Nov-2022: add new AX API mappings for colindextext/rowindextext
  • +
  • 4-Jan-2024: Fix: errant computed role for treegrid row
  • +
  • 31-Oct-2023: Update UIA aria-readonly mappings
  • +
  • 31-Oct-2023: Add aria-haspopup='grid' mappings
  • +
  • 31-Oct-2023: Correct AXAPI notifications
  • +
  • 26-Oct-2023: Remove UIA_DescribedBy property from aria-describedby UIA mappings
  • +
  • 12-Oct-2023: Make haspopup='true' mapping identical to haspopup='menu'
  • +
  • 1-Sep-2023: Fix AX API aria-haspopup mappings
  • +
  • 25-Aug-2023: Add map for `role=image` (synonym of `img`)
  • +
  • 17-Aug-2023: add normative expectations and examples for computedrole
  • +
  • 16-Aug-2023: Update mapping for aria-errormessage
  • +
  • 15-May-2023: Add computed role section and mappings
  • +
  • 8-May-2023: update UIA ins/del
  • +
  • 13-Apr-2023: Add mapping for aria-braillelabel and aria-brailleroledescription
  • +
  • 9-Apr-2023: Update annotation roles AXAPI mapping
  • +
  • 6-Apr-2023: Update aria-describedby and aria-description AXAPI
  • +
  • 6-Apr-2023: Update role='meter' subrole for AXAPI
  • +
  • 1-Feb-2023: remove AXAPI-specific 'menuitem in group' guidance
  • +
  • 1-Feb-2023: Update AXAPI mapping for aria-keyshortcuts
  • +
  • 1-Feb-2023: Update IA2 role='blockquote' map
  • +
  • 1-Feb-2023: Update MSAA mapping for paragraph and time and caption
  • +
+
+
+

Substantive changes since the Core Accessibility API Mappings 1.1 Recommendation

+
    + +
  • 1-Nov-2022: draft privacy and security
  • +
  • 13-Oct-2022: fix: remove label and legend
  • +
  • 12-Oct-2022: Remove mappings for label and legend.
  • +
  • + 05-Apr-2021: Update ATK mappings for aria-colindex, aria-colspan, aria-colcount, aria-rowindex, aria-rowspan, and + aria-rowcount. +
  • +
  • 06-Apr-2020: Update ATK mappings for alert and alertdialog.
  • +
  • + 25-Feb-2020: Add mappings for comment, mark, and suggestion roles. Include comment in calculation for aria-label and group + position. +
  • +
  • 25-Feb-2020: Add mappings for aria-description.
  • +
  • 03-Nov-2019: Remove explicit AXRoleDescription values for AX API. User agents should follow the guidance described in the note.
  • +
  • 22-Oct-2019: Add mappings for strong and emphasis roles for AX API.
  • +
  • 22-Oct-2019: Add mappings for code role for AX API.
  • +
  • 21-Oct-2019: Add mappings for aria-colindextext and aria-rowindextext roles for ATK, IA2, and UIA.
  • +
  • 21-Oct-2019: Add mappings for strong and emphasis roles for ATK, IA2, and UIA.
  • +
  • 21-Oct-2019: Add mappings for code role for ATK, IA2, and UIA.
  • +
  • 18-Sep-2019: Update MSAA mappings for subscript and superscript
  • +
  • 10-Sep-2019: Add mappings for generic role.
  • +
  • 09-Jul-2019: Add mappings for insertion and deletion roles.
  • +
  • 14-May-2019: Add mappings for legend role.
  • +
  • 14-May-2019: Add mappings for label role.
  • +
  • 14-May-2019: Add mappings for time role.
  • +
  • 25-Apr-2019: Add mappings for subscript and superscript roles.
  • +
  • 25-Feb-2019: Add mappings for meter role.
  • +
  • 05-Feb-2019: Update UIA state and property change events.
  • +
  • 06-Jun-2018: Update UIA mappings for aria-placeholder.
  • +
  • 04-Jun-2018: Add mappings for blockquote, caption, and paragraph roles.
  • +
  • 05-Mar-2018: Add mention of AXTitle for exposing rendered labels for AXAPI.
  • +
  • 05-Mar-2018: Add events for aria-label, aria-labelledby, and aria-describedby.
  • +
+
+
+
+

Acknowledgments

+

The following people contributed to the development of this document.

+
    + +
+
+

ARIA WG participants at the time of publication

+
    + +
+
+
+
+ + diff --git a/documentation/archive/1.2/1.2 Non editorial features and other changes.md b/documentation/archive/1.2/1.2 Non editorial features and other changes.md new file mode 100644 index 000000000..820982b78 --- /dev/null +++ b/documentation/archive/1.2/1.2 Non editorial features and other changes.md @@ -0,0 +1,178 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/1.2-Non-editorial-features-and-other-changes, last edited Apr 1, 2021. + +# 1.2 Non editorial features and other changes + + +Note: We have a https://github.com/w3c/aria/wiki/Plans-regarding-role-parity[dedicated page] for work on achieving role parity with HTML5. Other non-editorial features and changes should be added here _after they have landed in the ARIA Editor's Draft_. + +## In Progress + +### Combobox value calculation (needs CoreAAM, implementations) +* ARIA: +** Editor's Draft: https://github.com/w3c/aria/commit/51ef35c +** Working Draft: TODO +* Core AAM: https://github.com/w3c/core-aam/issues/76 +** Editor's Draft: TODO +** Working Draft: TODO +* AccName: N/A +* Authoring Practices: https://github.com/w3c/aria-practices/issues/1476 +* WPT: Done (in local branch; merge request pending) +* Implementations: +** WebKit: TODO +** Gecko: TODO +** Blink: TODO +* Test Results: TODO + +### Adds missing implicit values for progressbar (Needs: implementations) +* ARIA: +** Editor's Draft: https://github.com/w3c/aria/commit/43a80b42331351a72992d539ef8a1d8f2a828352 +** Working Draft: TODO +* Core AAM: https://github.com/w3c/core-aam/issues/77 +** Editor's Draft: N/A +** Working Draft: N/A +* AccName: N/A +* Authoring Practices: N/A +* WPT: Done (in local branch; merge request pending) +* Implementations: +** WebKit: TODO (Link to issue until implemented) +** Gecko: TODO (Link to issue until implemented) +** Blink: TODO (Link to issue until implemented) +* Test Results: TODO + +### Name from contents is no longer supported on `rowgroup` (Needs implementations) +* ARIA: +** Editor's Draft: https://github.com/w3c/aria/commit/bc4aa34 +** Working Draft: TODO +* Core AAM: +** Editor's Draft: n/a +** Working Draft: n/a +* AccName: n/a +* Authoring Practices: DONE (https://w3c.github.io/aria-practices/#naming_role_guidance - see "rowgroup" in the table) +* WPT: Done (in local branch; merge request pending) +* Implementations: +** WebKit: TODO (Link to issue until implemented) +** Gecko: TODO (Link to issue until implemented) +** Blink: TODO (Link to issue until implemented) +* Test Results: TODO + +### Default value of aria-valuenow on spinbutton is now "there is no current value" (Needs: Core-AAM, tests, implementations) - at risk +* ARIA: +** Editor's Draft: https://github.com/w3c/aria/commit/d6a99dec +** Working Draft: TODO +* Core AAM: +** Editor's Draft: n/a +** Working Draft: n/a +* AccName: n/a +* Authoring Practices: n/a +* WPT: TODO +* Implementations: +** WebKit: TODO (Link to issue until implemented) +** Gecko: TODO (Link to issue until implemented) +** Blink: TODO (Link to issue until implemented) +* Test Results: TODO + +### Remove aria-level on tablist (Needs Implementations, Needs tests, Editor's note) +* ARIA: +** Editor's Draft: https://github.com/w3c/aria/commit/f391cf62a0609e9d691ebd7df40d0ed9cdb5285b +** Working Draft: TODO +* Core AAM: +** Editor's Draft: n/a +** Working Draft: n/a +* AccName: n/a +* Authoring Practices: n/a +* WPT: TODO +* Implementations: +** WebKit: TODO (Link to issue until implemented) +** Gecko: TODO (Link to issue until implemented) +** Blink: TODO (Link to issue until implemented) +* Test Results: TODO + +### Prohibit aria-roledescription on generic (Needs Implementations) +* ARIA: +** Editor's Draft: https://github.com/w3c/aria/commit/f41f707 +** Working Draft: TODO +* Core AAM: +** Editor's Draft: n/a +** Working Draft: n/a +* AccName: n/a +* Authoring Practices: n/a +* WPT: Done (in local branch; merge request pending) +* Implementations: +** WebKit: TODO (Link to issue until implemented) +** Gecko: TODO (Link to issue until implemented) +** Blink: TODO (Link to issue until implemented) +* Test Results: TODO + + +### Make aria-disabled, aria-errormessage, aria-invalid and aria-haspopup deprecated as globals. + +Adds back to roles as noted in https://github.com/w3c/aria/commit/5b971a1 - make sure to also allow on subclasses during implementation. + +* ARIA: +** Editor's Draft: https://github.com/w3c/aria/commit/5b971a1 +** Working Draft: TODO +* Core AAM: +** Editor's Draft: TODO +** Working Draft: TODO +* AccName: n/a +* Authoring Practices: n/a +* WPT: n/a (right??) +* Implementations: +** WebKit: TODO (Link to issue until implemented) +** Gecko: TODO (Link to issue until implemented) +** Blink: TODO (Link to issue until implemented) +* Test Results: TODO + +### Implicit value removed for aria-expanded on combobox + +### Implicit value removed for aria-level on heading + +### remove superclass of checkbox from menuitemcheckbox & radio from menuitemradio + +### Menuitemradio language change (editorial - needs merging) + +### Editorial + +* 4eed8b541e23e160788e7236d710bd6751f991ee +* 2714fd041862f873fb3ce8a6a82305d74c847f64 + + + + + + +## Done + +* Remove children-presentational=true from `math` role +* Add support for `aria-expanded` for `application` and `checkbox` +* Add support for aria-posinset and aria-setsize on row +* Add support for `aria-required` to `checkbox` and `switch` +* Allow menuitemcheckbox as child of group +* Prohibit label on certain roles + +## Done (modulo APG) + +* Allow group as child of listbox (APG in process) +* Remove accessible name required from log and timer + +## Template for Adding New Items + +The following template should be used for all non-editorial changes which are subject to the ARIA Working Group's https://www.w3.org/WAI/ARIA/workflow[work flow] for inclusion into Working Drafts. + +``` +### Feature/Change Summary +* ARIA: +** Editor's Draft: TODO +** Working Draft: TODO +* Core AAM: +** Editor's Draft: TODO +** Working Draft: TODO +* AccName: TODO +* Authoring Practices: TODO +* WPT: TODO +* Implementations: +** WebKit: TODO +** Gecko: TODO +** Blink: TODO +* Test Results: TODO +``` diff --git a/documentation/archive/1.2/ARIA annotations draft proposal.md b/documentation/archive/1.2/ARIA annotations draft proposal.md new file mode 100644 index 000000000..726fd1bb2 --- /dev/null +++ b/documentation/archive/1.2/ARIA annotations draft proposal.md @@ -0,0 +1,399 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/ARIA-annotations-draft-proposal, last edited Jan 10, 2019. + +# ARIA annotations draft proposal + +# ARIA Annotation use cases, markup and more + + +## Definitions + +Annotations as they relate to ARIA: + +* An _annotation_ is the combination of annotated content and its related annotation body. +* The _annotated content_ is the range of text or other object which the _annotation body_ is "about". Note: [In the Web Annotations Data Model](https://www.w3.org/TR/annotation-model/#motivation-and-purpose), this is known as the _annotation target_. However, because the term "target" has a specific meaning in accessibility APIs as the end (and not beginning) of a relation, the term annotated content is preferred here, in order to avoid confusion with the actual directionality of aria-details in ARIA annotation markup. +* The _annotation body_ is visible information within a page which is connected to annotated content for a related purpose. +* The _annotation purpose_ is the role the _annotation body_ plays in relation to the _annotation target_, e.g. commentary vs. a footnote. + + +## How do ARIA annotations relate to the Web Annotations Data Model? + +ARIA annotations are more limited than what can be expressed in the Web Annotations Data Model. +* They cannot point to information external to the web page +* They must point to additional information within that web the page (e.g. a simple "highlight" does not do this). + +In addition, ARIA annotations do not contain as much information. It only contains what is necessary for the identified use cases. + +For more information, please see the [Addendum on mapping Web Annotations Data Model to accessible web content](#addendum-mapping-from-the-web-annotations-data-model). + +## Web content use cases + + + +* Document editor +* Code editor +* Published content + + +## Assistive technology use cases + +* AT user issues command to navigate to previous/next annotated content (e.g. next commented text) +* AT user issues command to navigate to previous/next annotation body (e.g. next comment) +* AT user issues one of the above commands, but filtered by annotation purpose (e.g. commentary only) +* AT user issues command to navigate from annotation body to the annotated content, or vice-versa +* Screen reader provides viewing options for reading annotation purposes, where the purpose is shortened, e.g. "commentary" becomes "*ct" + +### Proposed Markup + + +* **aria-details** (required, IDREF) + * Goes on the annotated content, and points to the in-page annotation body. + * Example: `This is commented text` + * No specific tag or role is required. However, it may be desirable to prefer `` over a generic element such as `` when there is a visible highlight +* **role** (optional, NMTOKENS) on the annotation body + * Goes on the annotation body, describing the annotation purpose. See below for a list of roles and more details. + * Example: `
`. + * As is always the case, multiple roles are supported: if more than one role is provided then the first recognized role may be mapped through accessibility APIs. The most important or specific role should always go first. For example, `
` would indicate that there is a suggestion with comments, but some APIs may only expose it as a "suggestion". +* **``**/**``** (required for the "revision" and "suggestion" annotation purposes) + * Provided as children of the annotated content, and define a past change or proposed future change to the document. [TBD] @aleventhal: Alternatively, if/when ARIA provides roles for insertion and deletion, the role attribute could be used instead. + * Example: `

Everyone is encouraged to bring a side dishbeverage to share.

.` + * Ordering: the ARIA spec should define whether the order is important for these 1-2 children. I suggest the AT should handle all permutations in the ordering. + +In addition, the following markup may be helpful but is not really part of the annotations spec: + + + +* **aria-label**/**aria-labelledby/aria-describedby** (optional) + * If this is found on the annotation body, it could provides a useful label or description for the annotation, that could be presented by a screen reader in a mode where the user wanted to understand more about the annotation bodies in context but the annotation bodies themselves would be too long. + + +## Roles for annotation purposes + +These go on the annotation body, not the annotated content. + +All annotation- prefixed roles would inherit from an abstract role of "annotation", which would inherit from "structure". If the role is not provided, then the annotation is simply treated as a description, as it would already be via aria-details usage. + + +* **annotation-attribution**— authoring information for the annotated content. [TBD] @mck we may want to choose a better name as this name may ultimately just be used by screen readers and most users might not know what to make of it. [TBD#2] @aleventhal: recommend we make this redundant with annotation-revision, and remove this one. +* **annotation-commentary**— one or more comments, or a comment thread +* **annotation-description** — generic description. This is also the default if the annotation purpose is unspecified. [TBD] @aleventhal: rather than add an extra role here, how about the author simply not use any of the other annotation roles. +* **annotation-revision** — this is a historical change that has already been accepted. The source annotated content will contain 1-2 children for the insertion and/or deletion. +* **annotation-suggestion** — proposed edit. The source annotation will contain 1-2 children for the proposed insertion and/or deletion. +* **annotation-presence** — similar to attribution, but relates to editing that is happening right now. For example, "Mr. Smith is editing nearby". +* **doc-footnote**/**doc-endnote** for footnotes and endnotes. When using DPUB roles, the annotated content will be the referencing note number. The author may choose to leave out the **doc-noteref** role on the annotated content, as that will be exposed as a link to ATs (see DPUB-AAM), and it may not be a link. In addition, the fact that it is a note reference number is implied by the relation with the annotation body, which will have the doc-footnote or doc-endnote role. + +Use the singular form: for consistency, all of the annotation purposes are in the singular form of the word, even though in some cases the plural could have made sense, as in "suggestion" where there may be multiple suggestions. + + +## Rejected annotation purposes + +For now, the following annotation purposes have not been assigned new roles: + + +* **highlight** — this does not fit the proposed definition of an annotation in that it does not point to additional info. Therefore, ARIA WG should consider adding something like role=mark (would need to be added for role parity), or the author can use HTML via // +* **error** — in code in code editor: use the already supported aria-invalid="true" + aria-errormessage=id +* **warning**— in code editor: may want to add aria-invalid="warning" as possible value (and like error, can use aria-errormessage=id) +* **bookmark** — similar to "annotation-presence"; would need more info on this use case in order to support it. [TBD] @aleventhal: Suggest that the author can use `` for a good experience. +* **breakpoint**— does not always come with additional visible information, so it would be difficult to shoehorn into this use case. [TBD] @aleventhal: For this one, perhaps a `` or role="mark" or a new role="breakpoint" could be used, along with aria-label. Or, a visible button could be used on the line with the breakpoint, that is labelled as a breakpoint button. + + +## Platform Accessibility mappings + + + +* [UI Automation has built-in support for annotations](https://docs.microsoft.com/en-us/windows/desktop/winauto/uiauto-annotation-type-identifiers) — note that a perfect 1 to 1 mapping is not expected here. For example, a grammar error is an annotation in UIA, but in ARIA is aria-invalid="grammar". An important difference with UIA annotations is that ARIA annotations always link to visible in-page content. +* Most of the markup is reused — there are already known ways for exposing aria-details, aria-label, aria-labelledby, aria-describedby, `` and ``. +* For aria-annotation, this should be exposed as an object attribute called "annotation" in ATK/IA2 + + + +## Addendum: Mapping from the Web Annotations Data Model + +An important use case is to convert annotation data from the Web Annotations Data Model (typically in JSON format) into accessible content, with the goal of enabling AT support. The following are non-normative suggestions for accomplishing this. + +### Example 1: Describing a relationship to in-page visible content + +Translating a “commenting” motivation in the data model to the appropriate ARIA and HTML markup: + +```html +

The following cats have been deemed uncooperative.

+
+

Comment by Ruff Finkledog

+

Wouldn’t it be simpler to list the cooperative cats?

+
+``` + +### Example 2: Describing a Web Annotation that does not have a relationship to other content + +This example is useful for the "highlighting" motivation. + +```html +

The word cat is highlighted

+``` + +### Example 3: Describing a Web Annotation that is related to external content only + +This example is useful for the "identifying" motivation. + +```html +

A cat is one of our favorite quirky pets.

+``` + +### Proposed Mapping Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Web Annotations Data Model Concept

+
+

Proposed  additional markup on annotation

+
+

Proposed markup on annotated content

+
+

Description

+
+

Assessing motivation

+
+

role=”annotation-commentary”

+
+

aria-details=[id]

+
+

The motivation for when the user intends to assess the target resource in some way, rather than simply make a comment about it. For example to write a review or assessment of a book, assess the quality of a dataset, or provide an assessment of a student's work.

+
+

Bookmarking motivation

+
+

none

+
+

aria-details=[id]

+
+

The motivation for when the user intends to create a bookmark to the Target or part thereof. For example an Annotation that bookmarks the point in a text where the reader finished reading.

+
+

Classifying motivation

+
+

role=”annotation-description”

+
+

aria-details=[id] (if classifications visible in page)

+
+

The motivation for when the user intends to classify the Target as something. For example to classify an image as a portrait.

+
+

Commenting motivation

+
+

role=”annotation-commentary”

+
+

aria-details=[id]

+
+

The motivation for when the user intends to comment about the Target. For example to provide a commentary about a particular PDF document.

+
+

Describing motivation

+
+

role=”annotation-description”

+
+

aria-details=[id]

+
+

The motivation for when the user intends to describe the Target, as opposed to (for example) a comment about it. For example describing the above PDF's contents, rather than commenting on their accuracy.

+
+

Editing motivation

+
+

role=”annotation-suggestion”

+
+

aria-details=[id]

+

Must also have <ins>, <del> child or both

+
+

The motivation for when the user intends to request a change or edit to the Target resource. For example an Annotation that requests a typo to be corrected.

+
+

Highlighting motivation

+
+

none

+
+

Use <mark> or appropriate ARIA role from role parity work once available

+
+

The motivation for when the user intends to highlight the Target resource or segment of it. For example to draw attention to the selected text that the annotator disagrees with.

+
+

Identifying motivation

+
+

none

+
+

<a href=[IRI]>external link</a>

+
+

The motivation for when the user intends to assign an identity to the Target. For example to associate the IRI that identifies a city with a mention of the city in a web page.

+
+

Linking motivation

+
+

none

+
+

aria-details=[id]

+
+

The motivation for when the user intends to link to a resource related to the Target.

+
+

Moderating motivation

+
+

role=”annotation-commentary”

+
+

aria-details=[id]

+
+

The motivation for when the user intends to assign some value or quality to the Target. For example annotating an Annotation to moderate it up in a trust network or threaded discussion.

+
+

Questioning motivation

+
+

role=”annotation-commentary”

+
+

aria-details=[id]

+
+

The motivation for when the user intends to ask a question about the Target. For example, to ask for assistance with a particular section of text, or question its veracity.

+
+

Replying motivation

+
+

role=”annotation-commentary”

+
+

aria-details=[id]

+
+

The motivation for when the user intends to reply to a previous statement, either an Annotation or another resource. For example providing the assistance requested in the above.

+
+

Tagging motivation

+
+

role=”note”, e.g. <div role=”note”>Tags: cats, pets</div>

+
+

aria-details=[id] (if tags are visible in content)

+
+

The motivation for when the user intends to associate a tag with the Target.

+
+

Attribution from provenance chunk

+
+

role=”annotation-attribution”

+
+

aria-details=[id] (if attribution is visible in content)

+
+

Authoring information for the annotated content

+
+

Does not currently exist in Web Annotations Data Model

+
+

role=”annotation-revision”

+
+

aria-details=[id]

+

Must also have <ins>, <del>; child or both

+
+

This is a historical change that has already been accepted. The source annotated content will contain 1-2 children for the insertion and/or deletion

+
+

Does not currently exist in Web Annotations Data Model

+
+

role=”annotation-presence”

+
+

aria-details=[id]

+
+ +
+

Does not currently exist in Web Annotations Data Model

+
+

role=”doc-footnote” | “doc-endnote” | “doc-biblioentry”

+
+

aria-details

+
+

In-page links for footnotes, endnotes, bibliographical information in a document

+
diff --git a/documentation/archive/1.2/Generic Role End to End.md b/documentation/archive/1.2/Generic Role End to End.md new file mode 100644 index 000000000..f60990df6 --- /dev/null +++ b/documentation/archive/1.2/Generic Role End to End.md @@ -0,0 +1,234 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/Generic-Role-End-to-End, last edited May 23, 2019. + +# Generic Role End to End + +## Current DIV Mapping + + +
WAI-ARIANo corresponding role
MSAA + IAccessible2 +
+ May not have an accessible object if has no semantic meaning. Otherwise, +
+
+ Roles: ROLE_SYSTEM_GROUPING; IA2_ROLE_SECTION +
+
+ Interfaces: + IAccessibleText2; IAccessibleHypertext2; +
+
UIA +
+ May not have an accessible object if has no semantic meaning. Otherwise, +
+
Control Type: Group
+
ATK +
+ May not have an accessible object if has no semantic meaning. Otherwise +
+
+ Role: + ATK_ROLE_SECTION +
+
+ Interfaces: AtkText; AtkHypertext +
+
AX +
+ AXRole: AXGroup +
+
+ AXSubrole: (nil) +
+
+ AXRoleDescription: "group" +
+
Comments
+ +## Current SPAN Mapping + +
span
WAI-ARIANo corresponding role
MSAA + IAccessible2
Not mapped
UIA +
+ Control Type: Group +
+
ATK
Not mapped
AX +
+ AXRole: AXGroup +
+
+ AXSubrole: (nil) +
+
+ AXRoleDescription: "group" +
+
Comments
+ +### Actual Mapping today +The above is sometimes true but is dependent on the CSS applied to the DIV or SPAN +inline -> acts like SPAN +block -> acts like DIV + +Other CSS display styles to be evaluated. + + + + +## Proposed Generic Role + +### generic (role) + +A nameless container element that has no semantic meaning on its own, but can provide accessible states and properties for its descendants. + +Contrast with group, which semantically groups its descendants in a named container. + +The aria-textseparation attribute of a generic indicates how its text content is separated from adjacent text content of adjacent generic elements. + +Characteristics: + +Superclass Role: structure + +Related Concepts: HTML div, HTML span + +Supported States and Properties: aria-textseparation + +Inherited States and Properties: + aria-atomic + aria-busy (state) + aria-controls + aria-current (state) + aria-describedby + aria-details + aria-disabled (state) + aria-dropeffect + aria-errormessage + aria-flowto + aria-grabbed (state) + aria-haspopup + aria-hidden (state) + aria-invalid (state) + aria-keyshortcuts + aria-label? + aria-labelledby? + aria-live + aria-owns + aria-relevant + aria-roledescription + +Name From: contents none? undefined? prohibited? N/A (i.e. not in table)? + + +*** + + +### aria-textseparation (property) + +Defines how text content of a generic element is separated from text content of adjacent generic elements. + +Specifically, aria-textseparation only applies to text nodes at the boundaries of a generic; it has no effect on separation between text nodes inside the generic, or on other types of elements. + +The value of the aria-textseparation property is a token list of size 1 or 2. The first value represents the type of text separation before the element, and the second value represents the type of text separation after the element. If a single value is given, it represents the type of text separation before and after the element. Any value not recognized in the list of allowed tokens SHOULD be treated by assistive technologies as if the default value style had been provided. If the attribute is not present or its value is an empty string or undefined, the default value of style applies. + +For example, if the badge class in the following markup renders a circle around the "12" so that it is visually separated from the word "Notifications", then aria-textseparation="style space" ensures that AT render a space between the spans. + +EXAMPLE +``` + + Notifications12 + +``` + +NOTE +If adjacent generics have space separation, spaces will be collapsed to a single space. + +NOTE +In the event of conflicting text separation between adjacent generics, paragraphbreak has precedence over linebreak, which has precedence over space, which has precedence over none, which has precedence over style. + +Characteristics: + +Related Concepts: String concatenation, text content, CSS rendering + +Used in Roles: generic + +Value: token list + +style (default) Indicates that the element's text is separated from neighboring element text according to the element's display style. + +linebreak Indicates that the element's text is separated from neighboring element text by a line break. + +none Indicates that the element's text is not separated from neighboring element text; it is rendered as a continuous whole, without any delineation. + +paragraphbreak Indicates that the element's text is separated from neighboring element text by a paragraph break. + +space Indicates that the element's text is separated from neighboring element text by a space. + + +### Proposed mapping of generic + +Generic + style -> acts like Div & Span today - depends on CSS applied for mapping + +Generic + linebreak -> like DIV + +generic + none -> like SPAN + +generic + paragraphbreak -> like DIV (do we need this?) + +generic + space - > like SPAN but add a space in the ACCNAME calculation + +### Naming DIV/SPAN/generic + +https://github.com/w3c/aria/issues/833 + +Proposal - remove aria-label,labelledby from global states and properties. +Add to widget, window, application, landmark, document, list, figure, group, img, range, table, tabpanel + +Following non-abstract roles are no longer labelable - note we can add some of these if we decide to. +* alert +* blockquote +* caption +* cell +* definition (** This needs to be added - should we allow ONLY aria-labelledby?) +* deletion +* heading +* insertion +* label +* legend +* listitem +* log +* marquee +* math?? +* none +* note +* paragraph +* presentation +* rowgroup +* status +* subscript +* superscript +* term +* time +* timer +* tooltip + + +Note - this change has a **major** impact to role presentation conflict resolution section. +Prior to this change +``` +
    +... +
+``` +Would be exposed as a list. After this change it would NOT be exposed as a list. +We need to check browser implementations of this. + +Other Questions +is aria-describedby the same or should that be left as global? +See: https://w3c.github.io/using-aria/#label-support + +Heading states the following: +> Often, heading elements will be referenced with the aria-labelledby attribute of the section for which they serve as a heading. If headings are organized into a logical outline, the aria-level attribute is used to indicate the nesting level. + +This implies that sections should be labelled and should be changed + +Branch created with these changes +https://raw.githack.com/w3c/aria/NonGlobalLabelLabelledBy/index.html#roles +Draft PR https://github.com/w3c/aria/pull/967 + diff --git a/documentation/archive/1.2/Plans regarding role parity.md b/documentation/archive/1.2/Plans regarding role parity.md new file mode 100644 index 000000000..44215d9cd --- /dev/null +++ b/documentation/archive/1.2/Plans regarding role parity.md @@ -0,0 +1,165 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/Plans-regarding-role-parity, last edited Apr 1, 2022. + +# Plans regarding role parity + +## Parity not planned + +These elements are not mapped and thus no parity is planned for them: `base`, `body`, `br`, `col`, `colgroup`, `data`, `head`, `html` `input` (`type=hidden`), `link`, `map` (when used as an imagemap), `meta`, `noscript`, `param`, `picture`, `script`, `source`, `style`, `template`, `title`, `track`, `wbr`. + +These elements are currently a WONTFIX due to an inability to achieve proper, accessible parity: `audio`, `video`. + +## Parity Achieved in ARIA <= 1.2 + +These ARIA roles provide parity for the elements listed. + +* `article`: `article` +* `blockquote`: `blockquote` +* `button`: `button`, `input` (`type` is `button`, `image`, `reset`, `submit`) +* `caption`: `caption`, `figcaption` +* `cell`: `td` and `th` (in a `table` that is not a `grid`) +* `checkbox`: `input` (`type` is `checkbox`, parent is not `menu`) +* `code`: `code` +* `columnheader`: `th` (when it is a column header) +* `combobox`: `input` (`type` is `text`, `email`, `search`, `telephone`, `url` with suggestions source element) (https://github.com/w3c/aria/issues/962[An additional attribute may be created in 1.3]) +* `definition`: `dd` +* `deletion`: `del` +* `dialog`: `dialog` +* `emphasis`: `em` +* `figure`: `figure` +* `form`: `form` (with an accessible name) +* `generic` (with no additional attribute): `div`, `span`, `cite`, `footer` and `header` (not scoped to `body`), `form` and `section` (without accessible name), `tfoot`, `thead`, `details` +* `generic` (https://github.com/w3c/aria/issues/960[an additional attribute may be created in 1.3]): `abbr`, `address`, `b`, `i`, `kbd`, `mark`, `pre`, `q`, `s`, `samp`, `small`, `u`, `var` +* `gridcell`: `td` and `th` (in a `table` that is a `grid`) +* `group`: `optgroup` +* `heading`: `h1`, `h2`, `h3`, `h4`, `h5`, `h6` +* `img`: `img`, `area` (no `href`) +* `insertion`: `ins` +* `link`: `a` and `area` (when they represent a hyperlink) +* `list`: `ol` and `ul` (https://github.com/w3c/aria/issues/961[an additional attribute may be created in 1.3]) +* `listitem`: `li` (parent is `ol` or `ul`) +* `listbox`: `datalist` (when represents pre-defined options for input element), `keygen`, `select` (with `multiple` attribute or `size` > 1) +* `main`: `main` +* `math`: `math` +* `menuitem`: `a` (when it represents a hyperlink and parent is a `menu`), `input` (`type` is `button` or `image`, parent is `menu`), `menu` (`type` is `context`), `menuitem` (`type` is `command`) +* `menuitemcheckbox`: `input` (`type` is `checkbox`, parent is `menu`), `menuitem` (`type` is `checkbox`) +* `menuitemradio`: `input` (`type` is `radio`, parent is `menu`), `menuitem` (`type` is `radio`) +* `meter`: `meter` +* `navigation`: `nav` +* `none`/`presentation`: `img` (empty alt value) +* `option`: `option` (in a list of options or represents a suggestion in a `datalist`) +* `paragraph`: `p` +* `progressbar`: `progress` +* `radio`: `input` (`type` is `radio`, parent is not `menu`) +* `region`: `section` (with accessible name) +* `rowgroup`: `tbody` +* `rowheader`: `th` (when it is a row header) +* `separator`: `hr` +* `searchbox`: `input` (`type` is `search`, no suggestions source element) +* `slider`: `input` (`type` is `range`) +* `spinbutton`: `input` (`type` is `number`) +* `status`: `output` (Is this sufficient for all of output's potential semantics?) +* `strong`: `strong` +* `subscript`: `sub` +* `summary`: `button` role with `aria-expanded` +* `superscript`: `sup` +* `table`: `table` +* `textbox`: `input` (`type` is `text`, `email`, `search`, `telephone`, `url` and no suggestions source element) (https://github.com/w3c/aria/issues/962[An additional attribute may be created in 1.3]) +* `textbox` + `aria-multiline` is `true`: `textarea` +* `term`: `dfn` +* `time`: `time` + +## Originally planned but moved out of 1.2, potentially to 1.3 + +### `label` - `label` role (Needs: APG, AccName, 2 implementations) + +* ARIA: +** Editor's Draft: https://github.com/w3c/aria/commit/78b9178 +** Working Draft: TODO +* Core AAM: +** Editor's Draft: https://github.com/w3c/core-aam/commit/8691f89 +** Working Draft: TODO +* AccName: https://github.com/w3c/accname/issues/54 +* Authoring Practices: https://github.com/w3c/aria-practices/issues/1108 +* WPT: TODO +* Implementations: +** WebKit: TODO +** Gecko: TODO +** Blink: TODO +* Results: TODO + +### `fieldset`, `legend` - `legend` role (Needs: APG, AccName, 2 implementations) +* ARIA: +** Editor's Draft: https://github.com/w3c/aria/commit/71d5024 (plus a https://github.com/w3c/aria/commit/8194d29[typo fix]) +** Working Draft: TODO +* Core AAM: +** Editor's Draft: https://github.com/w3c/core-aam/commit/a5f1673 +** Working Draft: TODO +* AccName: https://github.com/w3c/accname/issues/54 +* Authoring Practices: https://github.com/w3c/aria-practices/issues/1108 +* WPT: TODO +* Implementations: +** WebKit: TODO +** Gecko: TODO +** Blink: TODO +* Results: TODO + +### `dl`, `dt`, `dd` - `associationlist`, `associationlistitemkey`, `associationlistitemvalue` roles (Needs: Core-AAM, 2 implementations) +* ARIA: +** Editor's Draft: https://github.com/w3c/aria/commit/b371203c +** Working Draft: TODO +* Core AAM: +** Editor's Draft: https://github.com/w3c/core-aam/issues/56 +** Working Draft: TODO +* AccName: TODO +* Authoring Practices: Done (https://github.com/w3c/aria-practices/issues/1106) +* WPT: TODO +* Implementations: +** WebKit: TODO +** Gecko: TODO +** Blink: TODO +* Results: TODO + +## TODO - 1.3 + +See also: https://github.com/w3c/aria/projects/8 + +* a (no href) - triage needed +* bdi - triage needed +* bdo - triage needed +* canvas (https://github.com/w3c/aria/issues/927[#927]) +* embed, object (https://github.com/w3c/aria/issues/929[#929]) - Assigned to Scott +* iframe (https://github.com/w3c/aria/issues/879[#879]) - Assigned to Peter +* input (type=color) (https://github.com/w3c/aria/issues/930[#930]) +* input (type=date) (https://github.com/w3c/aria/issues/931[#931]) +* input (type=datetime-local) (https://github.com/w3c/aria/issues/932[#932]) +* input (type=file) (https://github.com/w3c/aria/issues/933[#933]) +* input (type=month) (https://github.com/w3c/aria/issues/934[#934]) +* input (type=password) (https://github.com/w3c/aria/issues/935[#935]) +* input (type=time) (https://github.com/w3c/aria/issues/936[#936]) +* input (type=week) (https://github.com/w3c/aria/issues/937[#937]) +* rp, rt, ruby (also check with i18n) (https://github.com/w3c/aria/issues/488[#488]) +* aria-textattribute for role parity with generic (https://github.com/w3c/aria/issues/960[#960]) +* aria-listtype for role parity with ul and ol (https://github.com/w3c/aria/issues/961[#961]) - Assigned to Harris +* aria-inputtype for role parity (https://github.com/w3c/aria/issues/962[#962]) + +## Template for Adding New Items + +The following template should be used for all items whose role parity is being achieved by an addition to ARIA: + +``` +### $HTML_ELEMENT - $NEW_ROLE role +* ARIA: +** Editor's Draft: TODO +** Working Draft: TODO +* Core AAM: +** Editor's Draft: TODO +** Working Draft: TODO +* AccName: TODO +* Authoring Practices: TODO +* WPT: TODO +* Implementations: +** WebKit: TODO +** Gecko: TODO +** Blink: TODO +* Results: TODO +``` diff --git a/documentation/archive/1.2/Required Properties with Default Values.md b/documentation/archive/1.2/Required Properties with Default Values.md new file mode 100644 index 000000000..25c58ada7 --- /dev/null +++ b/documentation/archive/1.2/Required Properties with Default Values.md @@ -0,0 +1,32 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/Required-Properties-with-Default-Values, last edited Sep 28, 2018. + +# Required Properties with Default Values + +For issue #787 this is a list of all required properties that have default values defined + +Moved meta comment back into https://github.com/w3c/aria/issues/787 so that discussion can take place. + +Role | State/Property | Current Default Value | Notes +--- | --- | --- | --- +[checkbox](http://w3c.github.io/aria/#checkbox) | aria-checked | false | Required. Default in [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable) only. +[combobox](http://w3c.github.io/aria/#combobox) | aria-expanded | false | Required. Default in [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable) only. +[heading](http://w3c.github.io/aria/#heading) | aria-level | 2 | Required. Default in [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable) only. +[menuitemcheckbox](http://w3c.github.io/aria/#menuitemcheckbox) | aria-checked | false | Required. Default in [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable) only. +[menuitemradio](http://w3c.github.io/aria/#menuitemradio) | aria-checked | false | Required. Default in [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable) only. +[option](http://w3c.github.io/aria/#option) | aria-selected | false | Supported. No default. [PR #799](https://github.com/w3c/aria/pull/799) +[radio](http://w3c.github.io/aria/#radio) | aria-checked | false | Required. Default in [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable) only. +[scrollbar](http://w3c.github.io/aria/#scrollbar) | aria-orientation | vertical | Supported. Default in ARIA and [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable). +scrollbar | aria-valuemin | 0 | Supported. Default in ARIA and [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable). +scrollbar | aria-valuemax | 100 | Supported. Default in ARIA and [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable). +scrollbar | aria-valuenow | halfway between valuemax and valuemin | Required. Default in [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable) only. **Consider changing default value to aria-valuemin.** +[separator (focusable)](http://w3c.github.io/aria/#separator) | aria-valuemin | 0 | Supported. Default in ARIA and needs to be added to [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable). +separator (focusable) | aria-valuemax | 100 | Supported. Default in ARIA and needs to be added to [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable). +separator (focusable) | aria-valuenow | 50 | Required. Default needs to be removed from ARIA and added to [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable) as "(aria-valuemax - aria-valuemin) / 2". +[slider](http://w3c.github.io/aria/#slider) | aria-valuemin | 0 | Supported. Default in ARIA and [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable). +slider | aria-valuemax | 100 | Supported. Default in ARIA and [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable). +slider | aria-valuenow | halfway between valuemax and valuemin | Required. Default in [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable) only. +[spinbutton](http://w3c.github.io/aria/#spinbutton) | aria-valuemin | no minimum value | Supported. Default in ARIA and [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable). +spinbutton | aria-valuemax | no maximum value | Supported. Default in ARIA and [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable). +spinbutton | aria-valuenow | 0 | Supported. Default in ARIA and [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable). **Consider changing default value to empty.** See [#797](https://github.com/w3c/aria/issues/797) and [PR#813](https://github.com/w3c/aria/pull/813). +[switch](http://w3c.github.io/aria/#switch) | aria-checked | false | Required. Default in [Core AAM Default Values Table](https://w3c.github.io/core-aam/#authorErrorDefaultValuesTable) only. +[treeitem](http://w3c.github.io/aria/#treeitem) | aria-selected | false | Supported. No default. [PR #799](https://github.com/w3c/aria/pull/799) diff --git a/documentation/archive/1.2/Resolving ARIA 1.1 Combobox Issues.md b/documentation/archive/1.2/Resolving ARIA 1.1 Combobox Issues.md new file mode 100644 index 000000000..cb465a6b8 --- /dev/null +++ b/documentation/archive/1.2/Resolving ARIA 1.1 Combobox Issues.md @@ -0,0 +1,228 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/Resolving-ARIA-1.1-Combobox-Issues, last edited Jul 20, 2023. + +# Resolving ARIA 1.1 Combobox Issues + +## Goal + +resolve all open combobox-related issues in ARIA 1.2. + +## Terms for describing ARIA 1.1 combobox structure + +First, here are some terms to make describing problems easier. + +The ARIA 1.1 combobox has 3 primary parts: +1. Input: This is an element that conveys the value of the combobox. ARIA 1.1 requires it to be a textbox. +2. Popup: This is a single-select widget that presents a collection of values the user may choose for the input. The popup is displayed when the combobox is expanded and hidden when the combobox is collapsed. ARIA 1.1 allows the popup to be a listbox, grid, tree, or dialog. +3. Container: a wrapper `div` that has role `combobox` and contains or owns the input and the popup. + +Many comboboxes also have a down arrow icon or button that serves as a control for display of the popup for mouse and touch users. That button is not part of the definition of the combobox. If it is inside the container, the authoring practices advise excluding it from the page tab sequence. + +Combobox example from ARIA 1.1: + +``` +
+ +
+
    +
  • Zebra
  • +
  • Zoom
  • +
+``` + +You can view an [example of an ARIA 1.1 combobox here](https://www.w3.org/TR/2019/NOTE-wai-aria-practices-1.1-20190814/examples/combobox/aria1.1pattern/listbox-combo.html). + +## ARIA 1.0 Combobox Problem + +To understand the ARIA 1.1 combobox issues, it is helpful to first understand what problems we experienced with the ARIA 1.0 combobox. + +ARIA 1.0 specifies two parts for the combobox -- the input and the popup. ARIA 1.0 says authors should specify the relationship between the input and the popup with `aria-owns`. + +``` + + +
    +
  • Zebra
  • +
  • Zoom
  • +
+``` + +You can view an [example of the ARIA 1.0 combobox here](https://www.w3.org/TR/2019/NOTE-wai-aria-practices-1.1-20190814/examples/combobox/aria1.0pattern/combobox-autocomplete-both.html). + +Because the input-popup relationship is specified with `aria-owns` in an ARIA 1.0 combobox, in accessibility trees, the popup is a child of the input. In other words, The accessibility tree for an ARIA 1.0 combobox has a textbox with a listbox inside of it. While the role of the textbox is `combobox`, it still functions as a textbox where users can edit text. In a sense, an ARIA 1.0 combobox input is also a container. + +Of course, on the screen, the textbox input and listbox popup are two separate things. So, the accessibility tree for an ARIA 1.0 combobox does not accurately represent the semantics of the user interface. + +This creates problems for screen reader users when using reading or touch modes. They cannot perceive a popup inside of an edit field. The popup is simply not present in the reading order. This is because a textbox cannot serve both as an edit field and a container for other widgets. A textbox supports editable text. The popup for a combobox is not editable text. It is not even part of the value; the popup is a separate widget that helps the user choose a value to put into the textbox. + +That is, instead of perceiving a textbox input with a listbox next to it, which is what sighted users perceive, people using a screen reader in reading or touch modes can only perceive an element called a combobox that acts like a textbox. The only way screen reader users can perceive the content of the popup in an ARIA 1.0 combobox is via keyboard navigation with the screen reader in interaction mode, e.g., JAWS forms mode. + +This structural issue that put a popup widget inside of a text field and thereby severely limited perception of the popup was the primary driver of changes to the ARIA 1.0 combobox. + +## ARIA 1.1 problems + +As described above, ARIA 1.1 specifies the combobox structure to be a combobox composite container with two widgets inside -- an input and a popup. The addition of the container element fixed the problem of the popup being inside the input. But, unfortunately, it has created many other issues. + +More detail is provided about each of the following problems in sections below. Each of these problems has spawned multiple issues against the ARIA spec. + +1. Naming: In code, there are 3 parts that can be named -- the combobox, the input, and the popup. On the screen, there is only one thing rendered that needs an accessible name -- the input. The spec says to name only the container. But, the spec does not require the browser to compute a name for the input from the container, which leads to an unlabeled input fieled, violating WCAG. Thus, authors tend to name all three parts, which creates verbosity problems that are difficult for screen reader developers to mitigate. +2. Screen reader presentation of the container: The container is sometimes being partially rendered by screen readers as a group. This adds elements to the screen reader experience that do not exist on screen and do not add value. In fact, it can be confusing for screen reader users because these extra grouping elements have never previously been part of how screen readers present comboboxes. +3. Screen reader presentation of the input: The ARIA spec says the wrapper has the `combobox` role but does not state what the role of the input should be. This is critical because the input is what gets focused. The spec needs to tell screen readers how the input should be conveyed to users. +4. Lack of `select` support: There is a type of combobox that does not include a textbox. HTML:select@size=1 is one example of this. This type of control cannot be created using the ARIA 1.1 combobox definition. +5. Author confusion: Because the container does not correspond to anything displayed on screen, it is difficult for authors to understand which ARIA attributes belong on the container and which belong on the input. As a result, author errors that cause problems for screen reader developers are a significant problem. + +## ARIA 1.2 Proposal to eliminate container + +One way to fix all these problems is to eliminate the container and make the combobox more like a menubutton. This is essentially returning to the 1.0 pattern with one small modification -- use `aria-controls` to specify the input-popup relationship instead of `aria-owns`. + +``` + + + +``` + +You can view an [example implementation of the proposed ARIA 1.2 combobox here](https://raw.githack.com/w3c/aria-practices/aria1.2-combobox-proposal/examples/combobox/combobox-autocomplete-list.html). +The proposed specification changes are in [ARIA pull request 1051](https://github.com/w3c/aria/pull/1051). + +In this proposal, the combobox has only one part -- the input. The popup is a related widget but is not technically part of the combobox. This is analogous to a menu button. The button controls the menu, and the menu itself is not part of the button. + +Semantically, this matches what is on the screen. There is an input element that displays a value. In some cases, that input is an edit field where users can type a value and typing may or may not open a popup that suggests possible values for the input. In other cases, the input is not an edit field; users must open the popup to change its value. + +How does this proposal fix the problems? + +1. Naming: There is only one thing that can be named. While it would be technically possible to name the popup, naming the popup would have no impact on the combobox itself. +2. Screen reader presentation of the container: Since there is no container, there is no chance that screen readers will render superfluous group elements that clutter the interface. +3. Screen reader presentation of the input: The input is unambiguously a combobox; it has role combobox. +4. No `select` support: The `input` in the above code can be replaced with a `div` or `span` whose content displays the current value. This exactly replicates the functionality of combobox widgets that do not have a textbox. +5. Author confusion: There is only one place to put all attributes. There is no room for confusion about where to put required states and properties. + +The best part of this proposal to eliminate the container is that it is already functional using any screen reader on any desktop platform. There is no need for modification to current screen reader or browser implementations. It even enables access to popup elements that are grids, trees, and dialogs without additional work by screen reader developers. + +The ARIA 1.1 pattern is not yet fully functional with any screen reader on any platform. +If this proposal to eliminate the container is not adopted in ARIA 1.2, other changes would need to be made to the ARIA specification to resolve the problems with the ARIA 1.1 pattern before screen reader developers can make comboboxes reliably functional. + +## Alternative resolution paths + +The following sections explore alternative approaches to resolving the 5 issues with the ARIA 1.1 combobox. +That is, if ARIA 1.2 keeps the combobox container, these sections attempt to answer the question of how ARIA 1.2 might otherwise resolve the above 5 problems. + +### Resolving issues with naming an ARIA 1.1 combobox + +There are two critical questions: +1. Should authors be required to name the container or the input? +2. Should authors be allowed to name both the container and the input? + +From the perspective of screen reader users, the second question is easy to answer. Only one name is necessary. Multiple names for a single widget do not add clarity for assistive technology users. + +There is only one name on the screen. That is the name that needs to be conveyed to assistive technology users. + +Because a collapsed combobox is a single element, and expanding a combobox reveals only a single adjacent element, a distinctly named grouping element is not helpful. In this way, a combobox is similar to a menu button and completely dissimilar from composites, such as radio group, menubar, and grid. + +Regardless of where authors specify the name, they do not need to specify names for both the container and the input. If they do, one should take precedence over the other. + +Currently the spec requires a name on the container. ARIA 1.1 does not clearly specify whether a name is required on the input. The textbox role requires a name. However, when a textbox is inside of a combobox, it is not clear whether or not it is still a textbox; it should probably be considered a combo edit box. + +ARIA 1.1 does not require browsers to calculate a name for the input from the container. + +An alternative approach to resolving naming problems is to: +1. Prohibit naming of the combobox container. +2. Require authors to name the input; this is already required if the input is a textbox. + +### Resolving problems with Screen reader presentation of ARIA 1.1 combobox containers + +While the container in the ARIA 1.1 combobox specification is a coding construct for ensuring the popup is adjacent to the input in the reading order, exposing the container itself does not add semantic value for assistive technology users. +Ideal reading order can be achieved without a container that has a semantic role. + +Arguably, exposing the container to screen reader users detracts from the screen reader experience by adding verbosity that does not serve an important purpose. +A collapsed combobox is a single input element; it does not need any type of grouping. +An expanded combobox renders only two elements that are intrinsically related by context, and potentially by name. +This is similar to other ARIA widgets that conditionally display a secondary element, such as disclosures and menu buttons. +Those patterns do not superimpose a semantic grouping container; doing so would add authoring complexity without improving the experience for end users. + +If ARIA 1.2 does not eliminate the container from the combobox specification, then it could help resolve this problem by adding a normative statement that says assistive technologies SHOULD NOT expose the container to users. This would align with prohibitting accessible names on the container. + +### Resolving problems with Screen reader presentation of ARIA 1.1 combobox input + +The ARIA spec says the wrapper has role `combobox`. And, it requires the input to be a textbox. When a screen reader reads the textbox, what should the screen reader convey for the role of the textbox? The computed role is simply textbox. + +Historically, screen readers announce the input as a combobox if it does not support editable text and a combo edit box if it supports editable text. Screen readers could look up the tree for all single-line edit fields to assess whether or not to announce them as a combo edit box. While feasible, this is inconsistent with the rest of ARIA. In other composites, the role of a composite ancestor does not change the role of the element with focus. + +Alternatively, another valid screen reader behavior would be to convey the textbox as a textbox and not expose the combobox role to end users. Instead, the screen reader could announce the availability of specific behaviors, such as auto completion and value suggestions. + +In practice, screen readers need to convey a role but are not bound to the ARIA lexicon. ARIA does not prescribe screen reader rendering. + +Nonetheless, a valid concern is that the ARIA 1.1 combobox definition and structure create ambiguity for screen reader developers. This increases the likelihood that multiple screen readers running on the same platform and in the same browser will render the same combobox in meaningfully different ways. While it is expressly not the goal of ARIA to dictate assistive technology experiences, it is not helpful to authors or end users when ARIA needlessly promotes variation. + +If ARIA 1.2 were to keep the container element, then one way of promoting consistency would be to add a role for the textbox, e.g., comboboxinput. This would be consistent with the structure of other composite widgets, e.g., a `menu` contains `menuitem` elements, a `radiogroup` includes `radio` elements, and a `grid` contains `gridcell` elements. + +### Resolving lack of `select` support + +There is a type of combobox that does not include a textbox. HTML:select@size=1 is one example of this. This is an input that has an associated drop down list. The value of the input must be chosen from the list. The input itself does not support editable text. + +This type of widget cannot be created using the ARIA 1.1 combobox pattern. It is possible to create a similar widget by adding `readonly` to an `input@type="text"` in a `combobox`, but that method of implementation is limiting for authors and troublesome for users. + +Ideally, authors would be able to create a widget that is semantically identical to an HTML select. They could use an element for the input that they can style any way they like and that is not treated by screen readers as a text field. For example, they could use a `span` or `div` for the input as follows: + +``` +
+ Zoom +
+
    +
  • Zebra
  • +
  • Zoom
  • +
+``` + +In this case, the `span` with `aria-autocomplete` is the input element that displays the current value. When it receives focus, it should be announced as a `combobox`. + +One significant problem with this pattern is that the focusable element does not have a role. + +If ARIA 1.2 were to keep the container element, then one possible solution is to add the above suggested "comboboxinput" role. The specification could advise screen readers to render elements with role `comboboxinput` as `combobox`. + +### Reducing author Confusion + +The ARIA 1.1 combobox pattern is relatively complex due to the fact that there are two places to place relevant attributes -- the container and the input. +This has been a source of author errors. +At least one screen reader developer is identifying such errors as a significant concern. + +Short of eliminating the container, there is no clear way to mitigate this other than to encourage browsers to correct author errors when populating the accessibility tree. Of course, checkers can help prevent the errors from getting out in the wild. But, that will not remove the necessaty of robust error correction. + +## Summary of resolution options + +* Option 1: Remove the container and change combobox from composite to input -- [See pull request 1051](https://github.com/w3c/aria/pull/1051). +* Option 2: + * Add a role for the input, e.g., comboboxinput. + * Require a name on elements with role comboboxinput. + * Advise screen readers to present elements with role `comboboxinput` as `combobox`. + * Prohibit naming the container. + * Add a normative statement that says assistive technologies SHOULD NOT expose the container to users. + * Advise user agents to align the accessibility tree with the combobox pattern when authors misplace required or supported attributes. + +## Responses to other objections to removing the container + +One objection to making yet another change is that it will create churn for authors. +In practice, we have seen very little use of the ARIA 1.1 pattern because it does not work well with assistive technologies. +In addition, converting the 1.1 pattern to match the 1.2 proposal is very simple: move the combobox role, `aria-expanded`, and the accessible name from the container to the input. + +## Related GitHub issues + +### aria-controls vs aria-owns +* [998: Combobox 1.0 pattern incorrectly includes aria-owns instead of aria-controls](https://github.com/w3c/aria/issues/998) +* [776: aria-controls a required property for Combobox?](https://github.com/w3c/aria/issues/776) +* [716: aria-controls or owns should be on input, not on combobox element](https://github.com/w3c/aria/issues/716) +### Naming +* [893: 1.1 Combobox pattern endorses unlabelled form fields](https://github.com/w3c/aria/issues/893) +* [909: Clarify combobox label placement](https://github.com/w3c/aria/issues/909) +* [1046: Does combobox require an accessible name?](https://github.com/w3c/aria/issues/1046) +### Other inconsistencies +* 853: Combobox has aria-expanded required, but there is a default value +* 742: combobox incorrect regarding searchbox? +### HTML select +* 817: Update combobox spec as per html spec +* w3c/html-aam#46: select should map to listbox regardless of presentation +* 721: Add aria-valuetext to listbox +* 722: Add aria-expanded to listbox diff --git a/documentation/archive/1.2/Testing aria-hidden.md b/documentation/archive/1.2/Testing aria-hidden.md new file mode 100644 index 000000000..cb27960f5 --- /dev/null +++ b/documentation/archive/1.2/Testing aria-hidden.md @@ -0,0 +1,44 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/Testing-aria-hidden, last edited May 8, 2020. + +#### Notes: +This is a refresh of [@stevefaulkner's aria-hidden tests](https://developer.paciellogroup.com/blog/2013/11/html5-accessibility-chops-hidden-aria-hidden-support/) and [test data](https://www.html5accessibility.com/tests/hidden2013.html) from 2013. +Added a couple of new tests for visibility:hidden, and one new test for aria-hidden=false on descendant of aria-hidden=true. + +#### Test cases used for testing: +https://carmacleod.github.io/playground/aria-hidden-tests.html + +#### Software used for testing: +* Windows 10 +* Chrome 81 +* Edge 81 +* Firefox 76 +* Internet Explorer 11 +* Safari 13.1 +* JAWS 2019 +* NVDA 2019.3.1 +* VoiceOver on iOS 13.3.1 (iPhone SE) +* VoiceOver on macOS Catalina 10.15.4 +* ChromeVox on Chrome OS ? +* Orca ? on Epiphany (Webkit) ? +* Orca ? on Chromium ? Ubuntu ? +* Orca ? on Firefox ? Ubuntu ? +* Talkback ? on Android ? Chrome ? +* Talkback ? on Android ? Firefox ? + +#### Results: +screen reader support for various methods of hiding content + +test | JAWS + Chrome | JAWS + Edge | JAWS + Firefox | JAWS + IE | NVDA + Chrome | NVDA + Edge | NVDA + Firefox | NVDA + IE | VoiceOver macOS + Safari | VoiceOver iOS + Safari | ChromeVox + Chrome OS | Orca + Epiphany (Webkit) | Orca + Chromium Ubuntu | Orca + Firefox Ubuntu | Talkback + Android Chrome | Talkback + Android Firefox | +--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +`1.` aria-hidden=true | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ? | ? | ? | ? | ? | ? +`2.` html hidden | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ? | ? | ? | ? | ? | ? +`3.` CSS display:none | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ? | ? | ? | ? | ? | ? +`4.` CSS visibility:hidden | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ? | ? | ? | ? | ? | ? +`5.` CSS off screen | read | read | read | read | read | read | read | read | read | read | ? | ? | ? | ? | ? | ? +`6.` CSS off screen aria-hidden=true | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ? | ? | ? | ? | ? | ? +`7.` HTML hidden aria-hidden=false | ignored | ignored | ignored | read | ignored | ignored | ignored | ignored | read | read | ? | ? | ? | ? | ? | ? +`8.` CSS display:none aria-hidden=false | ignored | ignored | ignored | read | ignored | ignored | ignored | ignored | read | read | ? | ? | ? | ? | ? | ? +`9.` CSS visibility:hidden aria-hidden=false | ignored | ignored | ignored | read | ignored | ignored | ignored | ignored | ignored | ignored | ? | ? | ? | ? | ? | ? +`10.` HTML hidden with aria-hidden=false child | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ? | ? | ? | ? | ? | ? +`11.` aria-hidden=true with aria-hidden=false child | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ignored | ? | ? | ? | ? | ? | ? + diff --git a/documentation/archive/modules/On the ARIA DPUB impasse listing of the options.md b/documentation/archive/modules/On the ARIA DPUB impasse listing of the options.md new file mode 100644 index 000000000..d7c43c3cf --- /dev/null +++ b/documentation/archive/modules/On the ARIA DPUB impasse listing of the options.md @@ -0,0 +1,127 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/On-the-ARIA---DPUB-impasse-listing-of-the-options, last edited Oct 17, 2019. + +# On the ARIA DPUB impasse listing of the options + +This is an attempt list the various possibilities potentially solving the current impasse around +DPUB-ARIA. In view of the invested time and energy, as well as the relatively urgent needs of the +publishing community on the matter this may help in reaching a solution soon. This write-up tries to avoid +taking sides, just lists the various options that seem to be available. It is up to the PF WG and the DPUB-ARIA Task Force to choose among these options (or come up with a variant or a new one). + +Note that this text looks at the issues from the point of view of DPUB-ARIA, primarily because +it is this work that is now stalled. However, the real issues reveal a more +general set of questions on the exact role (sic!) of the `@role` attribute in general, and this writeup could be +used as a test case to address those in general. + +Some preliminaries that should be taken into account, ie, which should influence the final choice: + +* Adding a new `@role` attribute to a browser/validator is an expensive operation. There is a set +of constraints imposed by the combination of the values of `@role` and the corresponding `@aria-*` +attributes which have to be checked, and that requires, essentially, a case-by-case check. +In other words, each new `@role` value has a "price" that must be taken into +account when adding new values. + +> (It is unclear, when writing this note, whether the role hierarchies introduce yet another level of difficulties or not. Any comment/update on that would be welcome. @iherman) + +* Additionally to the constraint checking issue, ARIA `@role` values have mappings to the +Accessibility APIs. In practice, these calls to the API are performed by the user agent and have to be defined one-by-one. + +* The (e-)publishing community has been using a number of "structural semantics" terms to +characterize the structure of a document for a long time. As specifications or usage patterns evolve, +terms are added to the existing vocabulary. Most (if not all) of the terms ("abstract", "index", +"glossary", etc.) are part of the traditions of the publishing community, going back to, +possibly, centuries. These values have several possible usages for user agents: it can be used to +influence the user interface (e.g., a pop up window when clicking on a term that is marked as +"footnote") but they have obvious importance for accessibility, too, adding information that is not +conveyed by the bare HTML tag names. At the moment, some of the publishing communities use +(prefixed) `@class` values (e.g., in magazine publishing using terms defined by the PRISM +consortium) others have introduced namespaced XML attributes (`@epub:type` in EPUB3). None of these +solutions are satisfactory. The goal of the DPUB-ARIA work was/is to provide an alternative that would work well with HTML5 *and* which would also be beneficial for accessibility of digital documents. + +* When adding new `@role` values there is a danger of ending up with name clashes. There may be +different solutions to solve this (the usage of "hyphenspaces", a specific `@aria-vocab` attribute +on the same element, or a global `@role-vocab` have been mentioned). This summary does not deal +with this issue, acknowledging, however, that it may have to be solved depending on which direction +the work proceeds. In some cases, the details of solving this may add new "Con"-s to the +discussions below. + +* (Just to clean up a misconception) The term "structural *semantics*" is used by the publishing +community, but this is **not** semantics in the Semantic Web sense. We are not talking about RDF, OWL, etc. +This misunderstanding did come up in some of the comments, hence the necessity to clear this up.) + +With these preliminaries in mind, the following approaches seem to be possible. + +## 1. Minimal ARIA @role values for DPUB + +This solution is based on the approach that an ARIA `@role` value is acceptable *if and only if* +there is a clear and direct mapping on Accessibility APIs. I.e., the second bullet item above is +reinforced by, conceptually, saying that "*every `@role` value MUST have a mapping to an Accessibility APIs*". +If a specific `@role` value does not have an obvious mapping, or it is "covered" by another, +already existing value of ARIA `@role`, then the new value is not acceptable. + +* **Pro:** This approach minimizes the number of possible `@role` values, thereby minimizing the +"costs" on user agents (which include validators) as well as on mappings. +* **Con:** A number of issues raised so far, based on this approach on `@role`, showed that this would lead to a +dramatic reduction of the number of acceptable DPUB-ARIA terms. As a consequence, DPUB-ARIA +would *not* solve the problems of the DPUB community, because most of the structural semantic +terms would be missing. + +## 2. Permissive ARIA @role values for DPUB + +This solution is based on a more general approach on the possible values of `@role`: while some +values have a clear and direct mapping on Accessibility APIs, some others may rely on +the inheritance of `@role` values only and would not map directly to Accessibility APIs. + +* **Pro:** This makes it possible to map all the structural semantics terms of DPUB on ARIA `@role` +values. (Provided the name clash issue is solved without raising additional problems.) +* **Con:** The extra complexity on user agents would become significant (see the first bullet item above) for a potentially large number of new values. Furthermore, deciding on which value is mapped on Accessibility APIs or not is an extra burden. + +## 3. *Partially* de-associating @role from ARIA + +This solution, in some sense, goes back to the history of the `@role` attribute, when it +was not yet closely related to ARIA. What it means it that `@role` MAY have values that are *not* +associated to ARIA *at all* although, in contrast to the original `@role` recommendation, the +possible values are strictly specified and not open ended (and therefore can be checked by a validator). + +Although there *is* an extra complexity on user agents, because they have to separate +the ARIA `@role` values from the non-ARIA ones, once the separation is done validators can just check the values against a simple list of acceptable values, and other user agents may simply ignore those values as far as +Assistive Technologies are concerned. + +* **Pro:** The DPUB structural semantic terms could be mapped onto `@role` without restriction +(provided the name clash issue is solved without raising additional problems). Some +of these values would have no relationships to ARIA `@role` in sense of assistive +technologies; others would be bona fide ARIA `@role` values. +* **Con:** The extra complexity on user agents in separating the various `@role` values, though manageable, is real. +* **Con:** It is, conceptually, fairly messy, and not a clean design to have a "dual" behavior for an attribute. +* **Con:** On a social level, this line of thoughts may re-start old discussions with the HTML WG, and would therefore tear up old scars... + +## 4. Use a separate HTML5 extension + +This solution means that the DPUB community defines a *separate* attribute (let us use the term `@pub-type` hereafter, although a the exact term can change) as an official extension to HTML5. This means the possible values of the attribute would be defined in a separate specification (whether it is specified by a W3C group or an IDPF group has to be agreed with the HTML5 Working Group). This solution bypasses ARIA altogether. + +* **Pro:** The DPUB structural semantics gets a clear syntax, compatible with HTML5. It solves the +DPUB community's main original problem. +* **Con:** Cutting the ties with ARIA means that there would be no automatic relationships of the structural +semantics terms with accessibility. User agents would have to deal with the accessibility aspects of structural +semantics separately. + +## 5. Use a separate HTML5 extension with extra AT mapping + +This is a slight extension to the previous (#4) solution. Whilst the bulk of the structural semantics +terms would be defined for `@pub-type` only, an extra step would be taken to identify those terms +that may have a reasonable mapping on Accessibility APIs and formally define those. This means that user agents, aware of the `@pub-type` attribute, can make the mapping. + +* **Pro:** Like before, DPUB structural semantics gets a clear syntax, and the accessibility +consideration are also taken into account (at least partially) +* **Con:** User agents would have to recognize an extra attribute for some of the values to execute the mapping on the Accessibility APIs; the probability that being implemented by all browsers is probably low (although dedicated ebook readers would probably do it). + +## 6. Use a separate HTML5 extension with @role mapping + +This is a slight extension to the previous (#5) solution: instead of defining Accessibility API mapping, a +dedicated values are also defined in ARIA 1.1 as `@role` values (but not as a separate module). This would also include a mapping to the Accessibility APIs. + +* **Pro:** Like before, DPUB structural semantics gets a clear syntax, and the accessibility +consideration are also taken into account (at least partially). +* **Pro:** Enriching the ARIA 1.1 terms would be beneficial for the Web user community at large, and that is always a good thing. User agents would not have to do anything special, because all values would fall under the general ARIA 1.1 set. +* **Con:** DPUB authors would be expected to duplicate the information, e.g., +`...`; this is prone to errors and not +clear whether authors would do this in practice. diff --git a/documentation/archive/process/Monorepo Project.md b/documentation/archive/process/Monorepo Project.md new file mode 100644 index 000000000..51423e5ab --- /dev/null +++ b/documentation/archive/process/Monorepo Project.md @@ -0,0 +1,65 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/Monorepo-Project, last edited May 21, 2024. + +# Monorepo Project + +Moving specifications into a monorepo, which repos -- all of them? +* [Accessible Name and Description Computation (aka "accname")](https://github.com/w3c/accame) +* [CORE-AAM](https://github.com/w3c/core-aam) +* [HTML-AAM](https://github.com/w3c/html-aam) +* [DPUB-ARIA](https://github.com/w3c/dpub-aria) +* [DPUB-AAM](https://github.com/w3c/dpub-aam) +* [MathML-AAM](https://github.com/w3c/mathml-aam) +* [Graphics-ARIA](https://github.com/w3c/graphics-aria) +* [Graphics-AAM](https://github.com/w3c/graphics-aam) +* [SVG-AAM](https://github.com/w3c/svg-aam) + +We will move after the recharter: +* [HTML-ARIA](https://github.com/w3c/html-aria) + +ARIA [Monorepo](https://github.com/w3c/aria/tree/monorepo) branch starts off with a basic structure + some demo GitHub workflows for publication. +Open questions: +* What other specs use a monorepo, what is their insight on this proposal? + * [ePub Working Group](https://github.com/w3c/epub-specs) is currently using a "monorepo" approach. Publlishing ever-green specs is doable with current [specprod options](https://w3c.github.io/spec-prod/#options). Daniel will set up a proposal for handling our specs. +* How to publish the different specifications from one repo + * How to publish evergreen vs versioned specifications + * Daniel suggests that we use automated publication for ever-green specs but we keep using manual publication for versioned specs. Most transition requests need to happen manually anyway. +* How to maintain old URLs (like github.io editor's drafts) +* What URL to use for editor's drafts +* How to modify ARIA process +* Whether to leave repositories open for issue tracking +* Are modifications necessary for pr-preview? +* What will we do with open PRs? +* Do we want to take the time to change some old branch mnaming and usage? HTML-aam still uses gh-pages as the main branch. + +Example of monorepos: +* https://github.com/w3c/epub-specs + + +## notes + +### merging git repositories + +Based on https://build5nines.com/git-merge-repositories-with-history/ + +Terminology: 'source' repository (e.g., accname) getting merged into 'target' repo (as a subfolder, e.g., aria). + +Strategy: use `git-filter-repo` to rewrite source repository, moving its content into a subfolder. Then merge that rewritten repository into the target repository. + +- install https://github.com/newren/git-filter-repo/ +- Clone source + - `$ git clone https://github.com/w3c/source.git source` + - `$ cd source` +- Use 'git-filter-repo' to rewrite 'source' repo to subfolder named 'Foo' (maintaining history) + - `$ git filter-repo -f --to-subdirectory-filter Foo --tag-rename :foo-` + - After running the root '/' contents of 'source' repo will be located in '/Foo/' subfolder +- Clone target + - `$ git clone https://github.com/build5nines/target-repo.git target` +- Prep 'target' repo: + - `$ cd target` + - `$ git checkout -b merged-repos` +- Add source as (local folder) git remote to 'target' + - `$ git remote add -f source ../source` +- merge source repo into target, allowing unrelated history + `$ git merge --allow-unrelated-histories -m 'merge source repository with history' source/main` +- Push branch to remote / GitHub + `$ git push --set-upstream origin merged-repos` diff --git a/documentation/archive/unresolved/CSS AAM Potential Features.md b/documentation/archive/unresolved/CSS AAM Potential Features.md new file mode 100644 index 000000000..38ada140c --- /dev/null +++ b/documentation/archive/unresolved/CSS AAM Potential Features.md @@ -0,0 +1,116 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/CSS-AAM-Potential-Features, last edited Feb 26, 2018. + + +# CSS-AAM Potential Features and Potential CSS WCAG Techniques +The goal of this document is to provide a *preliminary* list the CSS Modules under development that have impacts on accessibility. Some of these require documenting how the CSS features should be mapped to Accessibility APIs on various platforms. Some need authoring advice, in the form of WCAG Techniques and Failures and/or CSS Best Practices. Others are potentially useful for accessibility scenarios, and should be further explored. Some were too long or complex for a cursory read to determine their accessibility implications, and need additional review. + +Finally, there are two broad categories of issues where there is no consensus on how to proceed. These are areas where we hope that frank and open discussion among experts from the CSS and APA working groups can yield deeper understanding and new approaches. These are: + +1. Order and Flow for screen-readers and sequential navigation on pages where visual layout and DOM order are not in synch. +2. Whether and how to use CSS and media queries to create experiences optimized for accessibility scenarios and users. + +The list below is a *first attempt* at slotting the various CSS modules into these categories for further exploration and discussion. It is an early draft intended to stimulate further discussion among members of both APA and CSS. + +## CSS-AAM Candidates +### Possibly related to reading/navigation order question + +* [CSS Flexible Box Layout](https://drafts.csswg.org/css-flexbox-1/) +* [CSS Grid Layout Level 1](http://www.w3.org/TR/css-grid-1) +* [CSS Positioned Layout Level 3](http://www.w3.org/TR/css3-positioning/) + +#### The specs below are less clearly related, but are worth a look while thinking about holistic solutions +* [CSS Multi-column Layout](http://www.w3.org/TR/css3-multicol) +* [CSS Fragmentation Level 3](http://www.w3.org/TR/css3-break) +* [CSS Box Alignment Module Level 3](http://www.w3.org/TR/2016/WD-css-align-3-20160614/) +* [CSS Basic Box Model Level 3](http://www.w3.org/TR/css3-box) +* [CSS Paged Media Level 3](http://www.w3.org/TR/css3-page) +* [CSS Intrinsic & Extrinsic Sizing Module Level 3](http://www.w3.org/TR/css3-sizing/) +* [CSS Template Layout](http://www.w3.org/TR/css-template-3) +* [CSS Regions](http://www.w3.org/TR/css3-regions) +* [CSS Round Display Level 1](http://www.w3.org/TR/css-round-display-1/) +* [CSS Basic User Interface Module Level 4](http://www.w3.org/TR/css3-ui) (resize section) + +### Document existing mappings and implementation consensus + +* [CSS Display Level 3](http://www.w3.org/TR/css-display-3/): Display:none changes the AAPI tree. Document that and any other features that do. +* [CSS Generated Content Module Level 3](http://www.w3.org/TR/css-content-3/): Document how generated content should be exposed in AAPI +* [CSS Generated Content for Paged Media](http://www.w3.org/TR/css3-gcpm): Document how generated content should be exposed in AAPI +* [CSS Counter Styles Level 3](http://www.w3.org/TR/css-counter-styles-3/): Document how to expose generated list numbers and bullets in AAPI +* [CSS Lists Level 3](http://www.w3.org/TR/css3-lists): Document how to expose lists in AAPI, including numbers and order +* [CSS Tables Level 3](http://dev.w3.org/csswg/css3-tables/): Document how it impacts mappings of HTML tables +* [CSS Basic User Interface Module Level 4](http://www.w3.org/TR/css3-ui): Document how caret and keyboard direction maps to AAPI +* [CSS Image Values and Replaced Content Level 3](http://www.w3.org/TR/css3-images): How does this interact with name calculation? Does it impact the accessibility tree structure? +* [CSS Writing Modes Level 3](http://www.w3.org/TR/css3-writing-modes): Text Direction exposed in AAPI. Discuss with bidi AT developers about what needs they have, if any. +* [CSS Ruby Level 1](http://www.w3.org/TR/css3-ruby): Document how to expose Ruby in AAPI. Get input from international AT vendors, especially in Japan. +* [CSS Backgrounds and Borders Level 3](http://www.w3.org/TR/css3-background): The way IE did high contrast caused some problems. Consider documenting how high contrast, themes, color inversion should be handled by browsers with respect to backgrounds and borders. +* [CSS Masking Level 1](http://www.w3.org/TR/css-masking/), [CSS Overflow Level 3](http://www.w3.org/TR/css-overflow-3/): +Should masking and clipping impact what text is in AAPI? If so, when and how. Document consensus. +* [CSS Values and Units Level 3](http://www.w3.org/TR/css3-values): Document how zooming and text sizing should impact each unit, to avoid situations like the differences in handling of pt and px in IE and Firefox. +* [CSSOM View](http://www.w3.org/TR/cssom-view), [CSS Object Model](http://www.w3.org/TR/cssom), [CSS Typed OM Level 1](http://www.w3.org/TR/css-typed-om-1/): Document relationship between CSSOM and AAPI +* [CSS Pseudo-Elements Module Level 4](http://www.w3.org/TR/css-pseudo-4): Should any pseudo-element styling be reflected in AAPI? +* [Filter Effects](http://www.w3.org/TR/filter-effects/): Document interactions with high contrast, color inversion, etc. + +# Authoring Advice Needed + +## WCAG techniques/failures and CSS Best Practices for how to use feature + +The CSS WCAG techniques are very old, and don't cover many features of CSS that have known accessibility utility and pitfalls. Some of these are covered in the CSS Best Practices. The following specs could benefit from coordination between CSS and WCAG to develop techniques and define the relationship between CSS Best Practices and WCAG techniques. + +* [CSS Fonts Level 3](http://www.w3.org/TR/css3-fonts): Techniques on how to do UI glyphs accessibly. (may not be directly related to this spec) +* [CSS Values and Units Level 3](http://www.w3.org/TR/css3-values): There are known issues with resizing and re-layout when mixing different types of units. +* [CSS Animations](http://www.w3.org/TR/css3-animations), [Web Animations 1.0](http://www.w3.org/TR/web-animations/), [CSS Transitions](http://www.w3.org/TR/css3-transitions), [Motion Path Module Level 1](http://www.w3.org/TR/motion-1/): look into techniques for animations related to WCAG requirements for stopping/pausing motion, seizures, and improving understanding for user with cognitive disabilities. +* [Non-element Selectors](http://www.w3.org/TR/selectors-nonelement-1): WCAG technique for using role and aria-* attributes as selectors +* [CSS Color Module Level 4](https://www.w3.org/tr/css-color-4/): Look into techniques and failures related to contrast + +### Older WCAG ideas for CSS techniques +These are links to lists of ideas the WCAG working group had for CSS techniques a few years ago. They were last reviewed in 2015, so should not be taken as definitive. +* [Techniques to do](https://www.w3.org/WAI/GL/wiki/Techniques/ToDo#CSS) +* [Techniques/CSS](https://www.w3.org/WAI/GL/wiki/Techniques/CSS) + +### Might be useful for other WCAG techniques +These specs have features that could be leveraged in WCAG techniques, particularly WCAG techniques related to cognitive accessibility optimizations. Have the WCAG and COGA teams take a look at these for technique ideas. +* [CSS Text Decoration Module Level 3](http://www.w3.org/TR/css-text-decor-3/) +* [CSS Text Level 3](http://www.w3.org/TR/css3-text) +* [CSS Shapes Level 1](http://www.w3.org/TR/css-shapes-1/) + +## Using CSS to optimize for Accessibility + +APA has been interested in ways that CSS can be used for accessibility-optimized views. The CSS working group has a particular view on the intentions of these features and how they interact with accessibility. This is an area where a joint task force can be useful to understand the different viewpoints and seek common ground. This work should start with examining design goals of these features and accessibility use cases. It might results in new CSS features, CSS-AAM mappings, authoring guidance or some combination, and has a fairly long time horizon. + +* [Media Queries](http://www.w3.org/TR/css3-mediaqueries) +* [Media Queries level 4](http://www.w3.org/TR/2016/WD-mediaqueries-4-20160706/) +* [CSS Conditional Rules Level 3](http://www.w3.org/TR/css3-conditional) +* [CSS Device Adaptation](http://www.w3.org/TR/css3-conditional): Should accessibility views (e.g. magnification, symbol replacement for users with cognitive disabilities) be treated as devices? + + +## Do further review +* [CSS Level 1](http://www.w3.org/TR/CSS22/) (largely covered by existing WCAG techniques) +* [CSS Level 2](http://www.w3.org/TR/CSS22/): Look for areas that are not covered by reviews of later modules +* [CSS Speech](http://www.w3.org/TR/css3-speech): Has much potential for accessibility enhancements +* [Compositing and Blending Level 1](http://www.w3.org/TR/compositing-1/): Look at interaction with SVG-AAM +* [CSS Transforms](http://www.w3.org/TR/css3-transforms): Look at interaction with SVG-AAM and whether this has any relationship to the order issue. +* [CSS Painting API Level 1](http://www.w3.org/TR/css-paint-api-1/): Is there a mechanism for text alternatives? +* [CSS Properties and Values API Level 1](http://www.w3.org/TR/2016/WD-css-properties-values-api-1-20160607/): Extensibility mechanism for CSS. How will this impact AAPI construction? Will there be a way to reflect these new things in AAPI? +* [Worklets Level 1](http://www.w3.org/TR/2016/WD-worklets-1-20160607/): Will this impact AAPI construction? + +## Out of Scope +These are CSS specs that, on first review, don't seem to have accessibility impact. +* [CSS Snapshot 2015](http://www.w3.org/TR/css-2015) +* [CSS Snapshot 2010](http://www.w3.org/TR/css-2010) +* [CSS Snapshot 2007](http://www.w3.org/TR/css-beijing) +* [CSS Color Level 3](http://www.w3.org/TR/css3-color) +* [CSS Namespaces](http://www.w3.org/TR/css3-namespace) +* [Selectors Level 3](http://www.w3.org/TR/selectors) +* [CSS Print Profile](http://www.w3.org/TR/css-print) +* [CSS Style Attributes](http://www.w3.org/TR/css-style-attr) +* [CSS Cascading and Inheritance Level 3](http://www.w3.org/TR/css3-cascade) +* [CSS Syntax Level 3](http://www.w3.org/TR/css3-syntax) +* [Geometry Interfaces Module Level 1 ](http://www.w3.org/TR/geometry-1) +* [CSS Cascading and Inheritance Level 4](http://www.w3.org/TR/css-cascade-4) +* [Cascading Variables](http://www.w3.org/TR/css-variables) +* [CSS Will Change Level 1](http://www.w3.org/TR/css-will-change-1/) +* [Selectors Level 4](http://www.w3.org/TR/selectors4) +* [CSS Scroll Snap Points Module Level 1](http://www.w3.org/TR/css-snappoints-1) +* [CSS Line Grid](http://www.w3.org/TR/css-line-grid-1/) +* [CSS Font Loading](http://www.w3.org/TR/css-font-loading-3/) +* [CSS Scoping Level 1](http://www.w3.org/TR/css-scoping-1/) diff --git a/documentation/archive/unresolved/Plans regarding attribute parity.md b/documentation/archive/unresolved/Plans regarding attribute parity.md new file mode 100644 index 000000000..8232e0891 --- /dev/null +++ b/documentation/archive/unresolved/Plans regarding attribute parity.md @@ -0,0 +1,95 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/Plans-regarding-attribute-parity, last edited Jan 24, 2022. + +# Plans regarding attribute parity + +## Introduction + +This triage is based on what is in the HTML-AAM. Joanie did not go through the HTML spec looking for attributes that are in there, but not in the HTML-AAM. It would be great if someone could do that. + +## Parity not planned + +These are not mapped on any platform: `accept`, `accept-charset`, `action`, `allow`, `allowfullscreen`, `allowpaymentrequest`, `as`, `async`, `autocapitalize`, `autofocus`, `autoplay`, `charset`, `class`, `color`, `content`, `crossorigin`, `data`, `decoding`, `default`, `defer`, `dirname`, `download`, `enctype`, `form`, `formaction`, `formenctype`, `formmethod`, `formnovalidate`, `formtarget`, `href` (on `link`), `hreflang`, `http-equiv`, `id`, `ismap`, `kind`, `loop`, `media`, `method`, `multiple` (on `input`), `muted`, `name`, `novalidate`, `ping`, `playsinline`, `poster`, `preload`, `referrerpolicy`, `rel`, `rows`, `sandbox`, `shape`, `sizes` (on `link`), `slot`, `srcdoc`, `srclang`, `target`, `title` (on `link`, `style`), `translate`, `type`, `usemap`, `value` (on `button`, `option`, `param`, `data`), `wrap` + +In addition, these will not be done for the stated reason: + +. `controls` on `audio`, `video`: We are not creating `audio` and `video` roles at this time. See https://github.com/w3c/aria/issues/517. Therefore attribute parity for roles which do not exist makes no sense. + +## Already done via AccName + +`alt`, `label`, `title` + +## Already done via ARIA + +. `checked`: `aria-checked` +. `colspan`: `aria-colspan` +. `disabled`: `aria-disabled` +. `hidden`: `aria-hidden` +. `indeterminate`: `aria-checked=mixed` +. `max`: `aria-valuemax` +. `min`: `aria-valuemin` +. `multiple` (on `select`): `aria-multiselectable` +. `selected`: `aria-selected` +. `placeholder`: `aria-placeholder` +. `readonly`: `aria-readonly` +. `required`: `aria-required` +. `rowspan`: `aria-rowspan` +. `scope=col`: `columnheader` role +. `scope=row`: `rowheader` role +. `value` (on `meter`, `progress`): `aria-valuenow` + +## Already "done" via exposure of rendered result + +. `coords` on `area`: Exposure to ATs should come from rendered object; not the property. +. `height` on `canvas`, `embed`, `iframe`, `img`, `input`, `object`, `video`: Exposure to ATs should come from rendered object; not the property. +. `reversed` on `ol`: Exposure comes via the text exposed for the list item markers. +. `size` on `input`: Exposure based on bounding box rendered widget. +. `size` on `select`: Exposure based on rendered widget (similar to type on input). +. `sizes` on `img`, `source`: Exposure to ATs should come from rendered object; not the property. +. `start` on `ol`: Exposure comes via the text exposed for the list item markers. +. `style`: Exposure to ATs should come from the rendered/calculated styles. +. `tabindex`: Exposure mostly done via focusability (when not -1). We also have coverage by managing keyboard focus spec contents. +. `type` on `ol`: Exposure comes via the text exposed for the list item markers. +. `width` on `canvas`, `embed`, `iframe`, `img`, `input`, `object`, `video`: Exposure to ATs should come from rendered object; not the property. + +## TODO + +. `high` on `meter` +. `low` on `meter` +. `optimum` on `meter` + +https://github.com/w3c/aria/issues/1336 + +## Candidates (Mapped on at least one platform) + +Do ATs really need these? If so, can we get mappings for all platforms? + +. `abbr` on `th` +. `cite` on `blockquote`, `del`, `ins`, `q` +. `cols` on `textarea` +. `contenteditable` +. `datetime` on `del` and `ins` +. `datetime` on `time` +. `dir` +. `headers` on `td` and `th` +. `href` on `a`, `area` +. `list` on `input` https://github.com/w3c/aria/issues/472 [closed / rejected (for now)] +. `lang` +. `open` on `details` +. `pattern` on `input` (current mapping is for the presence of error; not the pattern itself) +. `spellcheck` on `input` (current mapping is for the presence of error; not if checking is enabled) +. `span` (on `colgroup`) +. `src` on `img` +. `step` on `input` https://github.com/w3c/aria/issues/471 [closed / rejected (for now)] +. `value` on `li` + +These need further discussion: + +. `accesskey`: Do we have sufficient parity through aria-keyshortcuts? +. `autocomplete`: Need to get/update mappings for UIA, AXAPI. In addition, in HTML values are on/off. ARIA lacks these. +. `draggable`: not mapped. Question: Do we want to deal with drag and drop during 1.3? +. `for` on `label` and `output`: Can this be covered via `aria-labelledby`? +. `maxlength` on `input`, `textarea`: not mapped. But maybe it should be? https://github.com/w3c/aria/issues/1119[Joanie thinks so]. +. `minlength` on `input`, `textarea`: not mapped. Also maybe it should be? +. `type` on `button`: Exposure mainly based on label. But see also https://github.com/w3c/aria/issues/842 +. `type` on `input`: Exposure based on rendered widget. But see also https://github.com/w3c/aria/issues/962 +. `value` on `input`: Exposure comes via the text/value exposed as the content of the `input`. diff --git a/documentation/archive/unresolved/Text Separation attribute proposals.md b/documentation/archive/unresolved/Text Separation attribute proposals.md new file mode 100644 index 000000000..0f81ae164 --- /dev/null +++ b/documentation/archive/unresolved/Text Separation attribute proposals.md @@ -0,0 +1,32 @@ +**Editors Note.** Archived wiki page https://github.com/w3c/aria/wiki/Text-Separation-attribute-proposals, last edited Dec 5, 2018. + + +# Text Separation attribute proposals + +From #699 These are the current text separation proposals + +## aria-textseparation - https://github.com/w3c/aria/issues/699#issuecomment-415951739 +* none +* textnode +* space +* leadingspace +* trailingspace +* inline +* block + +## aria-whitespace - https://github.com/w3c/aria/issues/699#issuecomment-416096296 +* space +* line-break +* paragraph-break +* none +* inherit + +## aria-textseparation - https://github.com/w3c/aria/issues/699#issuecomment-420878301 +* + +## Add on wrapper rather than node - https://github.com/w3c/aria/issues/699#issuecomment-425131510 + +## 2 token value? - https://github.com/w3c/aria/issues/699#issuecomment-427040820 + + + diff --git a/documentation/aria-idl.md b/documentation/aria-idl.md new file mode 100644 index 000000000..64378e70a --- /dev/null +++ b/documentation/aria-idl.md @@ -0,0 +1,235 @@ +# ARIA IDL + +## IDL (Interface Definition Language) Overview +### What is IDL (Interface Definition Language)? +- IDL (Interface Definition Language) is broadly used to define object interfaces in computing. On the web, Web IDL is “used to describe interfaces that are intended to be implemented in web browsers” and “...provides a syntax for specifying the surface APIs of web platform objects, as well as JavaScript bindings that detail how those APIs manifest as JavaScript constructs.”([Web IDL Section 1. Introduction](https://webidl.spec.whatwg.org/#introduction)) +- Interfaces + - The HTML DOM API is a good example: all HTML elements (e.g., `