File Directory Treeview Example Using Computed Properties
Important Note About Use of This Example
Note: This is an illustrative example of one way of using ARIA that conforms with the ARIA specification.
- There may be support gaps in some browser and assistive technology combinations, especially for mobile/touch devices. Testing code based on this example with assistive technologies is essential before considering use in production systems.
- The ARIA-AT project plans to provide measurements of this example's assistive technology support by the end of 2020.
- Robust accessibility can be further optimized by choosing implementation patterns that maximize use of semantic HTML and heeding the warning that No ARIA is better than Bad ARIA.
The below example implements the Treeview Design Pattern to simulate a file selector. When users activate an item that represents a file name in the below tree, the name of the selected file appears in the read-only edit field next to the tree.
This example relies on the browser to compute values for aria-setsize
, aria-posinset
, and aria-level
.
The ARIA 1.0 specification for these properties states that browsers can, but are not required to, compute their values.
So, some browser and assistive technology combinations may not compute or report correct position and level information if it is not explicitly declared.
If testing reveals gaps in support for these properties, override automatic computation by explicitly declaring their values as demonstrated in the example of a
File Directory Treeview using declared properties.
Similar examples include:
Example
File Viewer
-
Projects
- project-1.docx
- project-2.docx
-
Project 3
- project-3A.docx
- project-3B.docx
- project-3C.docx
- project-4.docx
-
Project 5
- project-5A.docx
- project-5B.docx
- project-5C.docx
- project-5D.docx
- project-5E.docx
- project-5F.docx
-
Reports
-
report-1
- report-1A.docx
- report-1B.docx
- report-1C.docx
-
report-2
- report-2A.docx
- report-2B.docx
- report-2C.docx
- report-2D.docx
-
report-3
- report-3A.docx
- report-3B.docx
- report-3C.docx
- report-3D.docx
-
report-1
-
Letters
-
letter-1
- letter-1A.docx
- letter-1B.docx
- letter-1C.docx
-
letter-2
- letter-2A.docx
- letter-2B.docx
- letter-2C.docx
- letter-2D.docx
-
letter-3
- letter-3A.docx
- letter-3B.docx
- letter-3C.docx
- letter-3D.docx
-
letter-1
Accessibility Features
To make the focus indicator easier to see, nodes in the tree have a custom focus and hover styling created using CSS focus and hover pseudo-classes.
Terms Used to Describe Trees
A tree item that can be expanded to reveal child items is called a parent node. It is a closed node when the children are hidden and an open node when it is expanded. An end node does not have any children. For a complete list of terms and definitions, see the Treeview Design Pattern.
Keyboard Support
Key | Function |
---|---|
Enter or Space |
|
Down arrow |
|
Up arrow |
|
Right Arrow |
|
Left Arrow |
|
Home | Moves focus to first node without opening or closing a node. |
End | Moves focus to the last node that can be focused without expanding any nodes that are closed. |
a-z, A-Z |
|
* (asterisk) |
|
Role, Property, State, and Tabindex Attributes
Role | Attribute | Element | Usage |
---|---|---|---|
tree |
ul |
|
|
aria-labelledby="IDREF" |
ul |
Refers to the heading element that contains the label that identifies the purpose of the tree . |
|
treeitem |
li |
Identifies the element as a treeitem . |
|
tabindex="-1" |
li |
|
|
tabindex="0" |
li |
|
|
aria-expanded="false" |
li |
|
|
aria-expanded="true" |
li |
|
|
group |
ul |
|
Javascript and CSS Source Code
- CSS: tree.css
- Javascript: tree.js
- Javascript: treeitem.js
- Javascript: treeitemClick.js
HTML Source Code
<h3 id="tree_label">
File Viewer
</h3>
<ul role="tree" aria-labelledby="tree_label">
<li role="treeitem" aria-expanded="false">
<span>
Projects
</span>
<ul role="group">
<li role="treeitem" class="doc">
project-1.docx
</li>
<li role="treeitem" class="doc">
project-2.docx
</li>
<li role="treeitem" aria-expanded="false">
<span>
Project 3
</span>
<ul role="group">
<li role="treeitem" class="doc">
project-3A.docx
</li>
<li role="treeitem" class="doc">
project-3B.docx
</li>
<li role="treeitem" class="doc">
project-3C.docx
</li>
</ul>
</li>
<li role="treeitem" class="doc">
project-4.docx
</li>
<li role="treeitem" aria-expanded="false">
<span>
Project 5
</span>
<ul role="group">
<li role="treeitem" class="doc">
project-5A.docx
</li>
<li role="treeitem" class="doc">
project-5B.docx
</li>
<li role="treeitem" class="doc">
project-5C.docx
</li>
<li role="treeitem" class="doc">
project-5D.docx
</li>
<li role="treeitem" class="doc">
project-5E.docx
</li>
<li role="treeitem" class="doc">
project-5F.docx
</li>
</ul>
</li>
</ul>
</li>
<li role="treeitem" aria-expanded="false">
<span>
Reports
</span>
<ul role="group">
<li role="treeitem" aria-expanded="false">
<span>
report-1
</span>
<ul role="group">
<li role="treeitem" class="doc">
report-1A.docx
</li>
<li role="treeitem" class="doc">
report-1B.docx
</li>
<li role="treeitem" class="doc">
report-1C.docx
</li>
</ul>
</li>
<li role="treeitem" aria-expanded="false">
<span>
report-2
</span>
<ul role="group">
<li role="treeitem" class="doc">
report-2A.docx
</li>
<li role="treeitem" class="doc">
report-2B.docx
</li>
<li role="treeitem" class="doc">
report-2C.docx
</li>
<li role="treeitem" class="doc">
report-2D.docx
</li>
</ul>
</li>
<li role="treeitem" aria-expanded="false">
<span>
report-3
</span>
<ul role="group">
<li role="treeitem" class="doc">
report-3A.docx
</li>
<li role="treeitem" class="doc">
report-3B.docx
</li>
<li role="treeitem" class="doc">
report-3C.docx
</li>
<li role="treeitem" class="doc">
report-3D.docx
</li>
</ul>
</li>
</ul>
</li>
<li role="treeitem" aria-expanded="false">
<span>
Letters
</span>
<ul role="group">
<li role="treeitem" aria-expanded="false">
<span>
letter-1
</span>
<ul>
<li role="treeitem" class="doc">
letter-1A.docx
</li>
<li role="treeitem" class="doc">
letter-1B.docx
</li>
<li role="treeitem" class="doc">
letter-1C.docx
</li>
</ul>
</li>
<li role="treeitem" aria-expanded="false">
<span>
letter-2
</span>
<ul role="group">
<li role="treeitem" class="doc">
letter-2A.docx
</li>
<li role="treeitem" class="doc">
letter-2B.docx
</li>
<li role="treeitem" class="doc">
letter-2C.docx
</li>
<li role="treeitem" class="doc">
letter-2D.docx
</li>
</ul>
</li>
<li role="treeitem" aria-expanded="false">
<span>
letter-3
</span>
<ul role="group">
<li role="treeitem" class="doc">
letter-3A.docx
</li>
<li role="treeitem" class="doc">
letter-3B.docx
</li>
<li role="treeitem" class="doc">
letter-3C.docx
</li>
<li role="treeitem" class="doc">
letter-3D.docx
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>
<label>
File or Folder Selected:
<input id="last_action"
type="text"
size="15"
readonly="">
</label>
</p>