├── .gitignore
├── Additional ARIA Resources
├── ARIA 101.pdf
├── Static vs. Interactive Widget Roles - Ensuring Proper Functionality in ARIA.pdf
└── aria_checklist.pdf
├── Format.bat
├── LICENSE
├── README.md
├── Using Visual ARIA to Physically See and Learn How ARIA Works.pdf
├── docs
├── 1 Basic Link.htm
├── 2 Content Hidden Using aria-hidden.htm
├── 3 ARIA Radio Incomplete 1.htm
├── 4 ARIA Radio Incomplete 2.htm
├── 5 ARIA Radio Incomplete 3.htm
├── 6 ARIA Radio Incomplete 4.htm
├── 7 ARIA Radio Incomplete 5.htm
├── 8 ARIA Radio COMPLETE 6.htm
├── css
│ ├── OpenSans-Bold-webfont.eot
│ ├── OpenSans-Bold-webfont.svg
│ ├── OpenSans-Bold-webfont.ttf
│ ├── OpenSans-Bold-webfont.woff
│ ├── OpenSans-Italic-webfont.eot
│ ├── OpenSans-Italic-webfont.svg
│ ├── OpenSans-Italic-webfont.ttf
│ ├── OpenSans-Italic-webfont.woff
│ ├── OpenSans-Light-webfont.eot
│ ├── OpenSans-Light-webfont.svg
│ ├── OpenSans-Light-webfont.ttf
│ ├── OpenSans-Light-webfont.woff
│ ├── OpenSans-Regular-webfont.eot
│ ├── OpenSans-Regular-webfont.svg
│ ├── OpenSans-Regular-webfont.ttf
│ ├── OpenSans-Regular-webfont.woff
│ ├── anton-webfont.eot
│ ├── anton-webfont.svg
│ ├── anton-webfont.ttf
│ ├── anton-webfont.woff
│ ├── global.css
│ └── radios.css
├── github-bookmarklet
│ ├── css
│ │ ├── OpenSans-Bold-webfont.eot
│ │ ├── OpenSans-Bold-webfont.svg
│ │ ├── OpenSans-Bold-webfont.ttf
│ │ ├── OpenSans-Bold-webfont.woff
│ │ ├── OpenSans-Italic-webfont.eot
│ │ ├── OpenSans-Italic-webfont.svg
│ │ ├── OpenSans-Italic-webfont.ttf
│ │ ├── OpenSans-Italic-webfont.woff
│ │ ├── OpenSans-Light-webfont.eot
│ │ ├── OpenSans-Light-webfont.svg
│ │ ├── OpenSans-Light-webfont.ttf
│ │ ├── OpenSans-Light-webfont.woff
│ │ ├── OpenSans-Regular-webfont.eot
│ │ ├── OpenSans-Regular-webfont.svg
│ │ ├── OpenSans-Regular-webfont.ttf
│ │ ├── OpenSans-Regular-webfont.woff
│ │ ├── anton-webfont.eot
│ │ ├── anton-webfont.svg
│ │ ├── anton-webfont.ttf
│ │ ├── anton-webfont.woff
│ │ └── global.css
│ ├── img
│ │ ├── sprite.svg
│ │ ├── up.png
│ │ ├── whatsock.svg
│ │ └── whatsock_logo.jpg
│ ├── js
│ │ ├── Acc.DC.API.js
│ │ ├── jQuery.js
│ │ └── setup.js
│ └── visual-aria.htm
├── img
│ └── cresent_europa.jpg
├── js
│ ├── jQuery.js
│ └── radios.js
└── visual-aria
│ ├── public
│ ├── 10tablist.css
│ ├── 11tree.css
│ ├── 12treegrid-grid-table.css
│ ├── 1roles.css
│ ├── 2landmarks.css
│ ├── 3structural.css
│ ├── 4dialogs.css
│ ├── 5live-regions.css
│ ├── 6simple-widgets.css
│ ├── 7combobox-listbox.css
│ ├── 8menu-menubar.css
│ └── 9radiogroup.css
│ ├── roles.css
│ ├── roles.js
│ └── roles.uncompressed.js
├── package-lock.json
└── package.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/Additional ARIA Resources/ARIA 101.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/Additional ARIA Resources/ARIA 101.pdf
--------------------------------------------------------------------------------
/Additional ARIA Resources/Static vs. Interactive Widget Roles - Ensuring Proper Functionality in ARIA.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/Additional ARIA Resources/Static vs. Interactive Widget Roles - Ensuring Proper Functionality in ARIA.pdf
--------------------------------------------------------------------------------
/Additional ARIA Resources/aria_checklist.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/Additional ARIA Resources/aria_checklist.pdf
--------------------------------------------------------------------------------
/Format.bat:
--------------------------------------------------------------------------------
1 | (call prettier --write "./docs/visual-aria/roles.uncompressed.js")
2 | (call uglifyjs "./docs/visual-aria/roles.uncompressed.js" --comments /^!/ --compress --mangle --output "./docs/visual-aria/roles.js")
3 | (call prettier --write "./**/{setup.js,radios.js}")
4 | (call js-beautify -r --type="html" "./**/*.{htm,html}")
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Bryan Garaventa
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # visual-aria
2 | Visual ARIA allows engineers, testers, educators, and students to physically observe ARIA usage within web technologies, including ARIA 1.1 structural, live region, and widget roles, proper nesting and focus management, plus requisite and optional supporting attributes to aid in development.
3 |
4 | Includes the latest version of the AccName Prototype for auto-detection of accessible names and descriptions in accordance with the AccName spec. For further details, visit: https://github.com/WhatSock/w3c-alternative-text-computation
5 |
6 | Visual ARIA
7 | ========
8 |
9 | ARIA stands for Accessible Rich Internet Applications, and is a technical specification published by the World Wide Web Consortium (W3C) Web Accessibility Initiative (WAI).
10 |
11 | One of the greatest challenges regarding ARIA and how to reliably learn to use it, is that ARIA is an invisible technology. Mainstream observers literally cannot see where ARIA is applied, nor when issues are caused as a result of its use. As a result, the process of ARIA education is solely dictated by individuals, their singular understanding of assistive technologies, which browser they are using, which operating system they are using, and the current level of combined support between the operating system, the browser, and the assistive technology, all of which differ significantly when combined in different variations. Thus all ARIA education is skewed by personal subjectivity, perpetually propagating misinformation when key concepts are misunderstood. This makes ARIA education impossible to scale equally across all businesses, agencies, and academic institutions, because all such education is subjective (qualitative) and not objective (quantitative) as it must be.
12 |
13 | To solve this, there needs to be a scientifically precise methodology for learning ARIA that is not based on individual subjectivity, but rather, on that of role usage conformance according to the spec in order to achieve scalable objectivity for universal education. Visual ARIA solves this problem by reliably teaching the accessible use of ARIA through experimentation and experiential learning. Thus all mainstream observers can physically see the effects of ARIA usage equally, while also learning ARIA role usage conformance based on consistent testable mapping algorithms.
14 |
15 | Visual ARIA allows engineers, testers, educators, and students to physically observe ARIA usage within web technologies, including ARIA 1.1 structural, live region, and widget roles, proper nesting and focus management, plus requisite and optional supporting attributes to aid in development.
16 |
17 | Distributed under the terms of the Open Source Initiative OSI - MIT License.
18 |
19 | Developed and maintained by: Bryan Garaventa https://www.linkedin.com/in/bgaraventa
20 | Or on Twitter at https://twitter.com/bryanegaraventa
21 |
22 | Visual ARIA Browser Extensions
23 | -----
24 |
25 | The Visual ARIA browser extensions can be used to run Visual ARIA offline for local file access during agile development, or from within private intranets that don't allow public internet access.
26 |
27 | * Mozilla: https://addons.mozilla.org/en-US/firefox/addon/visual-aria/
28 | * Chrome: https://chrome.google.com/webstore/detail/visual-aria/lhbmajchkkmakajkjenkchhnhbadmhmk?hl=en-GB
29 |
30 | Note: Visual ARIA browser extensions are developed and maintained by Laurence Lewis: https://www.linkedin.com/in/laurence-lewis-77520365/
31 | Or on Twitter at https://twitter.com/Laurence_Lewis
32 | Visual ARIA browser extension support or bug reports should be sent to extensions@a11ycats.com.au
33 |
34 | Project home:
35 | -----
36 |
37 | https://whatsock.github.io/visual-aria/github-bookmarklet/visual-aria.htm
38 |
39 | Download File and Folder Descriptions
40 | -----
41 |
42 | * Using Visual ARIA to Physically See and Learn How ARIA Works.pdf : CSUN presentation printout.
43 | * docs\* : Example and exercise materials for illustrating Visual ARIA functionality, plus the complete source code for Visual ARIA within the folder 'docs\visual-aria' for use within offline projects or internal server hosting behind corporate firewalls.
44 | * Additional ARIA Resources : Useful resources for learning how ARIA works, how it impacts the accessibility tree within browsers, which ARIA roles are safe to use within specific circumstances, etc.
45 |
46 | How Visual ARIA Works
47 | -----
48 |
49 | The JavaScript for Visual ARIA is first loaded using roles.js, which then dynamically loads all relevant CSS files that comprise the cascading logic for Visual ARIA.
50 |
51 | Configuration settings can be modified at the top of roles.js to set the base local or remote folder path, plus the millisecond delay for evaluating the text alternative computation and role monitoring sequence for the dynamic loader. Visual ARIA will recursively load itself into nested iframe documents when permitted by the browser's same-origin policy.
52 |
53 | Instructions
54 | -----
55 |
56 | 1. Open the files within the Files folder in sequence using the numbered HTM files.
57 |
58 | 2. Load Visual ARIA using either the local copy or the public bookmarklet.
59 | https://whatsock.github.io/visual-aria/github-bookmarklet/visual-aria.htm
60 | * Or add to Chrome: https://chrome.google.com/webstore/detail/visual-aria/lhbmajchkkmakajkjenkchhnhbadmhmk?hl=en-GB
61 |
62 | 3. Observe the new information displayed that conveys where ARIA is being used.
63 |
64 | 4. Hover the mouse over various elements and observe the Name and Description computation that is displayed for interactive widget roles. This matches the naming computation described at
65 | https://www.levelaccess.com/how-the-w3c-text-alternative-computation-works/
66 |
67 | 5. Use the keyboard to set focus to interactive widgets and observe how Visual ARIA conveys additional information for the element that has focus, especially when focus is set on the same elements that include ARIA roles.
68 |
69 | How to Interpret Visual ARIA Feedback
70 | -----
71 |
72 | When observing interactive widget roles, the colors for Visual ARIA will change depending on the circumstances of interaction. For example, When adding the attribute role="button" to an element, it will convey an orange color on black background, but when focus is set on the same element, it will turn green on a white background to convey that the correct element has focus. Additionally, if the wrong element has focus, such as setting focus to an element inside of an element with role="button", a red color on yellow background will be used to convey an incorrect use of ARIA that may result in accessibility issues for assistive technology users.
73 |
74 | Moreover, when interactive widget roles are used and focus is set to one such element, Visual ARIA will suggest keyboard interactions that match the design paradigm for that widget type. In the case of role="button" for example, Visual ARIA will suggest that Space and Enter should activate, and in the case of single tab stop widget roles such as role="radio", role="tab", role="menuitem", role="option", and so on, Visual ARIA will then suggest that the arrow keys should be used to move focus.
75 |
76 | This is meant to guide education and development regarding the accompanying scripting behaviors that should be used when building interactive widgets, thus matching all of the ARIA 1.1 role usage algorithms documented at https://whatsock.com/training/matrices/ .
77 |
78 | The files within this archive may be modified and changed to try out different ARIA roles, which is an encapsulated testing environment for experimenting with ARIA role usage.
79 |
80 | Additional instructions and color combination details are available at
81 | https://whatsock.github.io/visual-aria/github-bookmarklet/visual-aria.htm#instructions-for-use
82 |
83 | Related projects:
84 | -----
85 |
86 | * WhatSock Organization: https://github.com/whatsock
87 | * Visual ARIA: https://github.com/whatsock/visual-aria
88 |
--------------------------------------------------------------------------------
/Using Visual ARIA to Physically See and Learn How ARIA Works.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/Using Visual ARIA to Physically See and Learn How ARIA Works.pdf
--------------------------------------------------------------------------------
/docs/1 Basic Link.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 1 Basic link with aria-selected
7 |
8 |
9 |
10 |
11 |
12 |
13 |
21 |
22 |
23 |
24 |
27 |
28 |
31 |
32 |
33 | Load Visual ARIA and confirm what is wrong with this markup.
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/docs/2 Content Hidden Using aria-hidden.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 2 Content hidden using aria-hidden
7 |
8 |
9 |
10 |
11 |
12 |
13 |
21 |
22 |
23 |
24 |
27 |
28 |
29 |
30 | Slightly smaller than the Moon, Europa is primarily made of silicate rock and has a water-ice crust and probably an iron-nickel core. It has a tenuous atmosphere composed primarily of oxygen. Its surface is striated by cracks and streaks, whereas craters are relatively rare. It has the smoothest surface of any known solid object in the Solar System. The apparent youth and smoothness of the surface have led to the hypothesis that a water ocean exists beneath it, which could conceivably serve as an abode for extraterrestrial life. This hypothesis proposes that heat from tidal flexing causes the ocean to remain liquid and drives geological activity similar to plate tectonics. On 8 September 2014, NASA reported finding evidence supporting earlier suggestions of plate tectonics in Europa's thick ice shell-the first sign of such geological activity on a world other than Earth. On 12 May 2015, scientists announced that sea salt from a subsurface ocean may be coating some geological features on Europa, suggesting that the ocean is interacting with the seafloor. This may be important in determining if Europa could be habitable for life.
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | Load Visual ARIA and confirm what is wrong with this markup.
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/docs/3 ARIA Radio Incomplete 1.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 3 ARIA Radios Incomplete 1
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
How would you rate this page?
32 |
39 |
40 |
41 |
42 |
43 |
44 | Load Visual ARIA and confirm there is no ARIA markup. Click the ARIA Role Matrices button to look up the requisite role mappings for this widget structure in section 3.2.6.
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/docs/4 ARIA Radio Incomplete 2.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 4 ARIA Radios Incomplete 2
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
How would you rate this page?
32 |
39 |
40 |
41 |
42 |
43 |
44 | Load Visual ARIA and observe where problems occur.
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/docs/5 ARIA Radio Incomplete 3.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 5 ARIA Radios Incomplete 3
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
How would you rate this page?
32 |
39 |
40 |
41 |
42 |
43 |
44 | Load Visual ARIA and observe where problems occur.
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/docs/6 ARIA Radio Incomplete 4.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 6 ARIA Radios Incomplete 4
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
How would you rate this page?
32 |
39 |
40 |
41 |
42 |
43 |
44 | Load Visual ARIA and observe where problems occur when using the keyboard.
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/docs/7 ARIA Radio Incomplete 5.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 7 ARIA Radios Incomplete 5
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
How would you rate this page?
32 |
39 |
40 |
41 |
42 |
43 |
44 | Load Visual ARIA and observe where problems occur when using the keyboard.
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/docs/8 ARIA Radio COMPLETE 6.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 8 ARIA Radios COMPLETE 6
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
24 |
25 |
26 |
27 |
28 |
34 |
35 |
36 |
How would you rate this page?
37 |
44 |
45 |
46 |
47 |
48 |
49 | Load Visual ARIA and observe what happens when using the keyboard.
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/docs/css/OpenSans-Bold-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Bold-webfont.eot
--------------------------------------------------------------------------------
/docs/css/OpenSans-Bold-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Bold-webfont.ttf
--------------------------------------------------------------------------------
/docs/css/OpenSans-Bold-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Bold-webfont.woff
--------------------------------------------------------------------------------
/docs/css/OpenSans-Italic-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Italic-webfont.eot
--------------------------------------------------------------------------------
/docs/css/OpenSans-Italic-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Italic-webfont.ttf
--------------------------------------------------------------------------------
/docs/css/OpenSans-Italic-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Italic-webfont.woff
--------------------------------------------------------------------------------
/docs/css/OpenSans-Light-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Light-webfont.eot
--------------------------------------------------------------------------------
/docs/css/OpenSans-Light-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Light-webfont.ttf
--------------------------------------------------------------------------------
/docs/css/OpenSans-Light-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Light-webfont.woff
--------------------------------------------------------------------------------
/docs/css/OpenSans-Regular-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Regular-webfont.eot
--------------------------------------------------------------------------------
/docs/css/OpenSans-Regular-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Regular-webfont.ttf
--------------------------------------------------------------------------------
/docs/css/OpenSans-Regular-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/OpenSans-Regular-webfont.woff
--------------------------------------------------------------------------------
/docs/css/anton-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/anton-webfont.eot
--------------------------------------------------------------------------------
/docs/css/anton-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/anton-webfont.ttf
--------------------------------------------------------------------------------
/docs/css/anton-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/css/anton-webfont.woff
--------------------------------------------------------------------------------
/docs/css/global.css:
--------------------------------------------------------------------------------
1 |
2 | .clearfix:after {
3 | visibility: hidden;
4 | display: block;
5 | font-size: 0;
6 | content: " ";
7 | clear: both;
8 | height: 0;
9 | }
10 | .clearfix {
11 | display: inline-block;
12 | }
13 | * html .clearfix {
14 | height: 1%;
15 | }
16 | .clearfix {
17 | display: block;
18 | }
19 |
20 | /* CSS index:
21 | RESET
22 | DEFAULT VALUES
23 | PAGE STRUCTURE
24 | FORMS
25 | TABLES
26 | NAVIGATION
27 | SPECIFICS
28 | PRINT STYLES
29 | MEDIA QUERIES
30 | */
31 |
32 | /* ------------------------------ RESET ---------------------------- */
33 |
34 | html, body, div, span, object, iframe,
35 | h1, h2, h3, h4, h5, h6, p, blockquote, pre,
36 | a, abbr, acronym, address, big, cite, code,
37 | del, dfn, em, font, img, ins, kbd, q, s, samp,
38 | small, strike, strong, sub, sup, tt, var, main, figure,
39 | dl, dt, dd, ol, ul, li,
40 | fieldset, form, label, legend,
41 | table, caption, tbody, tfoot, thead, tr, th, td {
42 | margin: 0;
43 | padding: 0;
44 | border: 0;
45 | }
46 |
47 | article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section {
48 | display: block;
49 | }
50 |
51 | body {overflow-y: scroll;}
52 |
53 | /* Generated by Font Squirrel (http://www.fontsquirrel.com) on December 10, 2015 */
54 |
55 | @font-face {
56 | font-family: 'open_sansregular';
57 | src: url('OpenSans-Regular-webfont.eot');
58 | src: url('OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),
59 | url('OpenSans-Regular-webfont.woff') format('woff'),
60 | url('OpenSans-Regular-webfont.ttf') format('truetype'),
61 | url('OpenSans-Regular-webfont.svg#open_sansregular') format('svg');
62 | font-weight: normal;
63 | font-style: normal;
64 | }
65 |
66 | @font-face {
67 | font-family: 'open_sanslight';
68 | src: url('OpenSans-Light-webfont.eot');
69 | src: url('OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),
70 | url('OpenSans-Light-webfont.woff') format('woff'),
71 | url('OpenSans-Light-webfont.ttf') format('truetype'),
72 | url('OpenSans-Light-webfont.svg#open_sanslight') format('svg');
73 | font-weight: normal;
74 | font-style: normal;
75 | }
76 |
77 | @font-face {
78 | font-family: 'open_sansitalic';
79 | src: url('OpenSans-Italic-webfont.eot');
80 | src: url('OpenSans-Italic-webfont.eot?#iefix') format('embedded-opentype'),
81 | url('OpenSans-Italic-webfont.woff') format('woff'),
82 | url('OpenSans-Italic-webfont.ttf') format('truetype'),
83 | url('OpenSans-Italic-webfont.svg#open_sansitalic') format('svg');
84 | font-weight: normal;
85 | font-style: normal;
86 | }
87 |
88 | @font-face {
89 | font-family: 'open_sansbold';
90 | src: url('OpenSans-Bold-webfont.eot');
91 | src: url('OpenSans-Bold-webfont.eot?#iefix') format('embedded-opentype'),
92 | url('OpenSans-Bold-webfont.woff') format('woff'),
93 | url('OpenSans-Bold-webfont.ttf') format('truetype'),
94 | url('OpenSans-Bold-webfont.svg#open_sansbold') format('svg');
95 | font-weight: normal;
96 | font-style: normal;
97 | }
98 |
99 |
100 | @font-face {
101 | font-family: 'antonregular';
102 | src: url('anton-webfont.eot');
103 | src: url('anton-webfont.eot?#iefix') format('embedded-opentype'),
104 | url('anton-webfont.woff') format('woff'),
105 | url('anton-webfont.ttf') format('truetype'),
106 | url('anton-webfont.svg#antonregular') format('svg');
107 | font-weight: normal;
108 | font-style: normal;
109 | }
110 |
111 | /* --------------------------------------------------------------------------- */
112 | /* ----------------------------- DEFAULT VALUES ------------------------------ */
113 | /* --------------------------------------------------------------------------- */
114 |
115 | body {
116 | font: 100%/1 open_sansregular, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
117 | background-color: #133639;
118 | }
119 |
120 | h1 {
121 | font: normal 8vw/1.2 antonregular, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
122 | text-transform: capitalize;
123 | color: #E2A037;
124 | padding: 120px 5% 0 5%;
125 | }
126 |
127 | h2 {
128 | font: normal 1.8em/1.3 antonregular, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
129 | color: #2E3135;
130 | margin: 1.5em 0 0.5em;
131 | }
132 | aside section h2 {margin: 0 0 0.5em;}
133 |
134 | h4 {
135 | font: normal 1.3em/1.3 open_sansbold, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
136 | color: #2E3135;
137 | margin: 1.5em 0 0.5em;
138 | }
139 |
140 | p, li, dt, dd {font-size: 0.9em; line-height: 1.45;}
141 |
142 | li li {font-size: 100%;}
143 |
144 | a, a:link, a:visited {
145 | text-decoration: none;
146 | color: #000;
147 | background: #F2D3A1;
148 | }
149 | a:hover {
150 | text-decoration: underline;
151 | background: transparent;
152 | }
153 |
154 | *:focus {
155 | color: #000;
156 | background: #FC0;
157 | }
158 |
159 | img {max-width: 100%; border: none;}
160 |
161 | em {
162 | font-family: open_sansitalic, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
163 | font-style: normal;
164 | }
165 | strong {
166 | font-family: open_sansbold, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
167 | font-weight: 600;
168 | }
169 |
170 | button {cursor: pointer;}
171 |
172 | code {
173 | color: #000;
174 | background: #E4E4E4;
175 | }
176 |
177 | code.block {
178 | display: block;
179 | padding: 1rem;
180 | margin: 1rem 0;
181 | }
182 |
183 |
184 | /* --------------------------------------------------------------------------- */
185 | /* ----------------------------- PAGE STRUCTURE ------------------------------ */
186 | /* --------------------------------------------------------------------------- */
187 |
188 | #container {min-width: 800px;}
189 | #container.pageContainer {min-width: 0;}
190 |
191 | header {
192 | position: relative;
193 | text-align: center;
194 | color: #FFF;
195 | background: #133639;
196 | background-image: linear-gradient(rgba(0,0,0,.5), transparent);
197 | padding: 2rem 0 0;
198 | }
199 |
200 | main {
201 | background-color: #F4FAFB;
202 | padding: 2rem 5%;
203 | }
204 |
205 | aside {color: #000; background: #d9e8e9; padding: 2rem 5%;}
206 |
207 | p.baseline {font-size: 0.75em; margin-top: 1.5em;}
208 | p.logo {position: absolute; top: 2rem; left: 50%; width: 100px; margin-left: -50px;}
209 |
210 | p.logo a {background: transparent;}
211 |
212 |
213 | /* --------------- FOOTER --------------- */
214 |
215 | footer {margin: 1rem 0 2rem; text-align: center;}
216 | p.copyright {
217 | font-size: 0.7em;
218 | color: #FFF;
219 | background: transparent;
220 | margin-top: 1rem;
221 | }
222 |
223 | ul.policies li {
224 | display: inline-block;
225 | position: relative;
226 | list-style-type: none;
227 | }
228 | ul.policies li::after {
229 | position: absolute;
230 | top: 0.7em;
231 | right: -0.35em;
232 | display: block;
233 | content: "";
234 | width: 5px;
235 | height: 5px;
236 | background: #E2A037;
237 | border-radius: 5px;
238 | }
239 | ul.policies li:last-child::after {content: none;}
240 |
241 | footer button {
242 | color: #FFF;
243 | background: transparent;
244 | border: none;
245 | }
246 |
247 | /* --------------------------------------------------------------------------- */
248 | /* ---------------------------------- FORMS ---------------------------------- */
249 | /* --------------------------------------------------------------------------- */
250 |
251 | form p + p {margin-top: 1em;}
252 |
253 | fieldset {margin-bottom: 2rem;}
254 |
255 | legend {
256 | font: normal 1.5em/1 antonregular, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
257 | text-transform: uppercase;
258 | padding-bottom: 1.5rem;
259 | }
260 |
261 | label {
262 | display: block;
263 | font-family: open_sansbold, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
264 | padding-bottom: 0.1em;
265 | }
266 |
267 | input {
268 | font-size: 100%;
269 | padding: 2px 3px;
270 | border: 1px solid #C0C0C0;
271 | border-radius: 2px;
272 | }
273 |
274 | .mandatory-info {
275 | text-align: right;
276 | }
277 |
278 | .buttons-bar {text-align: center; margin: 2rem 0 0;}
279 | .buttons-bar input {margin: 0 0.5rem;}
280 |
281 | input[type=submit], input[type=reset] {
282 | font-size: 100%;
283 | text-transform: uppercase;
284 | color: #FFF;
285 | background: #49182E;
286 | padding: 0.3em 0.5em;
287 | border: none;
288 | box-shadow: 0 1px 2px rgba(0,0,0,.7);
289 | border-radius: 2px;
290 | cursor: pointer;
291 | }
292 | input[type=reset] {
293 | color: #FFF;
294 | background: #555;
295 | }
296 |
297 | input[type=submit]:hover, input[type=reset]:hover {
298 | color: #FFF;
299 | background: #286278;
300 | box-shadow: none;
301 | border-radius: 0;
302 | }
303 |
304 | input[type=submit]:focus {background: #F60;}
305 |
306 |
307 |
308 | /* --------------------------------------------------------------------------- */
309 | /* --------------------------------- TABLES ---------------------------------- */
310 | /* --------------------------------------------------------------------------- */
311 |
312 | table {
313 | width: 100%;
314 | border-collapse: collapse;
315 | }
316 |
317 | th {
318 | font: normal 0.9em/1.2 open_sansbold, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
319 | text-align: left;
320 | background: #E0E0E0;
321 | vertical-align: top;
322 | padding: 0.5em 1em;
323 | }
324 | th a, tr td:nth-child(4) a {background: transparent;}
325 | th a:hover, tr td:nth-child(4) a:hover {text-decoration: none;}
326 |
327 | th:nth-child(1) {width: 9em;}
328 | th.notes {width: 40%;}
329 | tr + tr {border-top: 1px solid #D0D0D0;}
330 |
331 | td {
332 | font-size: 0.9em;
333 | vertical-align: top;
334 | padding: 1em;
335 | }
336 | td ul {padding-left: 0.5em;}
337 | td li {font-size: 100%; padding-bottom: 0.5em;}
338 | td+td {border-left: 1px solid #D0D0D0;}
339 | td p {font-size: 100%; margin: 0;}
340 | td p + p {margin-top: 0.8em;}
341 |
342 |
343 |
344 | /* --------------------------------------------------------------------------- */
345 | /* -------------------------------- NAVIGATION ------------------------------- */
346 | /* --------------------------------------------------------------------------- */
347 |
348 | nav {text-align: center; margin-top: 2rem;}
349 |
350 | nav li {list-style-type: none;}
351 | nav button, nav a, nav a:link, nav a:visited {
352 | display: block;
353 | font: bold 1.2em Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
354 | text-transform: uppercase;
355 | color: #FFF;
356 | background: #0A1C1D;
357 | padding: 0.8em 0.5em;
358 | border-bottom: 1px solid #999;
359 | }
360 | nav button:hover, nav a:hover {
361 | color: #191B1D;
362 | background: #E2A037;
363 | text-decoration: none;
364 | }
365 |
366 | nav li.active button, nav li.active a, nav li.active a:link, nav li.active a:visited {
367 | color: #191B1D;
368 | background: #E2A037;
369 | }
370 |
371 | /* TABLE OF CONTENTS */
372 |
373 | #toc {text-align: right;}
374 |
375 | #toc dt a, #toc dt a:link, #toc dt a:visited {
376 | color: #000;
377 | background: #E2A037;
378 | padding: 0.3em 0.5em;
379 | border-radius: 0.3em;
380 | }
381 | #toc dt a::after {content: " \23F7";}
382 | #toc dt a:hover {text-decoration: none; color: #FFF; background: #133639;}
383 |
384 | #tocDD {
385 | text-align: left;
386 | background: #F2D3A1;
387 | margin-top: 0.5rem;
388 | }
389 | #tocDD ul {padding: 1rem; margin: 0 1rem 0;}
390 | #tocDD li + li {margin-top: 0.5em;}
391 |
392 | /* --------------------------------------------------------------------------- */
393 | /* ---------------------------------- ARTICLES/SECTIONS ---------------------- */
394 | /* --------------------------------------------------------------------------- */
395 |
396 | article {max-width: 98em;}
397 |
398 | article > .hd:first-of-type h2 {margin-top: 0;}
399 |
400 | article p + p, section p + p {margin-top: 0.8em;}
401 | article ul, section ul, article ol, section ol {margin: 1em;}
402 | article li, section li {margin: 0 0 0.8em 0;}
403 |
404 | /* FIGURES */
405 |
406 | figcaption {
407 | font: 0.8em open_sansitalic, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
408 | text-align: right;
409 | margin: 0.3em 1rem;
410 | }
411 |
412 | /* Notes */
413 |
414 | .note {
415 | font: 0.9em open_sansitalic, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
416 | padding-top: 2rem;
417 | margin-top: 2rem;
418 | border-top: 1px dotted #2E3135;
419 | }
420 |
421 | /* --------------------------------------------------------------------------- */
422 | /* ---------------------------------- UTILITIES ------------------------------ */
423 | /* --------------------------------------------------------------------------- */
424 |
425 | .links-list a {
426 | display: block;
427 | font-family: open_sansbold, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
428 | text-decoration: underline;
429 | color: #2E3135;
430 | background: transparent;
431 | }
432 |
433 | p.topLink {text-align: center; margin: 1rem 0;}
434 | p.topLink a {background: transparent;}
435 |
436 | .permalink {
437 | position: absolute;
438 | left: -9000px;
439 | clip: rect(1px);
440 | display: inline-block;
441 | width: 3em;
442 | height: 1em;
443 | text-align: center;
444 | color: #FFF;
445 | background: #133639;
446 | padding: 1em 0;
447 | margin-bottom: 2rem;
448 | border-radius: 3em;
449 | }
450 |
451 | /* --------------------------------------------------------------------------- */
452 | /* ---------------------------------- SPECIFICS ------------------------------ */
453 | /* --------------------------------------------------------------------------- */
454 |
455 | .downloads strong {
456 | display: block;
457 | font-family: open_sansregular, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
458 | }
459 |
460 | /* Contextual menu */
461 |
462 | .heading {
463 | margin-top: 1rem;
464 | }
465 | code + .heading {margin-top: 2rem;}
466 |
467 | dl.api {
468 | background: #FFF;
469 | padding: 0.5rem 1rem 1rem;
470 | margin: 2rem 0;
471 | border: 1px solid #63B7C2;
472 | }
473 |
474 | dt.heading {margin-bottom: 1rem;}
475 |
476 | dd.detail.hidden {display: none;}
477 |
478 |
479 | .highlight {
480 | font: 1.3em/1.4 open_sansbold, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
481 | padding: 1rem;
482 | margin: 2rem 0;
483 | border-top: 1px solid #E2A037;
484 | border-bottom: 1px solid #E2A037;
485 | }
486 |
487 |
488 | /* DEMOS */
489 |
490 | div.demo {
491 | clear: both;
492 | padding: 1rem 5%;
493 | margin: 2rem 0;
494 | border: 1px solid #63B7C2;
495 | }
496 |
497 | div.demo .editLink, input[type=button] {
498 | font-family: open_sansbold, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
499 | text-transform: uppercase;
500 | color: #FFF;
501 | background: #286278;
502 | padding: 0.3em 0.5em;
503 | border: none;
504 | border-radius: 3px;
505 | box-shadow: 0 1px 2px rgba(0,0,0,.7);
506 | transition: border-radius;
507 | -webkit-transition: border-radius;
508 | }
509 |
510 | div.demo .editLink:hover, input[type=button]:hover {text-decoration: none; border-radius: 0; box-shadow: none;}
511 |
512 | p.morphCtrl {text-align: right; margin: 1rem 0 0.5rem;}
513 |
514 |
515 |
516 | /* LISTS */
517 | ol.lsn {
518 | counter-reset: level;
519 | }
520 | ol.lsn li {
521 | display: block;
522 | text-indent: -1em;
523 | }
524 | ol.lsn ol li {
525 | display: block;
526 | text-indent: -2em;
527 | margin-left: 1.3em;
528 | }
529 | ol.lsn li::before {
530 | content: counters(level, ".")". ";
531 | counter-increment: level;
532 | }
533 |
534 | /* HELP */
535 | p.guidance {
536 | min-height: 30px;
537 | font-family: open_sansitalic, Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
538 | background: url(../img/guidance.svg) 0 0 no-repeat;
539 | padding: 0 0 2rem 40px;
540 | margin: 2rem 0 0;
541 | }
542 |
543 | /* DEMO PAGES */
544 |
545 | div.demo-block {
546 | clear: both;
547 | padding: 1rem 0;
548 | border-top: 2px dotted #63B7C2;
549 | }
550 |
551 | div.demo-block h2 {margin: 0 0 0.5em;}
552 |
553 | #demos nav {text-align: left;}
554 | #demos nav a, #demos nav a:link, #demos nav a:visited {
555 | width: auto;
556 | font-size: 90%;
557 | font-weight: normal;
558 | text-transform: none;
559 | background: transparent;
560 | padding: 1em 5%;
561 | }
562 | #demos nav a:hover {color: #FFF; text-decoration: underline;}
563 | #demos nav a::before {content: "< ";}
564 |
565 |
566 | /* VISUAL ARIA */
567 |
568 | #bookmarklet {background: #D9E8E9; padding: 0.8rem 1rem;}
569 |
570 | #bookmarklet .content {padding-bottom: 1rem; border-bottom: 3px dotted #E2A037;}
571 | #bookmarklet p + p {margin-top: 0.8em;}
572 |
573 | #bookmarklet textarea {width: 90%;}
574 |
575 | #bookmarkletBtn {
576 | display: inline-block;
577 | color: #000;
578 | background: #E2A037;
579 | padding: 0.3em 0.8em;
580 | margin-bottom: 2rem;
581 | border-radius: 0.3em;
582 | }
583 |
584 | #bookmarkletBtn:hover {text-decoration: none; color: #FFF; background: #133639;}
585 |
586 |
587 | .purpleTltp {
588 | background-color: white;
589 | color: purple;
590 | }
591 |
592 | .blueTltp {
593 | background-color: white;
594 | color: blue;
595 | }
596 |
597 | .redTltp {
598 | background-color: yellow;
599 | color: red;
600 | }
601 |
602 | .fuchsiaTltp {
603 | background-color: white;
604 | color: fuchsia;
605 | }
606 |
607 | .orangeTltp {
608 | background-color: black;
609 | color: orange;
610 | }
611 |
612 | .greenTltp {
613 | background-color: white;
614 | color: green;
615 | }
616 |
617 | dl.calculation {
618 | }
619 |
620 | dl.calculation dt {
621 | font-size: 1em;
622 | font-weight: bold;
623 | padding-top: 0.5rem;
624 | margin: 1em 0 0.8em;
625 | border-top: 1px solid #D0D0D0;
626 | }
627 |
628 | /* --------------------------------------------------------------------------- */
629 | /* ---------------------------------- QUERIES -------------------------------- */
630 | /* --------------------------------------------------------------------------- */
631 |
632 |
633 | @media screen and (min-width: 780px) {
634 | nav {
635 | display: -webkit-flex;
636 | -webkit-justify-content: flex-start;
637 | display: -ms-flex;
638 | -ms-justify-content: flex-start;
639 | display: flex;
640 | justify-content: flex-start;
641 | background: #0A1C1D;
642 | }
643 | nav button, nav a, nav a:link, nav a:visited {
644 | padding: 0.5em 1em;
645 | margin: 0 0.5em 0;
646 | border: none;
647 | }
648 | nav a:nth-child(3) {padding-left: 120px; margin-left: 5%;}
649 |
650 | div.demo-block .trigger {
651 | float: right;
652 | width: 35%;
653 | text-align: right;
654 | margin-top: -3.5rem;
655 | }
656 |
657 | aside section div.content {
658 | display: -webkit-flex;
659 | display: -ms-flex;
660 | display: flex;
661 | }
662 |
663 | aside section div.notes {max-width: 35em; margin: 0.8rem 0 2rem 5%;}
664 |
665 | #bookmarklet {
666 | display: -webkit-flex;
667 | display: -ms-flex;
668 | display: flex;
669 | }
670 | #bookmarklet div.content {
671 | -webkit-flex: 1 1 70%;
672 | -ms-flex: 1 1 70%;
673 | flex: 1 1 70%;
674 | margin-left: 5%;
675 | }
676 | }
677 |
678 | @media screen and (min-width: 1000px) {
679 | h1 {font-size: 5vw; line-height: 80px; text-align: left; padding: 0 0 0 120px; margin-left: 5%;}
680 | p.logo {width: 80px; left: 5%; margin: 0;}
681 |
682 | /*
683 | main {min-height: 800px;}
684 | */
685 |
686 | h2 {font-size: 2.5em;}
687 | aside section h2 {font-size: 2em;}
688 |
689 | ul.menuList {display: block; background: transparent;}
690 | ul.menuList li {margin-bottom: 0.5rem;}
691 |
692 | nav {text-align: left; margin-top: 3rem;}
693 |
694 | th, td {font-size: 1em;}
695 |
696 | footer {width: 98%; text-align: left; padding: 0 1%;}
697 | footer ul {width: 60%; margin-top: -4rem;}
698 | p.topLink {
699 | float: right;
700 | width: 50px;
701 | text-align: right;
702 | margin: 0;
703 | }
704 | }
705 |
706 | main {margin: 50px auto;}
707 | #testElement {margin: 0 0 100px 150px;}
708 | #testSection1 p {float: left; max-width: 40%;}
709 | #testSection1 img {max-height: 450px;}
710 |
711 | @media screen and (min-width: 1200px) {
712 | p, li, dt, dd {font-size: 1.1em;}
713 | aside p, aside li {font-size: 1em;}
714 | }
715 |
716 |
717 | @media screen and (min-width: 1600px) {
718 | nav {
719 | -webkit-justify-content: flex-start;
720 | -ms-justify-content: flex-start;
721 | justify-content: flex-start;
722 | background: #0A1C1D;
723 | }
724 | h1 {font-size: 2.3vw;}
725 | }
726 |
--------------------------------------------------------------------------------
/docs/css/radios.css:
--------------------------------------------------------------------------------
1 |
2 | h2 {font-size: 1.2em; margin-bottom: 2rem;}
3 | fieldset {
4 | padding: 0 1rem 1rem;
5 | margin-top: 2rem;
6 | border: 1px solid #4E4E4E;
7 | }
8 |
9 | legend {
10 | font-size: 1em;
11 | font-weight: bold;
12 | text-align: center;
13 | }
14 |
15 | div.rGroup ul {margin-top: 2rem;}
16 | div.rGroup li {
17 | width: 8em;
18 | list-style-type: none;
19 | text-align: center;
20 | margin: 0.5rem auto;
21 | }
22 |
23 | div.rGroup a.accRadio {
24 | display: block;
25 | font-size: 100%;
26 | text-decoration: none;
27 | color: #FFF;
28 | background: #286278;
29 | padding:0.3em 0.5em;
30 | border: none;
31 | box-shadow: 0 1px 2px rgba(0,0,0,.7);
32 | border-radius: 2px;
33 | cursor: pointer;
34 | }
35 | div.rGroup a.accRadio:hover, div.rGroup a.accRadio:focus, div.rGroup a.accRadio[aria-checked="true"] {
36 | color: #FFF;
37 | background-color: #C13836;
38 | box-shadow: none;
39 | border-radius: 0;
40 | }
41 |
42 | fieldset.radiogroup label {
43 | cursor: pointer;
44 | }
45 |
46 | @media screen and (min-width: 700px) {
47 | div.demo-block {
48 | display: flex;
49 | }
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Bold-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Bold-webfont.eot
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Bold-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Bold-webfont.ttf
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Bold-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Bold-webfont.woff
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Italic-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Italic-webfont.eot
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Italic-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Italic-webfont.ttf
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Italic-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Italic-webfont.woff
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Light-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Light-webfont.eot
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Light-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Light-webfont.ttf
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Light-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Light-webfont.woff
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Regular-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Regular-webfont.eot
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Regular-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Regular-webfont.ttf
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/OpenSans-Regular-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/OpenSans-Regular-webfont.woff
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/anton-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/anton-webfont.eot
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/anton-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/anton-webfont.ttf
--------------------------------------------------------------------------------
/docs/github-bookmarklet/css/anton-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/css/anton-webfont.woff
--------------------------------------------------------------------------------
/docs/github-bookmarklet/img/sprite.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
9 |
10 |
11 |
12 |
14 |
15 |
16 |
17 |
19 |
20 |
21 |
22 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/docs/github-bookmarklet/img/up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/img/up.png
--------------------------------------------------------------------------------
/docs/github-bookmarklet/img/whatsock.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
13 |
15 |
18 |
20 |
25 |
29 |
32 |
34 |
35 |
39 |
41 |
44 |
47 |
51 |
52 |
55 |
59 |
61 |
63 |
65 |
69 |
73 |
78 |
79 |
83 |
87 |
90 |
92 |
97 |
99 |
101 |
106 |
109 |
111 |
114 |
116 |
117 |
121 |
123 |
124 |
125 |
131 |
149 |
150 |
151 |
--------------------------------------------------------------------------------
/docs/github-bookmarklet/img/whatsock_logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/github-bookmarklet/img/whatsock_logo.jpg
--------------------------------------------------------------------------------
/docs/github-bookmarklet/js/setup.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | $A.bind(window, "load", function () {
3 | $A.bind("p.topLink > a", "click", function (ev) {
4 | $A.setFocus($A.query("h1")[0]);
5 | ev.preventDefault();
6 | });
7 |
8 | $A.bind("#mlto", {
9 | click: function (ev) {
10 | this.href = "mailto:bryan.garaventa@whatsock.com";
11 | },
12 | blur: function (ev) {
13 | this.href = "#";
14 | },
15 | });
16 |
17 | // Generate permalinks
18 | $A.query("h2, h3, h4, h5, h6", function (i, o) {
19 | if (!$A.hasClass(o, "nopermalink")) {
20 | var d = o.parentNode,
21 | a = $A.createEl(
22 | "a",
23 | {
24 | href:
25 | (isVisualARIA
26 | ? "https://whatsock.github.io/visual-aria/github-bookmarklet/visual-aria.htm#"
27 | : "http://whatsock.com/training/matrices/#") + d.id,
28 | title:
29 | "Permalink: " +
30 | (isVisualARIA
31 | ? "https://whatsock.github.io/visual-aria/github-bookmarklet/visual-aria.htm#"
32 | : "http://whatsock.com/training/matrices/#") +
33 | d.id,
34 | "aria-label":
35 | "Permalink: " +
36 | (isVisualARIA
37 | ? "https://whatsock.github.io/visual-aria/github-bookmarklet/visual-aria.htm#"
38 | : "http://whatsock.com/training/matrices/#") +
39 | d.id,
40 | },
41 | null,
42 | "permalink"
43 | );
44 |
45 | a.innerHTML = '# ';
46 | d.appendChild(a);
47 | $A.css(a, "left", -a.offsetWidth);
48 | }
49 | });
50 |
51 | if ($A.getEl("ph")) createHeaderNav();
52 |
53 | if ($A.getEl("tocBtn")) generateTOC();
54 | });
55 |
56 | if (top != window)
57 | top.location.href = "http://whatsock.com/training/matrices/";
58 |
59 | var hds = {},
60 | createHeaderNav = function () {
61 | var ph = $A.getEl("ph"),
62 | hs = $A.query("div.hd > h2");
63 | hds = {};
64 |
65 | for (var i = 0; i < hs.length; i++) {
66 | var h = hs[i];
67 |
68 | if (ph && h.className !== "skip") {
69 | h.id = "H" + $A.genId();
70 | var a = $A.createEl(
71 | "a",
72 | {
73 | href: "#",
74 | },
75 | null,
76 | h.id,
77 | document.createTextNode($A.getText(h))
78 | );
79 |
80 | ph.appendChild(a);
81 | $A.setAttr(h, "tabindex", -1);
82 | hds[h.id] = h;
83 | $A.bind(a, "click", function (ev) {
84 | hds[this.className].focus();
85 | ev.preventDefault();
86 | });
87 |
88 | /*if (i < (hs.length - 1))
89 | ph.appendChild($A.createEl('span', null, null, null, document.createTextNode(' | ')));*/
90 | }
91 | }
92 | },
93 | generateTOC = function () {
94 | var links = [],
95 | pLevel = 0,
96 | map = {};
97 |
98 | $A.query("div.hd", document, function (i, o) {
99 | var heading = $A.query("h1, h2, h3, h4, h5, h6", o)[0],
100 | level = parseInt(heading.nodeName.substring(1)),
101 | a = $A.createEl("a", {
102 | href: "#" + o.id,
103 | }),
104 | props = {
105 | hd: o,
106 | heading: heading,
107 | headingText: $A.getText(heading),
108 | level: level,
109 | map: {},
110 | a: a,
111 | li: $A.createEl("li"),
112 | };
113 |
114 | if (level > 1) props.pSibling = map[level];
115 |
116 | if (!props.pSibling) props.ul = $A.createEl("ul");
117 | else if (props.pSibling) props.ul = props.pSibling.ul;
118 |
119 | if (level === 1) {
120 | map[1] = props;
121 | map[2] = map[3] = map[4] = map[5] = map[6] = null;
122 | } else if (level === 2) {
123 | map[2] = props;
124 | map[3] = map[4] = map[5] = map[6] = null;
125 | } else if (level === 3) {
126 | map[3] = props;
127 | map[4] = map[5] = map[6] = null;
128 | } else if (level === 4) {
129 | map[4] = props;
130 | map[5] = map[6] = null;
131 | } else if (level === 5) {
132 | map[5] = props;
133 | map[6] = null;
134 | } else if (level === 6) {
135 | map[6] = props;
136 | }
137 |
138 | for (var x = 1; x <= 6; x++) props.map[x] = map[x];
139 | a.innerHTML = props.headingText;
140 | props.li.appendChild(a);
141 |
142 | if (level > 1 && !props.pSibling)
143 | $A.setAttr(
144 | props.ul,
145 | "aria-label",
146 | props.map[level - 1].headingText.substring(
147 | props.level > 2
148 | ? props.map[level - 1].headingText.indexOf(": ") + 2
149 | : 1
150 | )
151 | );
152 | $A.internal.data(a, "props", props);
153 | links.push(a);
154 | pLevel = level;
155 | });
156 |
157 | var list = $A.createEl(
158 | "ul",
159 | {
160 | "aria-label": "Table of Contents",
161 | },
162 | {
163 | display: "none",
164 | }
165 | );
166 |
167 | $A.query(links, function (i, a) {
168 | var props = $A.internal.data(a, "props");
169 |
170 | if (props.level === 1) list.appendChild(props.li);
171 | else if (props.level > 1 && !props.pSibling && props.ul) {
172 | props.map[props.level - 1].li.appendChild(props.ul);
173 | props.ul.appendChild(props.li);
174 | } else if (props.level > 1 && props.pSibling && props.ul)
175 | props.ul.appendChild(props.li);
176 | });
177 |
178 | $A.getEl("tocDD").appendChild(list);
179 |
180 | $A.bind("#tocDD a", "click", function (ev) {
181 | $A.internal.data(this, "props").hd.focus();
182 | ev.preventDefault();
183 | });
184 |
185 | var isVisible = false;
186 |
187 | $A.bind("#tocBtn", "click", function (ev) {
188 | if (isVisible) isVisible = false;
189 | else isVisible = true;
190 | $A.setAttr(this, "aria-expanded", isVisible ? "true" : "false");
191 | $A[isVisible ? "addClass" : "remClass"](this, "pressed");
192 | $A.css(list, "display", isVisible ? "block" : "none");
193 | ev.preventDefault();
194 | });
195 | };
196 | })();
197 |
--------------------------------------------------------------------------------
/docs/github-bookmarklet/visual-aria.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | The Visual ARIA Bookmarklet
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
31 |
32 |
33 |
34 |
35 |
36 |
Visual ARIA allows engineers, testers, educators, and students to physically observe ARIA usage within web technologies, including ARIA 1.1 structural, live region, and widget roles, proper nesting and focus management, plus requisite and optional supporting attributes to aid in development.
37 |
Download Visual ARIA from GitHub to view the offline source code for Visual ARIA, which includes important information that explains how it works, plus an example exercise for building a simulated radio button construct using Visual ARIA.
38 |
Additional resources:
39 |
50 |
51 |
52 |
53 |
54 | Visual ARIA Bookmarklet
55 |
56 |
Instructions:
57 |
Right click the "Visual ARIA Bookmarklet" button, then choose Add to
58 | Favorites or Add to Bookmarks .
59 | The Visual ARIA Bookmarklet can then
60 | be run upon any webpage by choosing the bookmarklet from within your
61 | Favorites or Bookmarks menu.
62 |
Alternatively, the bookmarklet can be added manually within browsers such
63 | as Chrome and Safari, by activating New within the Bookmark Manager,
64 | then pasting the below code into the URL field.
65 |
66 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
Target Audience
83 |
84 |
85 |
86 | Visual ARIA can be used within classrooms by educators to physically show sighted students what ARIA does and how it works, and how the improper use of ARIA causes accessibility issues when misapplied.
87 | Sighted students can use Visual ARIA to evaluate their own projects as they learn accessible coding practices, with real-time feedback to identify their mistakes and coach them when necessary.
88 | Online learning programs can incorporate Visual ARIA to provide real-time feedback as students build test widgets to practice through experience and repetition.
89 | Sighted Quality Analysis teams can use Visual ARIA to reliably evaluate ARIA usage and related interactivity for all public and private services and products, without having to first understand or have experience using Assistive Technologies in advance.
90 | Teams of sighted engineers can incorporate Visual ARIA within the development process to see how ARIA is being used within their projects, and whether ARIA is being used correctly according to spec when interacted with.
91 | Any sighted person who is interested in ARIA can use Visual ARIA to see where and how ARIA is used on any website to better understand how Assistive Technology users are impacted by its use or misuse.
92 |
93 |
94 |
95 |
How It Works
96 |
97 |
98 |
The bookmarklet script includes a small amount of JavaScript, which
99 | loads the Visual ARIA JavaScript setup file .
100 |
This small JavaScript file then loads the roles.css stylesheet, which comprises all of the Visual ARIA cascading logic functionality.
101 |
The JavaScript file then monitors the page for changes to ARIA roles and supporting attributes associated with HTML input and img elements, which is necessary since these elements don't support the use of the :before and :after CSS pseudo elements.
102 |
Since all of the processing power is handled using CSS, visual feedback by Visual ARIA is instantaneous, and should work correctly within any CSS3 compliant browser within any operating system on any desktop or mobile device.
103 |
Though the coaching advice within Visual ARIA is geared for desktop keyboard interactions, the ARIA spec compliance algorithms conveyed by Visual ARIA are applicable to both desktop and mobile platforms equally.
104 |
105 |
106 |
Instructions for Use
107 |
108 |
109 |
Visual ARIA is very simple to use.
110 |
111 | Navigate to the webpage that you wish to examine.
112 | Activate the Visual ARIA Bookmarklet from your Favorites or Bookmarks menu, and wait for Visual ARIA to load. The time for this may vary depending on the speed of your internet connection.
113 |
114 |
You will then see various colored borders where ARIA roles are detected, and tooltips to convey their purpose and supporting attributes.
115 |
These borders and tooltips follow several distinct color schemes to identify the differences between static and interactive widget roles.
116 |
To view the Alternative Text Calculation for any form field, link, or simple interactive widget role, hover the mouse over the active element.
117 |
118 |
119 |
Static Roles
120 |
121 |
122 |
123 | Purple border with purple tooltip:
124 | Identifies landmark and region roles.
125 | Blue border with blue tooltip:
126 | Identifies structural roles.
127 | Red border with red tooltip:
128 | Identifies role usage errors within structural role usage.
129 |
130 |
131 |
132 |
Live Region Roles
133 |
134 |
135 |
136 | Fuchsia border with fuchsia tooltip:
137 | Identifies live region roles and associated attributes.
138 |
139 |
140 |
141 |
Interactive Roles
142 |
143 |
144 |
145 | Orange border with orange tooltip:
146 | Identifies technically compliant interactive role usage.
147 | (Requires keyboard testing to validate functionality)
148 |
149 | Green border with green tooltip:
150 | Identifies technically compliant interactive role usage that matches
151 | the correct focus management for that role type.
152 | Red border with red tooltip: Identifies role usage
153 | and focus management errors within interactive role usage.
154 |
155 |
When interacting with keyboard accessible widget roles, the goal is to turn both the focus outline and border of the focused widget role green . This conveys that focus management and ARIA widget role usage are correctly synchronized.
156 |
If however you see two different colored borders on the same widget role, such as orange and red , then focus management and ARIA widget role usage for this implementation are incorrect and not programmed according to spec.
157 |
158 |
159 |
Alternative Text Calculation
160 |
161 |
162 |
Visual ARIA will automatically calculate the Alternative Text Calculation for any form field, link, or simple ARIA interactive widget role, and display this information when the mouse is hovered over the element.
163 |
There are some important details about this feature that need to be explained however.
164 |
There are two properties that need to be understood within the Accessibility Tree, the Name, and the Description. The Name represents the calculated label text for the active element, and the Description represents supplementary information that can be used by Assistive Technologies to accompany the Name.
165 |
166 |
167 |
Name Calculation
168 |
169 |
170 |
171 | aria-labelledby
172 | Caveats: Must not be included with aria-label
, nor with the HTML
173 | label element with matching 'for'
and 'id'
attributes. Also,
174 | aria-labelledby
cannot recursively reference other elements
175 | that include aria-labelledby
. The presence of role="presentation"
176 | or role="none"
will nullify aria-labelledby
on the same node.
177 |
178 |
179 | aria-label
180 | Caveats: Only if aria-labelledby
is not set. If included within a
181 | container referenced via aria-labelledby
, the HTML label element with
182 | matching 'for'
and 'id'
attributes, or
183 | aria-describedby
, the value of
184 | aria-label
will supersede any embedded content or additional aria-label
185 | attribute values; which will be ignored when setting the Accessible Name
186 | of the parent role. The presence of role="presentation"
or role="none"
187 | will nullify aria-label
on the same node.
188 |
189 |
190 | HTML label element with matching 'for'
and 'id'
attributes
191 | Caveats: Only if aria-labelledby
or aria-label
is not set; on HTML
192 | input and select elements only.
193 |
194 |
195 | HTML 'alt'
attribute
196 | Caveats: Only if aria-labelledby
or aria-label
is not set;
197 | on HTML img elements only. The presence of role="presentation"
or role="none"
198 | will nullify 'alt'
on the same node.
199 |
200 |
201 | HTML 'title'
attribute
202 | Caveats: Only if aria-labelledby
, aria-label
, or 'alt'
is not set;
203 | on HTML img elements only. The presence of role="presentation"
or role="none"
204 | will nullify 'title'
on the same node.
205 |
206 |
207 |
208 |
209 |
Description Calculation
210 |
211 |
212 |
213 | aria-describedby
214 | Caveats: Must not be included with the HTML 'title'
attribute, which
215 | will be overwritten by aria-describedby
. The presence of
216 | role="presentation"
or role="none"
will nullify
217 | aria-describedby
on the same node.
218 |
219 | HTML 'title' attribute
220 | Caveats: Only when applied to active elements that are not HTML img
221 | elements. Must not be included with aria-describedby
, which will overwrite
222 | the value of 'title'
as the Description. The presence of
223 | role="presentation"
or role="none"
will nullify 'title'
224 | on the same node.
225 |
226 |
227 |
228 |
229 |
Important Details
230 |
231 |
232 |
Any use of aria-hidden="true"
or the CSS properties
233 | display:none
or visibility:hidden
, will cancel the naming
234 | calculation for the referenced element and all elements within
235 | the subtree of that element.
236 |
237 |
Additionally, the presence of CSS content via the
238 | ::before
and ::after
pseudo elements are also included as part
239 | of the naming calculation.
240 |
241 |
The Name and Description exposed by Visual ARIA strictly
242 | follows the Alternative Text Calculation for interactive elements, which may not exactly match what is represented by the Accessibility Tree within certain browsers, nor what is conveyed by Assistive Technologies.
243 |
The value in exposing this calculation however, is to identify current bugs within browsers that need to be reported to their venders when discovered using Object Inspector for example, as well as bugs with Assistive
244 | Technologies that need to be reported to AT venders. This will lead
245 | to better interoperability support in the future.
246 |
It is important to note that Visual ARIA will include content
247 | added using CSS pseudo elements as part of the estimated naming
248 | calculation, but not for the element that includes the specific role. Otherwise the calculation would overwrite the status tooltips rendered by Visual ARIA.
249 |
250 |
251 |
Supported Active Element Types
252 |
253 |
254 |
255 | All HTML input, select, and button elements.
256 | All HTML A elements that include an 'href' attribute.
257 | All HTML5 progress elements.
258 | All of the ARIA roles:
259 | "button", "checkbox", "link", "searchbox", "scrollbar", "slider", "spinbutton", "switch", "textbox", "combobox", "option", "menuitem", "menuitemcheckbox", "menuitemradio", "radio", "tab", "treeitem"
260 |
261 |
262 |
263 |
Notes and Limitations
264 |
265 |
266 |
Since the HTML img, input, textarea, and progress elements cannot support the use of the :before and :after CSS pseudo elements, tooltip and border coloration may sometimes differ.
267 |
Please address any questions or support issues to the Accessibility Innovators LinkedIn group.
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 | Related resources:
276 |
277 |
281 |
282 |
Visual ARIA is a cascading logic program written using CSS, which allows any sighted person to physically see the use of ARIA upon any public website, including all landmark and region roles, structural roles, live regions, pseudo interactive constructs, and all interactive widget roles mapped within ARIA 1.1.
283 |
Moreover, Visual ARIA provides real-time visual feedback as interactive widgets are focused to and updated, and will also convey when widget roles are not being interacted with properly due to incorrect focus management or improper role usage.
284 |
Visual ARIA is meant to address the global problem that ARIA is an invisible technology, making it extremely difficult for mainstream sighted developers to understand and implement properly with consistent reliability.
285 |
For example, when developers who implement ARIA receive no direct input to validate their efforts during the process of development, and who have little to no understanding of how Assistive Technologies work, they have no way to assess the value of what they are doing, nor is there any way for them to learn from their mistakes at the same time. This is the primary reason why the vast majority of mainstream sighted developers still cannot understand the proper use of ARIA; because there is nothing for them to see.
286 |
Visual ARIA solves this problem by providing direct visual feedback for sighted engineers during the agile development process. The source code for Visual ARIA is included within the ARIA Role Conformance Matrices GitHub project as core mapping algorithms, which can be downloaded for offline usage or behind corporate firewalls.
287 |
Please file relevant bugs on The ARIA Role Conformance Matrices GitHub project page if issues are discovered.
288 |
Sincerely,Bryan Garaventa
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
302 |
303 |
304 |
305 |
306 |
307 |
--------------------------------------------------------------------------------
/docs/img/cresent_europa.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/WhatSock/visual-aria/9543f5b1943271d8c3a12fc5ed5badd8a37a6c80/docs/img/cresent_europa.jpg
--------------------------------------------------------------------------------
/docs/js/radios.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 | var index = 0,
3 | radios = $('a[role="radio"]');
4 | radios.bind({
5 | keydown: function (ev) {
6 | var k = ev.which || ev.keyCode;
7 |
8 | if (k >= 37 && k <= 40) {
9 | if (k == 37 || k == 38) {
10 | if (index > 0) index--;
11 | else index = radios.length - 1;
12 | } else if (k == 39 || k == 40) {
13 | if (index < radios.length - 1) index++;
14 | else index = 0;
15 | }
16 | $(radios.get(index)).click();
17 | ev.preventDefault();
18 | }
19 | },
20 | click: function (ev) {
21 | index = $.inArray(this, radios.get());
22 | setFocus();
23 | ev.preventDefault();
24 | },
25 | });
26 | var setFocus = function () {
27 | radios.attr({
28 | tabindex: "-1",
29 | "aria-checked": "false",
30 | });
31 |
32 | $(radios.get(index))
33 | .attr({
34 | tabindex: "0",
35 | "aria-checked": "true",
36 | })
37 | .focus();
38 | };
39 | });
40 |
--------------------------------------------------------------------------------
/docs/visual-aria/public/1roles.css:
--------------------------------------------------------------------------------
1 | /*
2 | Visual ARIA Bookmarklet (Revision: 9/9/2022)
3 | Copyright 2022 Bryan Garaventa (http://whatsock.com/training/matrices/visual-aria.htm)
4 | Part of the ARIA Role Conformance Matrices, distributed under the terms of the Open Source Initiative OSI - MIT License
5 | */
6 |
7 | /* Laurence Lewis -Name Prohibited */
8 |
9 | div:not([role])[aria-label][data-ws-name-prohibited-aria],
10 | span:not([role])[aria-label][data-ws-name-prohibited-aria],
11 | *[aria-label][data-ws-name-prohibited-aria]
12 | {
13 | border: 2px solid red;
14 | }
15 | *[aria-label][data-ws-name-prohibited-aria]::before {
16 | display: table;
17 | height: auto;
18 | width: auto;
19 | position: relative;
20 | padding: 1px 0;
21 | background-color: #FFFFE5;
22 | color: red;
23 | font-size: .9rem;
24 | font-weight: 900;
25 | content: " [Invalid] aria-label cannot be used on " attr(data-ws-name-prohibited-aria) " ";
26 | }
27 | div:not([role])[aria-labelledby][data-ws-name-prohibited-aria],
28 | span:not([role])[aria-labelledby][data-ws-name-prohibited-aria],
29 | *[aria-labelledby][data-ws-name-prohibited-aria]
30 | {
31 | border: 2px solid red;
32 | }
33 | *[aria-labelledby][data-ws-name-prohibited-aria]::before {
34 | display: table;
35 | height: auto;
36 | width: auto;
37 | position: relative;
38 | padding: 1px 0;
39 | background-color: #FFFFE5;
40 | color: red;
41 | font-size: .9rem;
42 | font-weight: 900;
43 | content: " [Invalid] aria-labelledby cannot be used on " attr(data-ws-name-prohibited-aria) " ";
44 | }
45 | div:not([role])[aria-label][data-ws-name-prohibited-html],
46 | span:not([role])[aria-label][data-ws-name-prohibited-html],
47 | *[aria-label][data-ws-name-prohibited-html]
48 | {
49 | border: 2px solid red;
50 | }
51 | *[aria-label][data-ws-name-prohibited-html]::before {
52 | display: table;
53 | height: auto;
54 | width: auto;
55 | position: relative;
56 | padding: 1px 0;
57 | background-color: #FFFFE5;
58 | color: red;
59 | font-size: .9rem;
60 | font-weight: 900;
61 | content: " [Invalid] aria-label cannot be used on HTML element " attr(data-ws-name-prohibited-html) " ";
62 | }
63 | div:not([role])[aria-labelledby][data-ws-name-prohibited-html],
64 | span:not([role])[aria-labelledby][data-ws-name-prohibited-html],
65 | *[aria-labelledby][data-ws-name-prohibited-html]
66 | {
67 | border: 2px solid red;
68 | }
69 | *[aria-labelledby][data-ws-name-prohibited-html]::before {
70 | display: table;
71 | height: auto;
72 | width: auto;
73 | position: relative;
74 | padding: 1px 0;
75 | background-color: #FFFFE5;
76 | color: red;
77 | font-size: .9rem;
78 | font-weight: 900;
79 | content: " [Invalid] aria-labelledby cannot be used on HTML element " attr(data-ws-name-prohibited-html) " ";
80 | }
81 | /* END */
82 |
83 | *[aria-label]:focus:after {
84 | display: table;
85 | height: auto; width: auto;
86 | position: relative; padding: 1px 0;
87 | z-index: 10000;
88 | background-color: white;
89 | color: green;
90 | font-size: .9rem; font-weight: 900;
91 | content: ' [ARIA] aria-label=' attr(aria-label) ' ';
92 | }
93 | *[data-ws-bm-aria-label]:before {
94 | display: table;
95 | height: auto; width: auto;
96 | position: relative; padding: 1px 0;
97 | background-color: white;
98 | color: green;
99 | font-size: .9rem; font-weight: 900;
100 | content: ' [ARIA] aria-label=' attr(data-ws-bm-aria-label) ' ';
101 | }
102 | *[aria-labelledby]:focus:after {
103 | display: table;
104 | height: auto; width: auto;
105 | position: relative; padding: 1px 0;
106 | z-index: 10000;
107 | background-color: white;
108 | color: green;
109 | font-size: .9rem; font-weight: 900;
110 | content: ' [ARIA] aria-labelledby=' attr(aria-labelledby) ' ';
111 | }
112 | *[data-ws-bm-aria-labelledby]:before {
113 | display: table;
114 | height: auto; width: auto;
115 | position: relative; padding: 1px 0;
116 | background-color: white;
117 | color: green;
118 | font-size: .9rem; font-weight: 900;
119 | content: ' [ARIA] aria-labelledby=' attr(data-ws-bm-aria-labelledby) ' ';
120 | }
121 | *[aria-describedby]:focus:after {
122 | display: table;
123 | height: auto; width: auto;
124 | position: relative; padding: 1px 0;
125 | z-index: 10000;
126 | background-color: white;
127 | color: green;
128 | font-size: .9rem; font-weight: 900;
129 | content: ' [ARIA] aria-describedby=' attr(aria-describedby) ' ';
130 | }
131 | *[data-ws-bm-aria-describedby]:before {
132 | display: table;
133 | height: auto; width: auto;
134 | position: relative; padding: 1px 0;
135 | background-color: white;
136 | color: green;
137 | font-size: .9rem; font-weight: 900;
138 | content: ' [ARIA] aria-describedby=' attr(data-ws-bm-aria-describedby) ' ';
139 | }
140 | *[aria-label][aria-describedby]:focus:after {
141 | display: table;
142 | height: auto; width: auto;
143 | position: relative; padding: 1px 0;
144 | z-index: 10000;
145 | background-color: white;
146 | color: green;
147 | font-size: .9rem; font-weight: 900;
148 | content: ' [ARIA] aria-label=' attr(aria-label) ' aria-describedby=' attr(aria-describedby) ' ';
149 | }
150 | *[data-ws-bm-aria-label][data-ws-bm-aria-describedby]:before {
151 | display: table;
152 | height: auto; width: auto;
153 | position: relative; padding: 1px 0;
154 | background-color: white;
155 | color: green;
156 | font-size: .9rem; font-weight: 900;
157 | content: ' [ARIA] aria-label=' attr(data-ws-bm-aria-label) ' aria-describedby=' attr(data-ws-bm-aria-describedby) ' ';
158 | }
159 | *[aria-labelledby][aria-describedby]:focus:after {
160 | display: table;
161 | height: auto; width: auto;
162 | position: relative; padding: 1px 0;
163 | z-index: 10000;
164 | background-color: white;
165 | color: green;
166 | font-size: .9rem; font-weight: 900;
167 | content: ' [ARIA] aria-labelledby=' attr(aria-labelledby) ' aria-describedby=' attr(aria-describedby) ' ';
168 | }
169 | *[data-ws-bm-aria-labelledby][data-ws-bm-aria-describedby]:before {
170 | display: table;
171 | height: auto; width: auto;
172 | position: relative; padding: 1px 0;
173 | background-color: white;
174 | color: green;
175 | font-size: .9rem; font-weight: 900;
176 | content: ' [ARIA] aria-labelledby=' attr(data-ws-bm-aria-labelledby) ' aria-describedby=' attr(data-ws-bm-aria-describedby) ' ';
177 | }
178 |
179 | *[aria-haspopup="true"]:focus:after, *[aria-haspopup="menu"]:focus:after, *[data-ws-bm-aria-haspopup="true"]:before, *[data-ws-bm-aria-haspopup="menu"]:before {
180 | display: table;
181 | height: auto; width: auto;
182 | position: relative; padding: 1px 0;
183 | z-index: 10000;
184 | background-color: white;
185 | color: green;
186 | font-size: .9rem; font-weight: 900;
187 | content: ' [ARIA] (has-menu) (Shift+F10 should open menu) ';
188 | }
189 |
190 | *[aria-haspopup="listbox"]:focus:after, *[aria-haspopup="tree"]:focus:after, *[aria-haspopup="grid"]:focus:after, *[aria-haspopup="dialog"]:focus:after {
191 | display: table;
192 | height: auto; width: auto;
193 | position: relative; padding: 1px 0;
194 | z-index: 10000;
195 | background-color: white;
196 | color: green;
197 | font-size: .9rem; font-weight: 900;
198 | content: ' [ARIA] (has-popup) (' attr(aria-haspopup) ') ';
199 | }
200 |
201 | *[data-ws-bm-aria-haspopup="listbox"]:before, *[data-ws-bm-aria-haspopup="tree"]:before, *[data-ws-bm-aria-haspopup="grid"]:before, *[data-ws-bm-aria-haspopup="dialog"]:before {
202 | display: table;
203 | height: auto; width: auto;
204 | position: relative; padding: 1px 0;
205 | z-index: 10000;
206 | background-color: white;
207 | color: green;
208 | font-size: .9rem; font-weight: 900;
209 | content: ' [ARIA] (has-popup) (' attr(data-ws-bm-aria-haspopup) ') ';
210 | }
211 |
212 | *[role]:focus:after {
213 | content: none;
214 | }
215 | *[data-ws-bm-role]:before {
216 | content: none;
217 | }
218 |
219 | *[aria-current="true"]:before, *[aria-current="page"]:before, *[aria-current="step"]:before, *[aria-current="location"]:before, *[aria-current="date"]:before, *[aria-current="time"]:before {
220 | display: table;
221 | height: auto; width: auto;
222 | position: relative; padding: 1px 0;
223 | background-color: white;
224 | color: green;
225 | font-size: .9rem; font-weight: 900;
226 | content: ' [ARIA] Current (' attr(aria-current) ') ';
227 | }
228 |
229 | *[aria-hidden="true"] {
230 | visibility: hidden;
231 | }
232 | *:focus {
233 | outline: 3px green inset;
234 | }
235 |
236 | *[aria-selected]:before {
237 | display: table;
238 | height: auto; width: auto;
239 | position: relative; padding: 1px 0;
240 | background-color: #FFFFE5;
241 | color: red;
242 | font-size: .9rem; font-weight: 900;
243 | content: ' aria-selected is not supported on this element ';
244 | }
245 | *[data-ws-bm-aria-selected]:before {
246 | display: table;
247 | height: auto; width: auto;
248 | position: relative; padding: 1px 0;
249 | background-color: #FFFFE5;
250 | color: red;
251 | font-size: .9rem; font-weight: 900;
252 | content: ' aria-selected is not supported on this element ';
253 | }
254 | *[role][aria-selected]:before {
255 | content: none;
256 | }
257 | *[data-ws-bm-role][data-ws-bm-aria-selected]:before {
258 | content: none;
259 | }
260 |
261 | span.WS-BM-Loading-Msg {
262 | display: none;
263 | }
264 |
--------------------------------------------------------------------------------
/docs/visual-aria/public/2landmarks.css:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | ARIA Banner
4 | http://whatsock.com/training/matrices/#banner
5 | */
6 |
7 | *[role="banner"] {
8 | border: ridge thick purple;
9 | }
10 | *[role="banner"]:before {
11 | display: table;
12 | height: auto; width: auto;
13 | position: relative; padding: 1px 0;
14 | background-color: white;
15 | color: purple;
16 | font-size: .9rem; font-weight: 900;
17 | content: ' (unlabelled) (landmark) [ARIA] Banner ';
18 | }
19 | *[role="banner"][aria-label]:before {
20 | display: table;
21 | height: auto; width: auto;
22 | position: relative; padding: 1px 0;
23 | background-color: white;
24 | color: purple;
25 | font-size: .9rem; font-weight: 900;
26 | content: ' (landmark) [ARIA] Banner aria-label=' attr(aria-label) ' ';
27 | }
28 | *[role="banner"][aria-labelledby]:before {
29 | display: table;
30 | height: auto; width: auto;
31 | position: relative; padding: 1px 0;
32 | background-color: white;
33 | color: purple;
34 | font-size: .9rem; font-weight: 900;
35 | content: ' (landmark) [ARIA] Banner aria-labelledby=' attr(aria-labelledby) ' ';
36 | }
37 |
38 | /*
39 | ARIA Complementary
40 | http://whatsock.com/training/matrices/#complementary
41 | */
42 |
43 | *[role="complementary"] {
44 | border: ridge thick purple;
45 | }
46 | *[role="complementary"]:before {
47 | display: table;
48 | height: auto; width: auto;
49 | position: relative; padding: 1px 0;
50 | background-color: white;
51 | color: purple;
52 | font-size: .9rem; font-weight: 900;
53 | content: ' (unlabelled) (landmark) [ARIA] Complementary ';
54 | }
55 | *[role="complementary"][aria-label]:before {
56 | display: table;
57 | height: auto; width: auto;
58 | position: relative; padding: 1px 0;
59 | background-color: white;
60 | color: purple;
61 | font-size: .9rem; font-weight: 900;
62 | content: ' (landmark) [ARIA] Complementary aria-label=' attr(aria-label) ' ';
63 | }
64 | *[role="complementary"][aria-labelledby]:before {
65 | display: table;
66 | height: auto; width: auto;
67 | position: relative; padding: 1px 0;
68 | background-color: white;
69 | color: purple;
70 | font-size: .9rem; font-weight: 900;
71 | content: ' (landmark) [ARIA] Complementary aria-labelledby=' attr(aria-labelledby) ' ';
72 | }
73 |
74 | /*
75 | ARIA Contentinfo
76 | http://whatsock.com/training/matrices/#contentinfo
77 | */
78 |
79 | *[role="contentinfo"] {
80 | border: ridge thick purple;
81 | }
82 | *[role="contentinfo"]:before {
83 | display: table;
84 | height: auto; width: auto;
85 | position: relative; padding: 1px 0;
86 | background-color: white;
87 | color: purple;
88 | font-size: .9rem; font-weight: 900;
89 | content: ' (unlabelled) (landmark) [ARIA] Contentinfo ';
90 | }
91 | *[role="contentinfo"][aria-label]:before {
92 | display: table;
93 | height: auto; width: auto;
94 | position: relative; padding: 1px 0;
95 | background-color: white;
96 | color: purple;
97 | font-size: .9rem; font-weight: 900;
98 | content: ' (landmark) [ARIA] Contentinfo aria-label=' attr(aria-label) ' ';
99 | }
100 | *[role="contentinfo"][aria-labelledby]:before {
101 | display: table;
102 | height: auto; width: auto;
103 | position: relative; padding: 1px 0;
104 | background-color: white;
105 | color: purple;
106 | font-size: .9rem; font-weight: 900;
107 | content: ' (landmark) [ARIA] Contentinfo aria-labelledby=' attr(aria-labelledby) ' ';
108 | }
109 |
110 | /*
111 | ARIA Form
112 | http://whatsock.com/training/matrices/#form
113 | */
114 |
115 | *[role="form"] {
116 | border: ridge thick purple;
117 | }
118 | *[role="form"]:before {
119 | display: table;
120 | height: auto; width: auto;
121 | position: relative; padding: 1px 0;
122 | background-color: white;
123 | color: purple;
124 | font-size: .9rem; font-weight: 900;
125 | content: ' (unlabelled) (landmark) [ARIA] Form ';
126 | }
127 | *[role="form"][aria-label]:before {
128 | display: table;
129 | height: auto; width: auto;
130 | position: relative; padding: 1px 0;
131 | background-color: white;
132 | color: purple;
133 | font-size: .9rem; font-weight: 900;
134 | content: ' (landmark) [ARIA] Form aria-label=' attr(aria-label) ' ';
135 | }
136 | *[role="form"][aria-labelledby]:before {
137 | display: table;
138 | height: auto; width: auto;
139 | position: relative; padding: 1px 0;
140 | background-color: white;
141 | color: purple;
142 | font-size: .9rem; font-weight: 900;
143 | content: ' (landmark) [ARIA] Form aria-labelledby=' attr(aria-labelledby) ' ';
144 | }
145 | form[aria-label]:before {
146 | display: table;
147 | height: auto; width: auto;
148 | position: relative; padding: 1px 0;
149 | background-color: white;
150 | color: purple;
151 | font-size: .9rem; font-weight: 900;
152 | content: ' (landmark) [ARIA] Form aria-label=' attr(aria-label) ' ';
153 | }
154 | form[aria-labelledby]:before {
155 | display: table;
156 | height: auto; width: auto;
157 | position: relative; padding: 1px 0;
158 | background-color: white;
159 | color: purple;
160 | font-size: .9rem; font-weight: 900;
161 | content: ' (landmark) [ARIA] Form aria-labelledby=' attr(aria-labelledby) ' ';
162 | }
163 |
164 | /*
165 | ARIA Main
166 | http://whatsock.com/training/matrices/#main
167 | */
168 |
169 | *[role="main"] {
170 | border: ridge thick purple;
171 | }
172 | *[role="main"]:before {
173 | display: table;
174 | height: auto; width: auto;
175 | position: relative; padding: 1px 0;
176 | background-color: white;
177 | color: purple;
178 | font-size: .9rem; font-weight: 900;
179 | content: ' (unlabelled) (landmark) [ARIA] Main ';
180 | }
181 | *[role="main"][aria-label]:before {
182 | display: table;
183 | height: auto; width: auto;
184 | position: relative; padding: 1px 0;
185 | background-color: white;
186 | color: purple;
187 | font-size: .9rem; font-weight: 900;
188 | content: ' (landmark) [ARIA] Main aria-label=' attr(aria-label) ' ';
189 | }
190 | *[role="main"][aria-labelledby]:before {
191 | display: table;
192 | height: auto; width: auto;
193 | position: relative; padding: 1px 0;
194 | background-color: white;
195 | color: purple;
196 | font-size: .9rem; font-weight: 900;
197 | content: ' (landmark) [ARIA] Main aria-labelledby=' attr(aria-labelledby) ' ';
198 | }
199 |
200 | /*
201 | ARIA Navigation
202 | http://whatsock.com/training/matrices/#navigation
203 | */
204 |
205 | *[role="navigation"] {
206 | border: ridge thick purple;
207 | }
208 | *[role="navigation"]:before {
209 | display: table;
210 | height: auto; width: auto;
211 | position: relative; padding: 1px 0;
212 | background-color: white;
213 | color: purple;
214 | font-size: .9rem; font-weight: 900;
215 | content: ' (unlabelled) (landmark) [ARIA] Navigation ';
216 | }
217 | *[role="navigation"][aria-label]:before {
218 | display: table;
219 | height: auto; width: auto;
220 | position: relative; padding: 1px 0;
221 | background-color: white;
222 | color: purple;
223 | font-size: .9rem; font-weight: 900;
224 | content: ' (landmark) [ARIA] Navigation aria-label=' attr(aria-label) ' ';
225 | }
226 | *[role="navigation"][aria-labelledby]:before {
227 | display: table;
228 | height: auto; width: auto;
229 | position: relative; padding: 1px 0;
230 | background-color: white;
231 | color: purple;
232 | font-size: .9rem; font-weight: 900;
233 | content: ' (landmark) [ARIA] Navigation aria-labelledby=' attr(aria-labelledby) ' ';
234 | }
235 |
236 | /*
237 | ARIA Search
238 | http://whatsock.com/training/matrices/#search
239 | */
240 |
241 | *[role="search"] {
242 | border: ridge thick purple;
243 | }
244 | *[role="search"]:before {
245 | display: table;
246 | height: auto; width: auto;
247 | position: relative; padding: 1px 0;
248 | background-color: white;
249 | color: purple;
250 | font-size: .9rem; font-weight: 900;
251 | content: ' (unlabelled) (landmark) [ARIA] Search ';
252 | }
253 | *[role="search"][aria-label]:before {
254 | display: table;
255 | height: auto; width: auto;
256 | position: relative; padding: 1px 0;
257 | background-color: white;
258 | color: purple;
259 | font-size: .9rem; font-weight: 900;
260 | content: ' (landmark) [ARIA] Search aria-label=' attr(aria-label) ' ';
261 | }
262 | *[role="search"][aria-labelledby]:before {
263 | display: table;
264 | height: auto; width: auto;
265 | position: relative; padding: 1px 0;
266 | background-color: white;
267 | color: purple;
268 | font-size: .9rem; font-weight: 900;
269 | content: ' (landmark) [ARIA] Search aria-labelledby=' attr(aria-labelledby) ' ';
270 | }
271 |
272 | /*
273 | ARIA Region
274 | Note: The Region role requires an explicit label using either aria-label or aria-labelledby.
275 | http://whatsock.com/training/matrices/#region
276 | */
277 |
278 | *[role="region"] {
279 | border: ridge thick red;
280 | }
281 | *[role="region"]:before {
282 | display: table;
283 | height: auto; width: auto;
284 | position: relative; padding: 1px 0;
285 | background-color: #FFFFE5;
286 | color: red;
287 | font-size: .9rem; font-weight: 900;
288 | content: ' (unlabelled) [ARIA] Region (requires a label) ';
289 | }
290 | *[role="region"][aria-label], *[role="region"][aria-labelledby] {
291 | border: ridge thick purple;
292 | }
293 | *[role="region"][aria-label]:before {
294 | display: table;
295 | height: auto; width: auto;
296 | position: relative; padding: 1px 0;
297 | background-color: white;
298 | color: purple;
299 | font-size: .9rem; font-weight: 900;
300 | content: ' [ARIA] Region aria-label=' attr(aria-label) ' ';
301 | }
302 | *[role="region"][aria-labelledby]:before {
303 | display: table;
304 | height: auto; width: auto;
305 | position: relative; padding: 1px 0;
306 | background-color: white;
307 | color: purple;
308 | font-size: .9rem; font-weight: 900;
309 | content: ' [ARIA] Region aria-labelledby=' attr(aria-labelledby) ' ';
310 | }
311 |
--------------------------------------------------------------------------------
/docs/visual-aria/public/3structural.css:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | ARIA Article
4 | http://whatsock.com/training/matrices/#article
5 | */
6 |
7 | *[role="article"] {
8 | border: ridge thick blue;
9 | }
10 | *[role="article"]:before {
11 | display: table;
12 | height: auto; width: auto;
13 | position: relative; padding: 1px 0;
14 | background-color: white;
15 | color: blue;
16 | font-size: .9rem; font-weight: 900;
17 | content: ' (unlabelled) [ARIA] Article ';
18 | }
19 | *[role="article"][aria-label]:before {
20 | display: table;
21 | height: auto; width: auto;
22 | position: relative; padding: 1px 0;
23 | background-color: white;
24 | color: blue;
25 | font-size: .9rem; font-weight: 900;
26 | content: ' [ARIA] Article aria-label=' attr(aria-label) ' ';
27 | }
28 | *[role="article"][aria-labelledby]:before {
29 | display: table;
30 | height: auto; width: auto;
31 | position: relative; padding: 1px 0;
32 | background-color: white;
33 | color: blue;
34 | font-size: .9rem; font-weight: 900;
35 | content: ' [ARIA] Article aria-labelledby=' attr(aria-labelledby) ' ';
36 | }
37 |
38 | /*
39 | ARIA Definition
40 | Required attributes: aria-labelledby which must point to an element with role=term
41 | http://whatsock.com/training/matrices/#definition
42 | */
43 |
44 | *[role="definition"] {
45 | border: ridge thick red;
46 | }
47 | *[role="definition"]:before {
48 | display: table;
49 | height: auto; width: auto;
50 | position: relative; padding: 1px 0;
51 | background-color: #FFFFE5;
52 | color: red;
53 | font-size: .9rem; font-weight: 900;
54 | content: ' [ARIA] Definition (missing aria-labelledby) ';
55 | }
56 | *[role="definition"][aria-labelledby] {
57 | border: ridge thick blue;
58 | }
59 | *[role="definition"][aria-labelledby]:before {
60 | display: table;
61 | height: auto; width: auto;
62 | position: relative; padding: 1px 0;
63 | background-color: white;
64 | color: blue;
65 | font-size: .9rem; font-weight: 900;
66 | content: ' [ARIA] Definition aria-labelledby=' attr(aria-labelledby) ' ';
67 | }
68 |
69 | /*
70 | ARIA Directory
71 | Note: Requires children with role="listitem".
72 | http://whatsock.com/training/matrices/#directory
73 | */
74 |
75 | *[role="listitem"] {
76 | border: ridge thick red;
77 | }
78 | *[role="listitem"]:before {
79 | display: table;
80 | height: auto; width: auto;
81 | position: relative; padding: 1px 0;
82 | background-color: #FFFFE5;
83 | color: red;
84 | font-size: .9rem; font-weight: 900;
85 | content: ' [ARIA] Listitem (missing parent with role=list or role=directory) ';
86 | }
87 |
88 | *[role="directory"] *[role="listitem"] {
89 | border: ridge thick blue;
90 | }
91 | *[role="directory"] *[role="listitem"]:before {
92 | display: table;
93 | height: auto; width: auto;
94 | position: relative; padding: 1px 0;
95 | background-color: white;
96 | color: blue;
97 | font-size: .9rem; font-weight: 900;
98 | content: ' [ARIA] Listitem (contained within role=directory) ';
99 | }
100 |
101 | *[role="directory"] {
102 | border: ridge thick blue;
103 | }
104 | *[role="directory"]:before {
105 | display: table;
106 | height: auto; width: auto;
107 | position: relative; padding: 1px 0;
108 | background-color: white;
109 | color: blue;
110 | font-size: .9rem; font-weight: 900;
111 | content: ' [ARIA] Directory (requires children with role=listitem) ';
112 | }
113 | *[role="directory"][aria-label]:before {
114 | display: table;
115 | height: auto; width: auto;
116 | position: relative; padding: 1px 0;
117 | background-color: white;
118 | color: blue;
119 | font-size: .9rem; font-weight: 900;
120 | content: ' [ARIA] Directory (requires children with role=listitem) aria-label=' attr(aria-label) ' ';
121 | }
122 | *[role="directory"][aria-labelledby]:before {
123 | display: table;
124 | height: auto; width: auto;
125 | position: relative; padding: 1px 0;
126 | background-color: white;
127 | color: blue;
128 | font-size: .9rem; font-weight: 900;
129 | content: ' [ARIA] Directory (requires children with role=listitem) aria-labelledby=' attr(aria-labelledby) ' ';
130 | }
131 |
132 | /*
133 | ARIA Document
134 | http://whatsock.com/training/matrices/#document
135 | */
136 |
137 | *[role="document"] {
138 | border: ridge thick blue;
139 | }
140 | *[role="document"]:before {
141 | display: table;
142 | height: auto; width: auto;
143 | position: relative; padding: 1px 0;
144 | background-color: white;
145 | color: blue;
146 | font-size: .9rem; font-weight: 900;
147 | content: ' (unlabelled) [ARIA] Document ';
148 | }
149 | *[role="document"][aria-label]:before {
150 | display: table;
151 | height: auto; width: auto;
152 | position: relative; padding: 1px 0;
153 | background-color: white;
154 | color: blue;
155 | font-size: .9rem; font-weight: 900;
156 | content: ' [ARIA] Document aria-label=' attr(aria-label) ' ';
157 | }
158 | *[role="document"][aria-labelledby]:before {
159 | display: table;
160 | height: auto; width: auto;
161 | position: relative; padding: 1px 0;
162 | background-color: white;
163 | color: blue;
164 | font-size: .9rem; font-weight: 900;
165 | content: ' [ARIA] Document aria-labelledby=' attr(aria-labelledby) ' ';
166 | }
167 |
168 | /*
169 | ARIA Feed
170 | Note: Requires first level children with role="article".
171 | Elements with role="article" should be focusable and navigable using the arrow keys, and newly rendered articles must be either appended or prepended to the role="feed" container.
172 | The container with role="feed" should not be focusable.
173 | http://whatsock.com/training/matrices/#feed
174 | */
175 |
176 | *[role="feed"] *[role="article"] {
177 | border: ridge thick blue;
178 | }
179 | *[role="feed"] *[role="article"]:before {
180 | display: table;
181 | height: auto; width: auto;
182 | position: relative; padding: 1px 0;
183 | background-color: white;
184 | color: blue;
185 | font-size: .9rem; font-weight: 900;
186 | content: ' [ARIA] Article (contained within role=feed) ';
187 | }
188 |
189 | *[role="feed"] *[role="article"]:focus {
190 | border: ridge thick green;
191 | }
192 | *[role="feed"] *[role="article"]:focus:before {
193 | display: table;
194 | height: auto; width: auto;
195 | position: relative; padding: 1px 0;
196 | background-color: white;
197 | color: blue;
198 | font-size: .9rem; font-weight: 900;
199 | content: ' (focused) [ARIA] Article (contained within role=feed) (arrows should move focus between articles) ';
200 | }
201 |
202 | *[role="feed"] {
203 | border: ridge thick blue;
204 | }
205 | *[role="feed"]:before {
206 | display: table;
207 | height: auto; width: auto;
208 | position: relative; padding: 1px 0;
209 | background-color: white;
210 | color: blue;
211 | font-size: .9rem; font-weight: 900;
212 | content: ' [ARIA] Feed (requires first level focusable children with role=article) ';
213 | }
214 | *[role="feed"][aria-label]:before {
215 | display: table;
216 | height: auto; width: auto;
217 | position: relative; padding: 1px 0;
218 | background-color: white;
219 | color: blue;
220 | font-size: .9rem; font-weight: 900;
221 | content: ' [ARIA] Feed (requires first level focusable children with role=article) aria-label=' attr(aria-label) ' ';
222 | }
223 | *[role="feed"][aria-labelledby]:before {
224 | display: table;
225 | height: auto; width: auto;
226 | position: relative; padding: 1px 0;
227 | background-color: white;
228 | color: blue;
229 | font-size: .9rem; font-weight: 900;
230 | content: ' [ARIA] Feed (requires first level focusable children with role=article) aria-labelledby=' attr(aria-labelledby) ' ';
231 | }
232 |
233 | *[role="feed"]:focus {
234 | border: ridge thick red;
235 | }
236 | *[role="feed"]:focus:before {
237 | display: table;
238 | height: auto; width: auto;
239 | position: relative; padding: 1px 0;
240 | background-color: #FFFFE5;
241 | color: red;
242 | font-size: .9rem; font-weight: 900;
243 | content: ' (focused) [ARIA] Feed (role=feed should not be focusable) ';
244 | }
245 |
246 | /*
247 | ARIA Figure
248 | http://whatsock.com/training/matrices/#figure
249 | */
250 |
251 | *[role="figure"] {
252 | border: ridge thick blue;
253 | }
254 | *[role="figure"]:before {
255 | display: table;
256 | height: auto; width: auto;
257 | position: relative; padding: 1px 0;
258 | background-color: white;
259 | color: blue;
260 | font-size: .9rem; font-weight: 900;
261 | content: ' [ARIA] Figure ';
262 | }
263 | *[role="figure"][aria-label]:before {
264 | display: table;
265 | height: auto; width: auto;
266 | position: relative; padding: 1px 0;
267 | background-color: white;
268 | color: blue;
269 | font-size: .9rem; font-weight: 900;
270 | content: ' [ARIA] Figure aria-label=' attr(aria-label) ' ';
271 | }
272 | *[role="figure"][aria-labelledby]:before {
273 | display: table;
274 | height: auto; width: auto;
275 | position: relative; padding: 1px 0;
276 | background-color: white;
277 | color: blue;
278 | font-size: .9rem; font-weight: 900;
279 | content: ' [ARIA] Figure aria-labelledby=' attr(aria-labelledby) ' ';
280 | }
281 |
282 | /*
283 | ARIA Heading
284 | Required attributes: aria-level
285 | http://whatsock.com/training/matrices/#heading
286 | */
287 |
288 | *[role="heading"] {
289 | border: ridge thick red;
290 | }
291 | *[role="heading"]:before {
292 | display: table;
293 | height: auto; width: auto;
294 | position: relative; padding: 1px 0;
295 | background-color: #FFFFE5;
296 | color: red;
297 | font-size: .9rem; font-weight: 900;
298 | content: ' [ARIA] Heading (missing aria-level) ';
299 | }
300 | *[role="heading"][aria-level] {
301 | border: ridge thick blue;
302 | }
303 | *[role="heading"][aria-level]:before {
304 | display: table;
305 | height: auto; width: auto;
306 | position: relative; padding: 1px 0;
307 | background-color: white;
308 | color: blue;
309 | font-size: .9rem; font-weight: 900;
310 | content: ' [ARIA] Heading aria-level=' attr(aria-level) ' ';
311 | }
312 |
313 | /*
314 | ARIA Img
315 | http://whatsock.com/training/matrices/#img
316 | */
317 |
318 | *[role="img"] {
319 | border: ridge thick blue;
320 | }
321 | *[role="img"]:before {
322 | display: table;
323 | height: auto; width: auto;
324 | position: relative; padding: 1px 0;
325 | background-color: white;
326 | color: blue;
327 | font-size: .9rem; font-weight: 900;
328 | content: ' [ARIA] Img ';
329 | }
330 | *[role="img"][aria-label]:before {
331 | display: table;
332 | height: auto; width: auto;
333 | position: relative; padding: 1px 0;
334 | background-color: white;
335 | color: blue;
336 | font-size: .9rem; font-weight: 900;
337 | content: ' [ARIA] Img aria-label=' attr(aria-label) ' ';
338 | }
339 | *[role="img"][aria-labelledby]:before {
340 | display: table;
341 | height: auto; width: auto;
342 | position: relative; padding: 1px 0;
343 | background-color: white;
344 | color: blue;
345 | font-size: .9rem; font-weight: 900;
346 | content: ' [ARIA] Img aria-labelledby=' attr(aria-labelledby) ' ';
347 | }
348 |
349 | /*
350 | ARIA List
351 | Note: Requires children with role="listitem".
352 | http://whatsock.com/training/matrices/#list
353 | */
354 |
355 | *[role="list"] *[role="listitem"] {
356 | border: ridge thick blue;
357 | }
358 | *[role="list"] *[role="listitem"]:before {
359 | display: table;
360 | height: auto; width: auto;
361 | position: relative; padding: 1px 0;
362 | background-color: white;
363 | color: blue;
364 | font-size: .9rem; font-weight: 900;
365 | content: ' [ARIA] Listitem (contained within role=list) ';
366 | }
367 |
368 | *[role="list"] {
369 | border: ridge thick blue;
370 | }
371 | *[role="list"]:before {
372 | display: table;
373 | height: auto; width: auto;
374 | position: relative; padding: 1px 0;
375 | background-color: white;
376 | color: blue;
377 | font-size: .9rem; font-weight: 900;
378 | content: ' [ARIA] List (requires children with role=listitem) ';
379 | }
380 | *[role="list"][aria-label]:before {
381 | display: table;
382 | height: auto; width: auto;
383 | position: relative; padding: 1px 0;
384 | background-color: white;
385 | color: blue;
386 | font-size: .9rem; font-weight: 900;
387 | content: ' [ARIA] List (requires children with role=listitem) aria-label=' attr(aria-label) ' ';
388 | }
389 | *[role="list"][aria-labelledby]:before {
390 | display: table;
391 | height: auto; width: auto;
392 | position: relative; padding: 1px 0;
393 | background-color: white;
394 | color: blue;
395 | font-size: .9rem; font-weight: 900;
396 | content: ' [ARIA] List (requires children with role=listitem) aria-labelledby=' attr(aria-labelledby) ' ';
397 | }
398 |
399 | /*
400 | ARIA Math
401 | http://whatsock.com/training/matrices/#math
402 | */
403 |
404 | *[role="math"] {
405 | border: ridge thick blue;
406 | }
407 | *[role="math"]:before {
408 | display: table;
409 | height: auto; width: auto;
410 | position: relative; padding: 1px 0;
411 | background-color: black;
412 | color: orange;
413 | font-size: .9rem; font-weight: 900;
414 | content: ' [ARIA] Math (unlabelled) ';
415 | }
416 | *[role="math"][aria-label]:before {
417 | display: table;
418 | height: auto; width: auto;
419 | position: relative; padding: 1px 0;
420 | background-color: white;
421 | color: blue;
422 | font-size: .9rem; font-weight: 900;
423 | content: ' [ARIA] Math aria-label=' attr(aria-label) ' ';
424 | }
425 | *[role="math"][aria-labelledby]:before {
426 | display: table;
427 | height: auto; width: auto;
428 | position: relative; padding: 1px 0;
429 | background-color: white;
430 | color: blue;
431 | font-size: .9rem; font-weight: 900;
432 | content: ' [ARIA] Math aria-labelledby=' attr(aria-labelledby) ' ';
433 | }
434 |
435 | /*
436 | ARIA Note
437 | http://whatsock.com/training/matrices/#note
438 | */
439 |
440 | *[role="note"] {
441 | border: ridge thick blue;
442 | }
443 | *[role="note"]:before {
444 | display: table;
445 | height: auto; width: auto;
446 | position: relative; padding: 1px 0;
447 | background-color: white;
448 | color: blue;
449 | font-size: .9rem; font-weight: 900;
450 | content: ' (unlabelled) [ARIA] Note ';
451 | }
452 | *[role="note"][aria-label]:before {
453 | display: table;
454 | height: auto; width: auto;
455 | position: relative; padding: 1px 0;
456 | background-color: white;
457 | color: blue;
458 | font-size: .9rem; font-weight: 900;
459 | content: ' [ARIA] Note aria-label=' attr(aria-label) ' ';
460 | }
461 | *[role="note"][aria-labelledby]:before {
462 | display: table;
463 | height: auto; width: auto;
464 | position: relative; padding: 1px 0;
465 | background-color: white;
466 | color: blue;
467 | font-size: .9rem; font-weight: 900;
468 | content: ' [ARIA] Note aria-labelledby=' attr(aria-labelledby) ' ';
469 | }
470 |
471 | /*
472 | ARIA Separator
473 | http://whatsock.com/training/matrices/#separator
474 | */
475 |
476 | *[role="separator"] {
477 | border: ridge thick blue;
478 | }
479 | *[role="separator"]:before {
480 | display: table;
481 | height: auto; width: auto;
482 | position: relative; padding: 1px 0;
483 | background-color: white;
484 | color: blue;
485 | font-size: .9rem; font-weight: 900;
486 | content: ' (horizontal) [ARIA] Separator ';
487 | }
488 | *[role="separator"][aria-orientation="vertical"]:before {
489 | display: table;
490 | height: auto; width: auto;
491 | position: relative; padding: 1px 0;
492 | background-color: white;
493 | color: blue;
494 | font-size: .9rem; font-weight: 900;
495 | content: ' (vertical) [ARIA] Separator ';
496 | }
497 |
498 | /*
499 | ARIA Term
500 | Must be referenced by role=definition using aria-labelledby
501 | Element with role="term" must not be a focusable active element
502 | http://whatsock.com/training/matrices/#term
503 | */
504 |
505 | *[role="term"] {
506 | border: ridge thick blue;
507 | }
508 | *[role="term"]:before {
509 | display: table;
510 | height: auto; width: auto;
511 | position: relative; padding: 1px 0;
512 | background-color: white;
513 | color: blue;
514 | font-size: .9rem; font-weight: 900;
515 | content: ' [ARIA] Term ';
516 | }
517 |
518 | /*
519 | ARIA Toolbar
520 | Note: If the container with role="toolbar" is focusable, aria-activedescendant must be used to reference the currently highlighted Button within the Toolbar.
521 | http://whatsock.com/training/matrices/#toolbar
522 | */
523 |
524 | *[role="toolbar"] {
525 | border: ridge thick green;
526 | }
527 | *[role="toolbar"]:before {
528 | display: table;
529 | height: auto; width: auto;
530 | position: relative; padding: 1px 0;
531 | background-color: white;
532 | color: green;
533 | font-size: .9rem; font-weight: 900;
534 | content: ' [ARIA] Toolbar ';
535 | }
536 | *[role="toolbar"][tabindex] {
537 | border: ridge thick orange;
538 | }
539 | *[role="toolbar"][tabindex]:before {
540 | display: table;
541 | height: auto; width: auto;
542 | position: relative; padding: 1px 0;
543 | background-color: black;
544 | color: orange;
545 | font-size: .9rem; font-weight: 900;
546 | content: ' (focusable) [ARIA] Toolbar ';
547 | }
548 | *[role="toolbar"][tabindex]:focus {
549 | border: ridge thick red;
550 | }
551 | *[role="toolbar"][tabindex]:focus:before {
552 | display: table;
553 | height: auto; width: auto;
554 | position: relative; padding: 1px 0;
555 | z-index: 10000;
556 | background-color: #FFFFE5;
557 | color: red;
558 | font-size: .9rem; font-weight: 900;
559 | content: ' (focused) [ARIA] Toolbar (missing aria-activedescendant) ';
560 | }
561 | *[role="toolbar"][tabindex][aria-activedescendant]:focus {
562 | border: ridge thick green;
563 | }
564 | *[role="toolbar"][tabindex][aria-activedescendant]:focus:before {
565 | display: table;
566 | height: auto; width: auto;
567 | position: relative; padding: 1px 0;
568 | z-index: 10000;
569 | background-color: white;
570 | color: green;
571 | font-size: .9rem; font-weight: 900;
572 | content: ' (focused) [ARIA] Toolbar: aria-activedescendant=' attr(aria-activedescendant) ' ';
573 | }
574 | *[role="toolbar"][aria-label] {
575 | border: ridge thick green;
576 | }
577 | *[role="toolbar"][aria-label]:before {
578 | display: table;
579 | height: auto; width: auto;
580 | position: relative; padding: 1px 0;
581 | background-color: white;
582 | color: green;
583 | font-size: .9rem; font-weight: 900;
584 | content: ' [ARIA] Toolbar aria-label=' attr(aria-label) ' ';
585 | }
586 | *[role="toolbar"][aria-label][tabindex] {
587 | border: ridge thick orange;
588 | }
589 | *[role="toolbar"][aria-label][tabindex]:before {
590 | display: table;
591 | height: auto; width: auto;
592 | position: relative; padding: 1px 0;
593 | background-color: black;
594 | color: orange;
595 | font-size: .9rem; font-weight: 900;
596 | content: ' (focusable) [ARIA] Toolbar aria-label=' attr(aria-label) ' ';
597 | }
598 | *[role="toolbar"][aria-label][tabindex]:focus {
599 | border: ridge thick red;
600 | }
601 | *[role="toolbar"][aria-label][tabindex]:focus:before {
602 | display: table;
603 | height: auto; width: auto;
604 | position: relative; padding: 1px 0;
605 | z-index: 10000;
606 | background-color: #FFFFE5;
607 | color: red;
608 | font-size: .9rem; font-weight: 900;
609 | content: ' (focused) [ARIA] Toolbar (missing aria-activedescendant) ';
610 | }
611 | *[role="toolbar"][aria-label][tabindex][aria-activedescendant]:focus {
612 | border: ridge thick green;
613 | }
614 | *[role="toolbar"][aria-label][tabindex][aria-activedescendant]:focus:before {
615 | display: table;
616 | height: auto; width: auto;
617 | position: relative; padding: 1px 0;
618 | z-index: 10000;
619 | background-color: white;
620 | color: green;
621 | font-size: .9rem; font-weight: 900;
622 | content: ' (focused) [ARIA] Toolbar: aria-activedescendant=' attr(aria-activedescendant) ' aria-label=' attr(aria-label) ' ';
623 | }
624 | *[role="toolbar"][aria-labelledby] {
625 | border: ridge thick green;
626 | }
627 | *[role="toolbar"][aria-labelledby]:before {
628 | display: table;
629 | height: auto; width: auto;
630 | position: relative; padding: 1px 0;
631 | background-color: white;
632 | color: green;
633 | font-size: .9rem; font-weight: 900;
634 | content: ' [ARIA] Toolbar aria-labelledby=' attr(aria-labelledby) ' ';
635 | }
636 | *[role="toolbar"][aria-labelledby][tabindex] {
637 | border: ridge thick orange;
638 | }
639 | *[role="toolbar"][aria-labelledby][tabindex]:before {
640 | display: table;
641 | height: auto; width: auto;
642 | position: relative; padding: 1px 0;
643 | background-color: black;
644 | color: orange;
645 | font-size: .9rem; font-weight: 900;
646 | content: ' (focusable) [ARIA] Toolbar aria-labelledby=' attr(aria-labelledby) ' ';
647 | }
648 | *[role="toolbar"][aria-labelledby][tabindex]:focus {
649 | border: ridge thick red;
650 | }
651 | *[role="toolbar"][aria-labelledby][tabindex]:focus:before {
652 | display: table;
653 | height: auto; width: auto;
654 | position: relative; padding: 1px 0;
655 | z-index: 10000;
656 | background-color: #FFFFE5;
657 | color: red;
658 | font-size: .9rem; font-weight: 900;
659 | content: ' (focused) [ARIA] Toolbar (missing aria-activedescendant) ';
660 | }
661 | *[role="toolbar"][aria-labelledby][tabindex][aria-activedescendant]:focus {
662 | border: ridge thick green;
663 | }
664 | *[role="toolbar"][aria-labelledby][tabindex][aria-activedescendant]:focus:before {
665 | display: table;
666 | height: auto; width: auto;
667 | position: relative; padding: 1px 0;
668 | z-index: 10000;
669 | background-color: white;
670 | color: green;
671 | font-size: .9rem; font-weight: 900;
672 | content: ' (focused) [ARIA] Toolbar: aria-activedescendant=' attr(aria-activedescendant) ' aria-labelledby=' attr(aria-labelledby) ' ';
673 | }
674 |
--------------------------------------------------------------------------------
/docs/visual-aria/public/4dialogs.css:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | ARIA Application
4 | Note: The Application region role will change the browse modality of screen readers such as JAWS and NVDA, so caution must always be used when implementing this role.
5 | As of ARIA 1.1, role=application is no longer mapped as a landmark.
6 | http://whatsock.com/training/matrices/#application
7 | */
8 |
9 | *[role="application"] {
10 | border: ridge thick green;
11 | }
12 | *[role="application"]:before {
13 | display: table;
14 | height: auto; width: auto;
15 | position: relative; padding: 1px 0;
16 | background-color: white;
17 | color: green;
18 | font-size: .9rem; font-weight: 900;
19 | content: ' (unlabelled) [ARIA] Application (WARNING: Changes screen reader behavior, use with caution) ';
20 | }
21 | *[role="application"][aria-label]:before {
22 | display: table;
23 | height: auto; width: auto;
24 | position: relative; padding: 1px 0;
25 | background-color: white;
26 | color: green;
27 | font-size: .9rem; font-weight: 900;
28 | content: ' [ARIA] Application (WARNING: Changes screen reader behavior, use with caution) aria-label=' attr(aria-label) ' ';
29 | }
30 | *[role="application"][aria-labelledby]:before {
31 | display: table;
32 | height: auto; width: auto;
33 | position: relative; padding: 1px 0;
34 | background-color: white;
35 | color: green;
36 | font-size: .9rem; font-weight: 900;
37 | content: ' [ARIA] Application (WARNING: Changes screen reader behavior, use with caution) aria-labelledby=' attr(aria-labelledby) ' ';
38 | }
39 |
40 | /*
41 | ARIA Alertdialog
42 | Required attributes: aria-label or aria-labelledby, and optionally aria-describedby
43 | Note: When rendered, focus must move to an active element within the Alertdialog. If modal, aria-modal="true" must be set and the forward and backward tab order must be confined to active elements within the Alertdialog container. When closed, focus must return to the triggering element if applicable.
44 | http://whatsock.com/training/matrices/#alertdialog
45 | */
46 |
47 | *[role="alertdialog"] {
48 | border: ridge thick red;
49 | }
50 | *[role="alertdialog"]:before {
51 | display: table;
52 | height: auto; width: auto;
53 | position: relative; padding: 1px 0;
54 | background-color: #FFFFE5;
55 | color: red;
56 | font-size: .9rem; font-weight: 900;
57 | content: ' [ARIA] Alertdialog (missing required attributes such as aria-label or aria-labelledby) ';
58 | }
59 | *[role="alertdialog"][aria-label], *[role="alertdialog"][aria-labelledby] {
60 | border: ridge thick green;
61 | }
62 | *[role="alertdialog"][aria-label]:before, *[role="alertdialog"][aria-labelledby]:before {
63 | display: table;
64 | height: auto; width: auto;
65 | position: relative; padding: 1px 0;
66 | background-color: white;
67 | color: green;
68 | font-size: .9rem; font-weight: 900;
69 | content: ' [ARIA] (non-modal) Alertdialog (ensure focus is set to an element within the Alertdialog) ';
70 | }
71 | *[role="alertdialog"][aria-label][aria-modal="true"]:before, *[role="alertdialog"][aria-labelledby][aria-modal="true"]:before {
72 | display: table;
73 | height: auto; width: auto;
74 | position: relative; padding: 1px 0;
75 | background-color: white;
76 | color: green;
77 | font-size: .9rem; font-weight: 900;
78 | content: ' [ARIA] (modal) Alertdialog (ensure focus is set to an internal element and confined within the Alertdialog) ';
79 | }
80 |
81 | /*
82 | ARIA Dialog
83 | Required attributes: aria-label or aria-labelledby, and optionally aria-describedby
84 | Note: When rendered, focus must move to an active element within the Dialog. If modal, aria-modal="true" must be set and the forward and backward tab order must be confined to active elements within the Dialog container. When closed, focus must return to the triggering element if applicable.
85 | http://whatsock.com/training/matrices/#dialog
86 | */
87 |
88 | *[role="dialog"] {
89 | border: ridge thick red;
90 | }
91 | *[role="dialog"]:before {
92 | display: table;
93 | height: auto; width: auto;
94 | position: relative; padding: 1px 0;
95 | background-color: #FFFFE5;
96 | color: red;
97 | font-size: .9rem; font-weight: 900;
98 | content: ' [ARIA] Dialog (missing required attributes such as aria-label or aria-labelledby) ';
99 | }
100 | *[role="dialog"][aria-label], *[role="dialog"][aria-labelledby] {
101 | border: ridge thick green;
102 | }
103 | *[role="dialog"][aria-label]:before, *[role="dialog"][aria-labelledby]:before {
104 | display: table;
105 | height: auto; width: auto;
106 | position: relative; padding: 1px 0;
107 | background-color: white;
108 | color: green;
109 | font-size: .9rem; font-weight: 900;
110 | content: ' [ARIA] (non-modal) Dialog (ensure focus is set to an element within the Dialog) ';
111 | }
112 | *[role="dialog"][aria-label][aria-modal="true"]:before, *[role="dialog"][aria-labelledby][aria-modal="true"]:before {
113 | display: table;
114 | height: auto; width: auto;
115 | position: relative; padding: 1px 0;
116 | background-color: white;
117 | color: green;
118 | font-size: .9rem; font-weight: 900;
119 | content: ' [ARIA] (modal) Dialog (ensure focus is set to an internal element and confined within the Dialog) ';
120 | }
121 |
--------------------------------------------------------------------------------
/docs/visual-aria/public/5live-regions.css:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | Generic ARIA Live Region
4 | */
5 |
6 | *[aria-live] {
7 | border: ridge thick fuchsia;
8 | }
9 | *[aria-live]:before {
10 | display: table;
11 | height: auto; width: auto;
12 | position: relative; padding: 1px 0;
13 | background-color: white;
14 | color: fuchsia;
15 | font-size: .9rem; font-weight: 900;
16 | content: ' [ARIA] (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' ';
17 | }
18 | *[aria-live][aria-atomic]:before {
19 | display: table;
20 | height: auto; width: auto;
21 | position: relative; padding: 1px 0;
22 | background-color: white;
23 | color: fuchsia;
24 | font-size: .9rem; font-weight: 900;
25 | content: ' [ARIA] (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' ';
26 | }
27 | *[aria-live][aria-relevant]:before {
28 | display: table;
29 | height: auto; width: auto;
30 | position: relative; padding: 1px 0;
31 | background-color: white;
32 | color: fuchsia;
33 | font-size: .9rem; font-weight: 900;
34 | content: ' [ARIA] (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-relevant=' attr(aria-relevant) ' ';
35 | }
36 | *[aria-live][aria-relevant][aria-atomic]:before {
37 | display: table;
38 | height: auto; width: auto;
39 | position: relative; padding: 1px 0;
40 | background-color: white;
41 | color: fuchsia;
42 | font-size: .9rem; font-weight: 900;
43 | content: ' [ARIA] (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
44 | }
45 |
46 | /*
47 | ARIA Alert
48 | Note: For an OS system alert to fire, a container with role="alert" must be dynamically rendered using the CSS 'display' property, or JavaScript core DOM methods such as element.appendChild/replaceChild, or element.innerHTML.
49 | The default live region attribute for Alert is aria-live="assertive".
50 | http://whatsock.com/training/matrices/#alert
51 | */
52 |
53 | *[role="alert"] {
54 | border: ridge thick fuchsia;
55 | }
56 | *[role="alert"]:before {
57 | display: table;
58 | height: auto; width: auto;
59 | position: relative; padding: 1px 0;
60 | background-color: white;
61 | color: fuchsia;
62 | font-size: .9rem; font-weight: 900;
63 | content: ' [ARIA] Alert (live region) (must be dynamically written to) aria-live=assertive ';
64 | }
65 | *[role="alert"][aria-live]:before {
66 | display: table;
67 | height: auto; width: auto;
68 | position: relative; padding: 1px 0;
69 | background-color: white;
70 | color: fuchsia;
71 | font-size: .9rem; font-weight: 900;
72 | content: ' [ARIA] Alert (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' ';
73 | }
74 | *[role="alert"][aria-atomic]:before {
75 | display: table;
76 | height: auto; width: auto;
77 | position: relative; padding: 1px 0;
78 | background-color: white;
79 | color: fuchsia;
80 | font-size: .9rem; font-weight: 900;
81 | content: ' [ARIA] Alert (live region) (must be dynamically written to) aria-live=assertive aria-atomic=' attr(aria-atomic) ' ';
82 | }
83 | *[role="alert"][aria-atomic][aria-live]:before {
84 | display: table;
85 | height: auto; width: auto;
86 | position: relative; padding: 1px 0;
87 | background-color: white;
88 | color: fuchsia;
89 | font-size: .9rem; font-weight: 900;
90 | content: ' [ARIA] Alert (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' ';
91 | }
92 | *[role="alert"][aria-relevant]:before {
93 | display: table;
94 | height: auto; width: auto;
95 | position: relative; padding: 1px 0;
96 | background-color: white;
97 | color: fuchsia;
98 | font-size: .9rem; font-weight: 900;
99 | content: ' [ARIA] Alert (live region) (must be dynamically written to) aria-live=assertive aria-relevant=' attr(aria-relevant) ' ';
100 | }
101 | *[role="alert"][aria-relevant][aria-live]:before {
102 | display: table;
103 | height: auto; width: auto;
104 | position: relative; padding: 1px 0;
105 | background-color: white;
106 | color: fuchsia;
107 | font-size: .9rem; font-weight: 900;
108 | content: ' [ARIA] Alert (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-relevant=' attr(aria-relevant) ' ';
109 | }
110 | *[role="alert"][aria-relevant][aria-atomic]:before {
111 | display: table;
112 | height: auto; width: auto;
113 | position: relative; padding: 1px 0;
114 | background-color: white;
115 | color: fuchsia;
116 | font-size: .9rem; font-weight: 900;
117 | content: ' [ARIA] Alert (live region) (must be dynamically written to) aria-live=assertive aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
118 | }
119 | *[role="alert"][aria-relevant][aria-atomic][aria-live]:before {
120 | display: table;
121 | height: auto; width: auto;
122 | position: relative; padding: 1px 0;
123 | background-color: white;
124 | color: fuchsia;
125 | font-size: .9rem; font-weight: 900;
126 | content: ' [ARIA] Alert (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
127 | }
128 |
129 | /*
130 | ARIA Log
131 | Note: For a live region event to fire, a container with role="log" must be dynamically written to using JavaScript core DOM methods such as element.appendChild/replaceChild, or element.innerHTML.
132 | The default live region attribute for Log is aria-live="polite".
133 | http://whatsock.com/training/matrices/#log
134 | */
135 |
136 | *[role="log"] {
137 | border: ridge thick fuchsia;
138 | }
139 | *[role="log"]:before {
140 | display: table;
141 | height: auto; width: auto;
142 | position: relative; padding: 1px 0;
143 | background-color: white;
144 | color: fuchsia;
145 | font-size: .9rem; font-weight: 900;
146 | content: ' [ARIA] Log (live region) (must be dynamically written to) aria-live=polite ';
147 | }
148 | *[role="log"][aria-live]:before {
149 | display: table;
150 | height: auto; width: auto;
151 | position: relative; padding: 1px 0;
152 | background-color: white;
153 | color: fuchsia;
154 | font-size: .9rem; font-weight: 900;
155 | content: ' [ARIA] Log (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' ';
156 | }
157 | *[role="log"][aria-atomic]:before {
158 | display: table;
159 | height: auto; width: auto;
160 | position: relative; padding: 1px 0;
161 | background-color: white;
162 | color: fuchsia;
163 | font-size: .9rem; font-weight: 900;
164 | content: ' [ARIA] Log (live region) (must be dynamically written to) aria-live=polite aria-atomic=' attr(aria-atomic) ' ';
165 | }
166 | *[role="log"][aria-atomic][aria-live]:before {
167 | display: table;
168 | height: auto; width: auto;
169 | position: relative; padding: 1px 0;
170 | background-color: white;
171 | color: fuchsia;
172 | font-size: .9rem; font-weight: 900;
173 | content: ' [ARIA] Log (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' ';
174 | }
175 | *[role="log"][aria-relevant]:before {
176 | display: table;
177 | height: auto; width: auto;
178 | position: relative; padding: 1px 0;
179 | background-color: white;
180 | color: fuchsia;
181 | font-size: .9rem; font-weight: 900;
182 | content: ' [ARIA] Log (live region) (must be dynamically written to) aria-live=polite aria-relevant=' attr(aria-relevant) ' ';
183 | }
184 | *[role="log"][aria-relevant][aria-live]:before {
185 | display: table;
186 | height: auto; width: auto;
187 | position: relative; padding: 1px 0;
188 | background-color: white;
189 | color: fuchsia;
190 | font-size: .9rem; font-weight: 900;
191 | content: ' [ARIA] Log (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-relevant=' attr(aria-relevant) ' ';
192 | }
193 | *[role="log"][aria-relevant][aria-atomic]:before {
194 | display: table;
195 | height: auto; width: auto;
196 | position: relative; padding: 1px 0;
197 | background-color: white;
198 | color: fuchsia;
199 | font-size: .9rem; font-weight: 900;
200 | content: ' [ARIA] Log (live region) (must be dynamically written to) aria-live=polite aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
201 | }
202 | *[role="log"][aria-relevant][aria-atomic][aria-live]:before {
203 | display: table;
204 | height: auto; width: auto;
205 | position: relative; padding: 1px 0;
206 | background-color: white;
207 | color: fuchsia;
208 | font-size: .9rem; font-weight: 900;
209 | content: ' [ARIA] Log (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
210 | }
211 |
212 | /*
213 | ARIA Marquee
214 | Note: For a live region event to fire, a container with role="marquee" must be dynamically written to using JavaScript core DOM methods such as element.appendChild/replaceChild, or element.innerHTML.
215 | The default live region attribute for Marquee is aria-live="off".
216 | http://whatsock.com/training/matrices/#marquee
217 | */
218 |
219 | *[role="marquee"] {
220 | border: ridge thick fuchsia;
221 | }
222 | *[role="marquee"]:before {
223 | display: table;
224 | height: auto; width: auto;
225 | position: relative; padding: 1px 0;
226 | background-color: white;
227 | color: fuchsia;
228 | font-size: .9rem; font-weight: 900;
229 | content: ' [ARIA] Marquee (live region) (must be dynamically written to) aria-live=off ';
230 | }
231 | *[role="marquee"][aria-live]:before {
232 | display: table;
233 | height: auto; width: auto;
234 | position: relative; padding: 1px 0;
235 | background-color: white;
236 | color: fuchsia;
237 | font-size: .9rem; font-weight: 900;
238 | content: ' [ARIA] Marquee (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' ';
239 | }
240 | *[role="marquee"][aria-atomic]:before {
241 | display: table;
242 | height: auto; width: auto;
243 | position: relative; padding: 1px 0;
244 | background-color: white;
245 | color: fuchsia;
246 | font-size: .9rem; font-weight: 900;
247 | content: ' [ARIA] Marquee (live region) (must be dynamically written to) aria-live=off aria-atomic=' attr(aria-atomic) ' ';
248 | }
249 | *[role="marquee"][aria-atomic][aria-live]:before {
250 | display: table;
251 | height: auto; width: auto;
252 | position: relative; padding: 1px 0;
253 | background-color: white;
254 | color: fuchsia;
255 | font-size: .9rem; font-weight: 900;
256 | content: ' [ARIA] Marquee (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' ';
257 | }
258 | *[role="marquee"][aria-relevant]:before {
259 | display: table;
260 | height: auto; width: auto;
261 | position: relative; padding: 1px 0;
262 | background-color: white;
263 | color: fuchsia;
264 | font-size: .9rem; font-weight: 900;
265 | content: ' [ARIA] Marquee (live region) (must be dynamically written to) aria-live=off aria-relevant=' attr(aria-relevant) ' ';
266 | }
267 | *[role="marquee"][aria-relevant][aria-live]:before {
268 | display: table;
269 | height: auto; width: auto;
270 | position: relative; padding: 1px 0;
271 | background-color: white;
272 | color: fuchsia;
273 | font-size: .9rem; font-weight: 900;
274 | content: ' [ARIA] Marquee (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-relevant=' attr(aria-relevant) ' ';
275 | }
276 | *[role="marquee"][aria-relevant][aria-atomic]:before {
277 | display: table;
278 | height: auto; width: auto;
279 | position: relative; padding: 1px 0;
280 | background-color: white;
281 | color: fuchsia;
282 | font-size: .9rem; font-weight: 900;
283 | content: ' [ARIA] Marquee (live region) (must be dynamically written to) aria-live=off aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
284 | }
285 | *[role="marquee"][aria-relevant][aria-atomic][aria-live]:before {
286 | display: table;
287 | height: auto; width: auto;
288 | position: relative; padding: 1px 0;
289 | background-color: white;
290 | color: fuchsia;
291 | font-size: .9rem; font-weight: 900;
292 | content: ' [ARIA] Marquee (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
293 | }
294 |
295 | /*
296 | ARIA Status
297 | Note: For a live region event to fire, a container with role="status" must be dynamically written to using JavaScript core DOM methods such as element.appendChild/replaceChild, or element.innerHTML.
298 | The default live region attribute for Status is aria-live="polite".
299 | http://whatsock.com/training/matrices/#status
300 | */
301 |
302 | *[role="status"] {
303 | border: ridge thick fuchsia;
304 | }
305 | *[role="status"]:before {
306 | display: table;
307 | height: auto; width: auto;
308 | position: relative; padding: 1px 0;
309 | background-color: white;
310 | color: fuchsia;
311 | font-size: .9rem; font-weight: 900;
312 | content: ' [ARIA] Status (live region) (must be dynamically written to) aria-live=polite ';
313 | }
314 | *[role="status"][aria-live]:before {
315 | display: table;
316 | height: auto; width: auto;
317 | position: relative; padding: 1px 0;
318 | background-color: white;
319 | color: fuchsia;
320 | font-size: .9rem; font-weight: 900;
321 | content: ' [ARIA] Status (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' ';
322 | }
323 | *[role="status"][aria-atomic]:before {
324 | display: table;
325 | height: auto; width: auto;
326 | position: relative; padding: 1px 0;
327 | background-color: white;
328 | color: fuchsia;
329 | font-size: .9rem; font-weight: 900;
330 | content: ' [ARIA] Status (live region) (must be dynamically written to) aria-live=polite aria-atomic=' attr(aria-atomic) ' ';
331 | }
332 | *[role="status"][aria-atomic][aria-live]:before {
333 | display: table;
334 | height: auto; width: auto;
335 | position: relative; padding: 1px 0;
336 | background-color: white;
337 | color: fuchsia;
338 | font-size: .9rem; font-weight: 900;
339 | content: ' [ARIA] Status (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' ';
340 | }
341 | *[role="status"][aria-relevant]:before {
342 | display: table;
343 | height: auto; width: auto;
344 | position: relative; padding: 1px 0;
345 | background-color: white;
346 | color: fuchsia;
347 | font-size: .9rem; font-weight: 900;
348 | content: ' [ARIA] Status (live region) (must be dynamically written to) aria-live=polite aria-relevant=' attr(aria-relevant) ' ';
349 | }
350 | *[role="status"][aria-relevant][aria-live]:before {
351 | display: table;
352 | height: auto; width: auto;
353 | position: relative; padding: 1px 0;
354 | background-color: white;
355 | color: fuchsia;
356 | font-size: .9rem; font-weight: 900;
357 | content: ' [ARIA] Status (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-relevant=' attr(aria-relevant) ' ';
358 | }
359 | *[role="status"][aria-relevant][aria-atomic]:before {
360 | display: table;
361 | height: auto; width: auto;
362 | position: relative; padding: 1px 0;
363 | background-color: white;
364 | color: fuchsia;
365 | font-size: .9rem; font-weight: 900;
366 | content: ' [ARIA] Status (live region) (must be dynamically written to) aria-live=polite aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
367 | }
368 | *[role="status"][aria-relevant][aria-atomic][aria-live]:before {
369 | display: table;
370 | height: auto; width: auto;
371 | position: relative; padding: 1px 0;
372 | background-color: white;
373 | color: fuchsia;
374 | font-size: .9rem; font-weight: 900;
375 | content: ' [ARIA] Status (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
376 | }
377 |
378 | /*
379 | ARIA Timer
380 | Note: For a live region event to fire, a container with role="timer" must be dynamically written to using JavaScript core DOM methods such as element.appendChild/replaceChild, or element.innerHTML.
381 | The default live region attribute for Timer is aria-live="off".
382 | http://whatsock.com/training/matrices/#timer
383 | */
384 |
385 | *[role="timer"] {
386 | border: ridge thick fuchsia;
387 | }
388 | *[role="timer"]:before {
389 | display: table;
390 | height: auto; width: auto;
391 | position: relative; padding: 1px 0;
392 | background-color: white;
393 | color: fuchsia;
394 | font-size: .9rem; font-weight: 900;
395 | content: ' [ARIA] Timer (live region) (must be dynamically written to) aria-live=off ';
396 | }
397 | *[role="timer"][aria-live]:before {
398 | display: table;
399 | height: auto; width: auto;
400 | position: relative; padding: 1px 0;
401 | background-color: white;
402 | color: fuchsia;
403 | font-size: .9rem; font-weight: 900;
404 | content: ' [ARIA] Timer (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' ';
405 | }
406 | *[role="timer"][aria-atomic]:before {
407 | display: table;
408 | height: auto; width: auto;
409 | position: relative; padding: 1px 0;
410 | background-color: white;
411 | color: fuchsia;
412 | font-size: .9rem; font-weight: 900;
413 | content: ' [ARIA] Timer (live region) (must be dynamically written to) aria-live=off aria-atomic=' attr(aria-atomic) ' ';
414 | }
415 | *[role="timer"][aria-atomic][aria-live]:before {
416 | display: table;
417 | height: auto; width: auto;
418 | position: relative; padding: 1px 0;
419 | background-color: white;
420 | color: fuchsia;
421 | font-size: .9rem; font-weight: 900;
422 | content: ' [ARIA] Timer (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' ';
423 | }
424 | *[role="timer"][aria-relevant]:before {
425 | display: table;
426 | height: auto; width: auto;
427 | position: relative; padding: 1px 0;
428 | background-color: white;
429 | color: fuchsia;
430 | font-size: .9rem; font-weight: 900;
431 | content: ' [ARIA] Timer (live region) (must be dynamically written to) aria-live=off aria-relevant=' attr(aria-relevant) ' ';
432 | }
433 | *[role="timer"][aria-relevant][aria-live]:before {
434 | display: table;
435 | height: auto; width: auto;
436 | position: relative; padding: 1px 0;
437 | background-color: white;
438 | color: fuchsia;
439 | font-size: .9rem; font-weight: 900;
440 | content: ' [ARIA] Timer (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-relevant=' attr(aria-relevant) ' ';
441 | }
442 | *[role="timer"][aria-relevant][aria-atomic]:before {
443 | display: table;
444 | height: auto; width: auto;
445 | position: relative; padding: 1px 0;
446 | background-color: white;
447 | color: fuchsia;
448 | font-size: .9rem; font-weight: 900;
449 | content: ' [ARIA] Timer (live region) (must be dynamically written to) aria-live=off aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
450 | }
451 | *[role="timer"][aria-relevant][aria-atomic][aria-live]:before {
452 | display: table;
453 | height: auto; width: auto;
454 | position: relative; padding: 1px 0;
455 | background-color: white;
456 | color: fuchsia;
457 | font-size: .9rem; font-weight: 900;
458 | content: ' [ARIA] Timer (live region) (must be dynamically written to) aria-live=' attr(aria-live) ' aria-atomic=' attr(aria-atomic) ' aria-relevant=' attr(aria-relevant) ' ';
459 | }
460 |
--------------------------------------------------------------------------------
/docs/visual-aria/roles.js:
--------------------------------------------------------------------------------
1 | !function(){var e,t,l="https://whatsock.github.io/w3c-alternative-text-computation/Sample%20JavaScript%20Recursion%20Algorithm/recursion.min.js",O=(
2 | /*!
3 | * @overview es6-promise - a tiny implementation of Promises/A+.
4 | * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
5 | * @license Licensed under MIT license
6 | * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
7 | * @version v4.2.4+314e4831
8 | */
9 | e=this,t=function(){"use strict";function u(e){return"function"==typeof e}var r=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},a=0,t=void 0,i=void 0,n=function(e,t){d[a]=e,d[a+1]=t,2===(a+=2)&&(i?i(c):j())};var e="undefined"!=typeof window?window:void 0,o=e||{},o=o.MutationObserver||o.WebKitMutationObserver,l="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),B="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function s(){var e=setTimeout;return function(){return e(c,1)}}var d=new Array(1e3);function c(){for(var e=0;eLoading Visual ARIA, please wait.(Hold down Ctrl+Shift then Left-click any role for more details.) ',window.VisualARIA.VisualARIALoadingMsg=e,document.body.appendChild(window.VisualARIA.VisualARIALoadingMsg)),window.top.VisualARIA.IsVisualARIALoaded=!0,window.VisualARIA.toggleVisualARIA=function(){window.VisualARIA.VisualARIALoadingMsg&&(window.VisualARIA.VisualARIALoadingMsg.parentNode.removeChild(window.VisualARIA.VisualARIALoadingMsg),window.VisualARIA.VisualARIALoadingMsg=null),window.top.VisualARIA.IsVisualARIALoaded=!window.top.VisualARIA.IsVisualARIALoaded,window.VisualARIA.VisualARIAToggle.setAttribute("aria-label",window.top.VisualARIA.IsVisualARIALoaded?"Unload Visual ARIA":"Load Visual ARIA"),window.VisualARIA.VisualARIAToggle.innerHTML=window.VisualARIA.getVisualARIAStatus().lng},window.VisualARIA.getVisualARIAStatus=function(){return{lng:window.top.VisualARIA.IsVisualARIALoaded?"Unload Visual ARIA":"Load Visual ARIA",shrt:window.top.VisualARIA.IsVisualARIALoaded?"X":"O"}},function(e,k,L,M,T,S,E,C,N){var r,q,t,a,i,o,B=this,H=function(e){return"string"!=typeof e?"":e.replace(/^\s+|\s+$/g,"")},j=null,z=null,n=(S="aria-disabled,aria-readonly,aria-haspopup,aria-orientation,aria-label,aria-labelledby,aria-describedby,aria-pressed,aria-checked,aria-valuemin,aria-valuemax,aria-valuenow,aria-valuetext,aria-controls,aria-autocomplete,aria-expanded,aria-owns,aria-activedescendant,aria-posinset,aria-setsize,aria-level,role,alt".split(","),E=function(e,t){for(;e;)if((e=e.parentNode).getAttribute("role")===t)return"true";return"false"},C=function(e,t,r,a,i,o,n,l){if(window.top.VisualARIA.IsVisualARIALoaded){N&&N.init&&(N.comboboxListbox||T.getElementById("ws-visual-aria-7")||!T.querySelectorAll('*[role="combobox"], *[role="listbox"], *[role="option"]').length||(N.comboboxListbox=!0,q("7combobox-listbox.css","7")),N.menuMenubar||T.getElementById("ws-visual-aria-8")||!T.querySelectorAll('*[role="menu"], *[role="menubar"], *[role="menuitem"], *[role="menuitemradio"], *[role="menuitemcheckbox"]').length||(N.menuMenubar=!0,q("8menu-menubar.css","8")),N.radiogroup||T.getElementById("ws-visual-aria-9")||!T.querySelectorAll('*[role="radiogroup"], *[role="radio"]').length||(N.radiogroup=!0,q("9radiogroup.css","9")),N.tablist||T.getElementById("ws-visual-aria-10")||!T.querySelectorAll('*[role="tablist"], *[role="tab"], *[role="tabpanel"]').length||(N.tablist=!0,q("10tablist.css","10")),N.tree||T.getElementById("ws-visual-aria-11")||!T.querySelectorAll('*[role="tree"], *[role="treeitem"]').length||(N.tree=!0,q("11tree.css","11")),N.treegridGridTable||T.getElementById("ws-visual-aria-12")||!T.querySelectorAll('*[role="treegrid"], *[role="grid"], *[role="table"], *[role="rowgroup"], *[role="row"], *[role="columnheader"], *[role="rowheader"], *[role="gridcell"], *[role="cell"]').length||(N.treegridGridTable=!0,q("12treegrid-grid-table.css","12"))),N&&!N.init&&(N.init=!0,q("1roles.css","1"),N.landmarks=!0,q("2landmarks.css","2"),N.structural=!0,q("3structural.css","3"),N.dialogs=!0,q("4dialogs.css","4"),N.liveRegions=!0,q("5live-regions.css","5"),N.simpleWidgets=!0,q("6simple-widgets.css","6")),e=T.querySelectorAll("input[aria-owns], img[aria-owns], area[aria-owns], hr[aria-owns]");for(_=0;_? X ',document.body.appendChild(t),window.VisualARIA.VisualARIAMatrices=document.getElementById("ws-bm-aria-matrices-lnk-a"),window.VisualARIA.VisualARIAToggle=document.getElementById("ws-bm-aria-matrices-toggle-a"))}();
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "visual-aria",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "visual-aria",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "devDependencies": {
12 | "js-beautify": "^1.14.5",
13 | "prettier": "^2.7.1",
14 | "uglify-js": "^3.17.0"
15 | }
16 | },
17 | "node_modules/abbrev": {
18 | "version": "1.1.1",
19 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
20 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
21 | "dev": true
22 | },
23 | "node_modules/balanced-match": {
24 | "version": "1.0.2",
25 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
26 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
27 | "dev": true
28 | },
29 | "node_modules/brace-expansion": {
30 | "version": "2.0.1",
31 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
32 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
33 | "dev": true,
34 | "dependencies": {
35 | "balanced-match": "^1.0.0"
36 | }
37 | },
38 | "node_modules/commander": {
39 | "version": "2.20.3",
40 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
41 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
42 | "dev": true
43 | },
44 | "node_modules/config-chain": {
45 | "version": "1.1.13",
46 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
47 | "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
48 | "dev": true,
49 | "dependencies": {
50 | "ini": "^1.3.4",
51 | "proto-list": "~1.2.1"
52 | }
53 | },
54 | "node_modules/editorconfig": {
55 | "version": "0.15.3",
56 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
57 | "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
58 | "dev": true,
59 | "dependencies": {
60 | "commander": "^2.19.0",
61 | "lru-cache": "^4.1.5",
62 | "semver": "^5.6.0",
63 | "sigmund": "^1.0.1"
64 | },
65 | "bin": {
66 | "editorconfig": "bin/editorconfig"
67 | }
68 | },
69 | "node_modules/fs.realpath": {
70 | "version": "1.0.0",
71 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
72 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
73 | "dev": true
74 | },
75 | "node_modules/glob": {
76 | "version": "8.0.3",
77 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
78 | "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
79 | "dev": true,
80 | "dependencies": {
81 | "fs.realpath": "^1.0.0",
82 | "inflight": "^1.0.4",
83 | "inherits": "2",
84 | "minimatch": "^5.0.1",
85 | "once": "^1.3.0"
86 | },
87 | "engines": {
88 | "node": ">=12"
89 | },
90 | "funding": {
91 | "url": "https://github.com/sponsors/isaacs"
92 | }
93 | },
94 | "node_modules/inflight": {
95 | "version": "1.0.6",
96 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
97 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
98 | "dev": true,
99 | "dependencies": {
100 | "once": "^1.3.0",
101 | "wrappy": "1"
102 | }
103 | },
104 | "node_modules/inherits": {
105 | "version": "2.0.4",
106 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
107 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
108 | "dev": true
109 | },
110 | "node_modules/ini": {
111 | "version": "1.3.8",
112 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
113 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
114 | "dev": true
115 | },
116 | "node_modules/js-beautify": {
117 | "version": "1.14.5",
118 | "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.5.tgz",
119 | "integrity": "sha512-P2BfZBhXchh10uZ87qMKpM2tfcDXLA+jDiWU/OV864yWdTGzLUGNAdp9Y1ID5ubpNVGls3cZ1UMcO8myUB+UyA==",
120 | "dev": true,
121 | "dependencies": {
122 | "config-chain": "^1.1.13",
123 | "editorconfig": "^0.15.3",
124 | "glob": "^8.0.3",
125 | "nopt": "^6.0.0"
126 | },
127 | "bin": {
128 | "css-beautify": "js/bin/css-beautify.js",
129 | "html-beautify": "js/bin/html-beautify.js",
130 | "js-beautify": "js/bin/js-beautify.js"
131 | },
132 | "engines": {
133 | "node": ">=10"
134 | }
135 | },
136 | "node_modules/lru-cache": {
137 | "version": "4.1.5",
138 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
139 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
140 | "dev": true,
141 | "dependencies": {
142 | "pseudomap": "^1.0.2",
143 | "yallist": "^2.1.2"
144 | }
145 | },
146 | "node_modules/minimatch": {
147 | "version": "5.1.0",
148 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
149 | "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
150 | "dev": true,
151 | "dependencies": {
152 | "brace-expansion": "^2.0.1"
153 | },
154 | "engines": {
155 | "node": ">=10"
156 | }
157 | },
158 | "node_modules/nopt": {
159 | "version": "6.0.0",
160 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
161 | "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
162 | "dev": true,
163 | "dependencies": {
164 | "abbrev": "^1.0.0"
165 | },
166 | "bin": {
167 | "nopt": "bin/nopt.js"
168 | },
169 | "engines": {
170 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
171 | }
172 | },
173 | "node_modules/once": {
174 | "version": "1.4.0",
175 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
176 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
177 | "dev": true,
178 | "dependencies": {
179 | "wrappy": "1"
180 | }
181 | },
182 | "node_modules/prettier": {
183 | "version": "2.7.1",
184 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
185 | "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
186 | "dev": true,
187 | "bin": {
188 | "prettier": "bin-prettier.js"
189 | },
190 | "engines": {
191 | "node": ">=10.13.0"
192 | },
193 | "funding": {
194 | "url": "https://github.com/prettier/prettier?sponsor=1"
195 | }
196 | },
197 | "node_modules/proto-list": {
198 | "version": "1.2.4",
199 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
200 | "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
201 | "dev": true
202 | },
203 | "node_modules/pseudomap": {
204 | "version": "1.0.2",
205 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
206 | "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
207 | "dev": true
208 | },
209 | "node_modules/semver": {
210 | "version": "5.7.1",
211 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
212 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
213 | "dev": true,
214 | "bin": {
215 | "semver": "bin/semver"
216 | }
217 | },
218 | "node_modules/sigmund": {
219 | "version": "1.0.1",
220 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
221 | "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==",
222 | "dev": true
223 | },
224 | "node_modules/uglify-js": {
225 | "version": "3.17.0",
226 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz",
227 | "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==",
228 | "dev": true,
229 | "bin": {
230 | "uglifyjs": "bin/uglifyjs"
231 | },
232 | "engines": {
233 | "node": ">=0.8.0"
234 | }
235 | },
236 | "node_modules/wrappy": {
237 | "version": "1.0.2",
238 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
239 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
240 | "dev": true
241 | },
242 | "node_modules/yallist": {
243 | "version": "2.1.2",
244 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
245 | "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
246 | "dev": true
247 | }
248 | },
249 | "dependencies": {
250 | "abbrev": {
251 | "version": "1.1.1",
252 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
253 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
254 | "dev": true
255 | },
256 | "balanced-match": {
257 | "version": "1.0.2",
258 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
259 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
260 | "dev": true
261 | },
262 | "brace-expansion": {
263 | "version": "2.0.1",
264 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
265 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
266 | "dev": true,
267 | "requires": {
268 | "balanced-match": "^1.0.0"
269 | }
270 | },
271 | "commander": {
272 | "version": "2.20.3",
273 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
274 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
275 | "dev": true
276 | },
277 | "config-chain": {
278 | "version": "1.1.13",
279 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
280 | "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
281 | "dev": true,
282 | "requires": {
283 | "ini": "^1.3.4",
284 | "proto-list": "~1.2.1"
285 | }
286 | },
287 | "editorconfig": {
288 | "version": "0.15.3",
289 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
290 | "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
291 | "dev": true,
292 | "requires": {
293 | "commander": "^2.19.0",
294 | "lru-cache": "^4.1.5",
295 | "semver": "^5.6.0",
296 | "sigmund": "^1.0.1"
297 | }
298 | },
299 | "fs.realpath": {
300 | "version": "1.0.0",
301 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
302 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
303 | "dev": true
304 | },
305 | "glob": {
306 | "version": "8.0.3",
307 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
308 | "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
309 | "dev": true,
310 | "requires": {
311 | "fs.realpath": "^1.0.0",
312 | "inflight": "^1.0.4",
313 | "inherits": "2",
314 | "minimatch": "^5.0.1",
315 | "once": "^1.3.0"
316 | }
317 | },
318 | "inflight": {
319 | "version": "1.0.6",
320 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
321 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
322 | "dev": true,
323 | "requires": {
324 | "once": "^1.3.0",
325 | "wrappy": "1"
326 | }
327 | },
328 | "inherits": {
329 | "version": "2.0.4",
330 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
331 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
332 | "dev": true
333 | },
334 | "ini": {
335 | "version": "1.3.8",
336 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
337 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
338 | "dev": true
339 | },
340 | "js-beautify": {
341 | "version": "1.14.5",
342 | "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.5.tgz",
343 | "integrity": "sha512-P2BfZBhXchh10uZ87qMKpM2tfcDXLA+jDiWU/OV864yWdTGzLUGNAdp9Y1ID5ubpNVGls3cZ1UMcO8myUB+UyA==",
344 | "dev": true,
345 | "requires": {
346 | "config-chain": "^1.1.13",
347 | "editorconfig": "^0.15.3",
348 | "glob": "^8.0.3",
349 | "nopt": "^6.0.0"
350 | }
351 | },
352 | "lru-cache": {
353 | "version": "4.1.5",
354 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
355 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
356 | "dev": true,
357 | "requires": {
358 | "pseudomap": "^1.0.2",
359 | "yallist": "^2.1.2"
360 | }
361 | },
362 | "minimatch": {
363 | "version": "5.1.0",
364 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
365 | "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
366 | "dev": true,
367 | "requires": {
368 | "brace-expansion": "^2.0.1"
369 | }
370 | },
371 | "nopt": {
372 | "version": "6.0.0",
373 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
374 | "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
375 | "dev": true,
376 | "requires": {
377 | "abbrev": "^1.0.0"
378 | }
379 | },
380 | "once": {
381 | "version": "1.4.0",
382 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
383 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
384 | "dev": true,
385 | "requires": {
386 | "wrappy": "1"
387 | }
388 | },
389 | "prettier": {
390 | "version": "2.7.1",
391 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
392 | "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
393 | "dev": true
394 | },
395 | "proto-list": {
396 | "version": "1.2.4",
397 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
398 | "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
399 | "dev": true
400 | },
401 | "pseudomap": {
402 | "version": "1.0.2",
403 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
404 | "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
405 | "dev": true
406 | },
407 | "semver": {
408 | "version": "5.7.1",
409 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
410 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
411 | "dev": true
412 | },
413 | "sigmund": {
414 | "version": "1.0.1",
415 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
416 | "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==",
417 | "dev": true
418 | },
419 | "uglify-js": {
420 | "version": "3.17.0",
421 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz",
422 | "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==",
423 | "dev": true
424 | },
425 | "wrappy": {
426 | "version": "1.0.2",
427 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
428 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
429 | "dev": true
430 | },
431 | "yallist": {
432 | "version": "2.1.2",
433 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
434 | "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
435 | "dev": true
436 | }
437 | }
438 | }
439 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "visual-aria",
3 | "version": "1.0.0",
4 | "private": true,
5 | "description": "Visual ARIA allows engineers, testers, educators, and students to physically observe ARIA usage within web technologies, including ARIA 1.1 structural, live region, and widget roles, proper nesting and focus management, plus requisite and optional supporting attributes to aid in development.",
6 | "main": "index.js",
7 | "directories": {
8 | "doc": "docs"
9 | },
10 | "scripts": {
11 | "build": "uglifyjs \"./docs/visual-aria/roles.uncompressed.js\" --comments /^!/ --compress --mangle --output \"./docs/visual-aria/roles.js\"",
12 | "fix": "prettier --write \"./docs/visual-aria/roles.uncompressed.js\" \"./**/{setup.js,radios.js}\" && js-beautify -r --type=\"html\" \"./**/*.{htm,html}\"",
13 | "test": "echo \"Error: no test specified\" && exit 1"
14 | },
15 | "repository": {
16 | "type": "git",
17 | "url": "git+https://github.com/whatsock/visual-aria.git"
18 | },
19 | "keywords": [],
20 | "author": "",
21 | "license": "ISC",
22 | "bugs": {
23 | "url": "https://github.com/whatsock/visual-aria/issues"
24 | },
25 | "homepage": "https://github.com/whatsock/visual-aria#readme",
26 | "devDependencies": {
27 | "js-beautify": "^1.14.5",
28 | "prettier": "^2.7.1",
29 | "uglify-js": "^3.17.0"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------