@afixt/test-utils 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/CLAUDE.md +1 -1
- package/README.md +40 -1
- package/docs/arrayUtils.js.html +8 -13
- package/docs/colorConversions.js.html +238 -0
- package/docs/constants.js.html +671 -0
- package/docs/cssUtils.js.html +80 -0
- package/docs/data/search.json +1 -1
- package/docs/domUtils.js.html +252 -32
- package/docs/formUtils.js.html +161 -0
- package/docs/getAccessibleName.js.html +215 -120
- package/docs/getAccessibleText.js.html +103 -48
- package/docs/getAriaAttributesByElement.js.html +4 -4
- package/docs/getCSSGeneratedContent.js.html +50 -41
- package/docs/getComputedRole.js.html +8 -3
- package/docs/getFocusableElements.js.html +25 -21
- package/docs/getGeneratedContent.js.html +24 -13
- package/docs/getImageText.js.html +31 -9
- package/docs/getStyleObject.js.html +7 -3
- package/docs/global.html +1 -1
- package/docs/hasAccessibleName.js.html +2 -10
- package/docs/hasAttribute.js.html +7 -3
- package/docs/hasCSSGeneratedContent.js.html +18 -14
- package/docs/hasHiddenParent.js.html +4 -4
- package/docs/hasParent.js.html +7 -3
- package/docs/hasValidAriaAttributes.js.html +7 -3
- package/docs/index.html +1 -1
- package/docs/index.js.html +98 -32
- package/docs/isA11yVisible.js.html +98 -0
- package/docs/isAriaAttributesValid.js.html +10 -64
- package/docs/isComplexTable.js.html +13 -6
- package/docs/isDataTable.js.html +11 -6
- package/docs/isFocusable.js.html +36 -12
- package/docs/isHidden.js.html +47 -11
- package/docs/isOffScreen.js.html +7 -3
- package/docs/isValidUrl.js.html +7 -3
- package/docs/listEventListeners.js.html +203 -0
- package/docs/module-QueryCache.html +3 -0
- package/docs/module-afixt-test-utils.html +1 -1
- package/docs/module-colorConversions.html +3 -0
- package/docs/module-constants.html +3 -0
- package/docs/module-cssUtils.html +3 -0
- package/docs/module-formUtils.html +3 -0
- package/docs/module-suggestContrast.html +3 -0
- package/docs/module-tableUtils.html +3 -0
- package/docs/queryCache.js.html +360 -0
- package/docs/scripts/core.js +726 -726
- package/docs/scripts/core.min.js +22 -22
- package/docs/scripts/resize.js +90 -90
- package/docs/scripts/search.js +265 -265
- package/docs/scripts/third-party/Apache-License-2.0.txt +202 -202
- package/docs/scripts/third-party/fuse.js +8 -8
- package/docs/scripts/third-party/hljs-line-num-original.js +369 -369
- package/docs/scripts/third-party/hljs-original.js +5171 -5171
- package/docs/scripts/third-party/popper.js +5 -5
- package/docs/scripts/third-party/tippy.js +1 -1
- package/docs/scripts/third-party/tocbot.js +671 -671
- package/docs/styles/clean-jsdoc-theme-base.css +1159 -1159
- package/docs/styles/clean-jsdoc-theme-dark.css +412 -412
- package/docs/styles/clean-jsdoc-theme-light.css +482 -482
- package/docs/styles/clean-jsdoc-theme-scrollbar.css +29 -29
- package/docs/suggestContrast.js.html +389 -0
- package/docs/tableUtils.js.html +151 -0
- package/docs/testContrast.js.html +201 -24
- package/docs/testLang.js.html +533 -451
- package/docs/testOrder.js.html +9 -4
- package/package.json +1 -1
- package/src/colorConversions.js +235 -0
- package/src/index.js +6 -0
- package/src/stringUtils.js +35 -0
- package/src/suggestContrast.js +386 -0
- package/test/colorConversions.test.js +223 -0
- package/test/stringUtils.test.js +60 -0
- package/test/suggestContrast.test.js +394 -0
|
@@ -0,0 +1,671 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Source: constants.js</title><!--[if lt IE 9]>
|
|
2
|
+
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
3
|
+
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-QueryCache.html">QueryCache</a></div><div class="sidebar-section-children"><a href="module-afixt-test-utils.html">afixt-test-utils</a></div><div class="sidebar-section-children"><a href="module-colorConversions.html">colorConversions</a></div><div class="sidebar-section-children"><a href="module-constants.html">constants</a></div><div class="sidebar-section-children"><a href="module-cssUtils.html">cssUtils</a></div><div class="sidebar-section-children"><a href="module-formUtils.html">formUtils</a></div><div class="sidebar-section-children"><a href="module-suggestContrast.html">suggestContrast</a></div><div class="sidebar-section-children"><a href="module-tableUtils.html">tableUtils</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#RTL_LANGUAGES">RTL_LANGUAGES</a></div><div class="sidebar-section-children"><a href="global.html#_internal">_internal</a></div><div class="sidebar-section-children"><a href="global.html#arrayCount">arrayCount</a></div><div class="sidebar-section-children"><a href="global.html#arrayRemoveByValue">arrayRemoveByValue</a></div><div class="sidebar-section-children"><a href="global.html#arrayUnique">arrayUnique</a></div><div class="sidebar-section-children"><a href="global.html#cellColorDiffs">cellColorDiffs</a></div><div class="sidebar-section-children"><a href="global.html#cellCount">cellCount</a></div><div class="sidebar-section-children"><a href="global.html#checkInconsistent">checkInconsistent</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsInHeader">checkMultiRowsInHeader</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsWithColspan">checkMultiRowsWithColspan</a></div><div class="sidebar-section-children"><a href="global.html#cleanBlank">cleanBlank</a></div><div class="sidebar-section-children"><a href="global.html#colCount">colCount</a></div><div class="sidebar-section-children"><a href="global.html#collectSubtreeText">collectSubtreeText</a></div><div class="sidebar-section-children"><a href="global.html#countBordersPct">countBordersPct</a></div><div class="sidebar-section-children"><a href="global.html#extractMeaningfulContent">extractMeaningfulContent</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleName">getAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleText">getAccessibleText</a></div><div class="sidebar-section-children"><a href="global.html#getAriaAttributesByElement">getAriaAttributesByElement</a></div><div class="sidebar-section-children"><a href="global.html#getAttributeHandlers">getAttributeHandlers</a></div><div class="sidebar-section-children"><a href="global.html#getCSSGeneratedContent">getCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getColorContrast">getColorContrast</a></div><div class="sidebar-section-children"><a href="global.html#getComputedBackgroundColor">getComputedBackgroundColor</a></div><div class="sidebar-section-children"><a href="global.html#getComputedRole">getComputedRole</a></div><div class="sidebar-section-children"><a href="global.html#getContrastRatio">getContrastRatio</a></div><div class="sidebar-section-children"><a href="global.html#getEffectiveDir">getEffectiveDir</a></div><div class="sidebar-section-children"><a href="global.html#getEventListeners">getEventListeners</a></div><div class="sidebar-section-children"><a href="global.html#getFocusableElements">getFocusableElements</a></div><div class="sidebar-section-children"><a href="global.html#getGeneratedContent">getGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getImageText">getImageText</a></div><div class="sidebar-section-children"><a href="global.html#getPropertyHandlers">getPropertyHandlers</a></div><div class="sidebar-section-children"><a href="global.html#getRelativeLuminance">getRelativeLuminance</a></div><div class="sidebar-section-children"><a href="global.html#getStyleObject">getStyleObject</a></div><div class="sidebar-section-children"><a href="global.html#getTwoLetterCode">getTwoLetterCode</a></div><div class="sidebar-section-children"><a href="global.html#hasAccessibleName">hasAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#hasAttribute">hasAttribute</a></div><div class="sidebar-section-children"><a href="global.html#hasBackgroundImage">hasBackgroundImage</a></div><div class="sidebar-section-children"><a href="global.html#hasCSSGeneratedContent">hasCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#hasHiddenParent">hasHiddenParent</a></div><div class="sidebar-section-children"><a href="global.html#hasParent">hasParent</a></div><div class="sidebar-section-children"><a href="global.html#hasValidAriaAttributes">hasValidAriaAttributes</a></div><div class="sidebar-section-children"><a href="global.html#isA11yVisible">isA11yVisible</a></div><div class="sidebar-section-children"><a href="global.html#isAriaAttributeValid">isAriaAttributeValid</a></div><div class="sidebar-section-children"><a href="global.html#isComplexTable">isComplexTable</a></div><div class="sidebar-section-children"><a href="global.html#isDataTable">isDataTable</a></div><div class="sidebar-section-children"><a href="global.html#isFocusable">isFocusable</a></div><div class="sidebar-section-children"><a href="global.html#isHidden">isHidden</a></div><div class="sidebar-section-children"><a href="global.html#isNotVisible">isNotVisible</a></div><div class="sidebar-section-children"><a href="global.html#isOffScreen">isOffScreen</a></div><div class="sidebar-section-children"><a href="global.html#isRTLLanguage">isRTLLanguage</a></div><div class="sidebar-section-children"><a href="global.html#isValidLanguageCode">isValidLanguageCode</a></div><div class="sidebar-section-children"><a href="global.html#isValidUrl">isValidUrl</a></div><div class="sidebar-section-children"><a href="global.html#langCodes">langCodes</a></div><div class="sidebar-section-children"><a href="global.html#listEventListeners">listEventListeners</a></div><div class="sidebar-section-children"><a href="global.html#luminance">luminance</a></div><div class="sidebar-section-children"><a href="global.html#matchesSelector">matchesSelector</a></div><div class="sidebar-section-children"><a href="global.html#parseColor">parseColor</a></div><div class="sidebar-section-children"><a href="global.html#parseRGB">parseRGB</a></div><div class="sidebar-section-children"><a href="global.html#rowCount">rowCount</a></div><div class="sidebar-section-children"><a href="global.html#rtls">rtls</a></div><div class="sidebar-section-children"><a href="global.html#sortByVisualOrder">sortByVisualOrder</a></div><div class="sidebar-section-children"><a href="global.html#strlen">strlen</a></div><div class="sidebar-section-children"><a href="global.html#testContrast">testContrast</a></div><div class="sidebar-section-children"><a href="global.html#testLang">testLang</a></div><div class="sidebar-section-children"><a href="global.html#testOrder">testOrder</a></div><div class="sidebar-section-children"><a href="global.html#validLangCodes">validLangCodes</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">constants.js</h1></header><article><pre class="prettyprint source lang-js"><code>/**
|
|
4
|
+
* @file Shared constants for accessibility testing
|
|
5
|
+
* @module constants
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* CSS selector string for interactive elements.
|
|
10
|
+
* Matches native HTML interactive elements and ARIA widget roles.
|
|
11
|
+
* @type {string}
|
|
12
|
+
*/
|
|
13
|
+
const INTERACTIVE_SELECTOR = [
|
|
14
|
+
'a[href]',
|
|
15
|
+
'button',
|
|
16
|
+
'input:not([type="hidden"])',
|
|
17
|
+
'select',
|
|
18
|
+
'textarea',
|
|
19
|
+
'[tabindex]:not([tabindex="-1"])',
|
|
20
|
+
'[role="button"]',
|
|
21
|
+
'[role="link"]',
|
|
22
|
+
'[role="checkbox"]',
|
|
23
|
+
'[role="menuitem"]',
|
|
24
|
+
'[role="menuitemcheckbox"]',
|
|
25
|
+
'[role="menuitemradio"]',
|
|
26
|
+
'[role="tab"]',
|
|
27
|
+
'[role="switch"]',
|
|
28
|
+
'[role="option"]',
|
|
29
|
+
'[role="radio"]',
|
|
30
|
+
'[role="slider"]',
|
|
31
|
+
'[role="spinbutton"]',
|
|
32
|
+
'[role="textbox"]',
|
|
33
|
+
'[role="combobox"]',
|
|
34
|
+
'[role="listbox"]',
|
|
35
|
+
'[role="searchbox"]',
|
|
36
|
+
'[role="gridcell"]',
|
|
37
|
+
'[role="treeitem"]',
|
|
38
|
+
].join(', ');
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* CSS selector string for naturally focusable elements.
|
|
42
|
+
* These elements are focusable by default (unless disabled).
|
|
43
|
+
* @type {string}
|
|
44
|
+
*/
|
|
45
|
+
const FOCUSABLE_SELECTOR = [
|
|
46
|
+
'a[href]',
|
|
47
|
+
'button:not([disabled])',
|
|
48
|
+
'input:not([disabled]):not([type="hidden"])',
|
|
49
|
+
'select:not([disabled])',
|
|
50
|
+
'textarea:not([disabled])',
|
|
51
|
+
'[tabindex]',
|
|
52
|
+
'audio[controls]',
|
|
53
|
+
'video[controls]',
|
|
54
|
+
'embed',
|
|
55
|
+
'iframe',
|
|
56
|
+
'object',
|
|
57
|
+
'[contenteditable]:not([contenteditable="false"])',
|
|
58
|
+
].join(', ');
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Labellable elements per HTML spec that can be associated with a <label>.
|
|
62
|
+
* @type {string[]}
|
|
63
|
+
*/
|
|
64
|
+
const LABELLABLE_ELEMENTS = [
|
|
65
|
+
'input',
|
|
66
|
+
'select',
|
|
67
|
+
'textarea',
|
|
68
|
+
'button',
|
|
69
|
+
'meter',
|
|
70
|
+
'output',
|
|
71
|
+
'progress',
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Elements that validly support the alt attribute per HTML spec.
|
|
76
|
+
* @type {string[]}
|
|
77
|
+
*/
|
|
78
|
+
const VALID_ALT_ELEMENTS = ['IMG', 'AREA', 'INPUT', 'APPLET'];
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* ISO 639-1 codes for right-to-left languages.
|
|
82
|
+
* @type {string[]}
|
|
83
|
+
*/
|
|
84
|
+
const RTL_LANGUAGES = [
|
|
85
|
+
'ar', // Arabic
|
|
86
|
+
'he', // Hebrew
|
|
87
|
+
'fa', // Persian/Farsi
|
|
88
|
+
'ur', // Urdu
|
|
89
|
+
'sd', // Sindhi
|
|
90
|
+
'yi', // Yiddish
|
|
91
|
+
'ps', // Pashto
|
|
92
|
+
'ku', // Kurdish (some dialects)
|
|
93
|
+
'ug', // Uyghur
|
|
94
|
+
'dv', // Divehi/Maldivian
|
|
95
|
+
];
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Generic, non-descriptive, or meaningless frame/iframe titles.
|
|
99
|
+
* @type {string[]}
|
|
100
|
+
*/
|
|
101
|
+
const GENERIC_TITLES = [
|
|
102
|
+
'iframe',
|
|
103
|
+
'frame',
|
|
104
|
+
'untitled',
|
|
105
|
+
'title',
|
|
106
|
+
'content',
|
|
107
|
+
'main',
|
|
108
|
+
'page',
|
|
109
|
+
// Browser/authoring tool defaults
|
|
110
|
+
'untitled document',
|
|
111
|
+
'new page',
|
|
112
|
+
'blank',
|
|
113
|
+
'document',
|
|
114
|
+
'home',
|
|
115
|
+
'index',
|
|
116
|
+
'new document',
|
|
117
|
+
'no title',
|
|
118
|
+
'default',
|
|
119
|
+
'webpage',
|
|
120
|
+
'web page',
|
|
121
|
+
// CMS and editor defaults
|
|
122
|
+
'new tab',
|
|
123
|
+
'about blank',
|
|
124
|
+
'placeholder',
|
|
125
|
+
'sample page',
|
|
126
|
+
'test',
|
|
127
|
+
'example page',
|
|
128
|
+
'my page',
|
|
129
|
+
'welcome',
|
|
130
|
+
'landing page',
|
|
131
|
+
'site',
|
|
132
|
+
'header',
|
|
133
|
+
'footer',
|
|
134
|
+
'sidebar',
|
|
135
|
+
'banner',
|
|
136
|
+
'navigation',
|
|
137
|
+
'advertisement',
|
|
138
|
+
'ad',
|
|
139
|
+
'widget',
|
|
140
|
+
'module',
|
|
141
|
+
'section',
|
|
142
|
+
'region',
|
|
143
|
+
'form',
|
|
144
|
+
'search',
|
|
145
|
+
'menu',
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Generic or useless table summaries commonly found in the wild.
|
|
150
|
+
* Merged from multiple detection contexts.
|
|
151
|
+
* @type {string[]}
|
|
152
|
+
*/
|
|
153
|
+
const GENERIC_SUMMARIES = [
|
|
154
|
+
'table',
|
|
155
|
+
'data',
|
|
156
|
+
'data table',
|
|
157
|
+
'information',
|
|
158
|
+
'content',
|
|
159
|
+
'main content',
|
|
160
|
+
'layout',
|
|
161
|
+
'layout table',
|
|
162
|
+
'for layout',
|
|
163
|
+
'table for layout purposes',
|
|
164
|
+
'structural table',
|
|
165
|
+
'this table is used for page layout',
|
|
166
|
+
'header',
|
|
167
|
+
'footer',
|
|
168
|
+
'navigation',
|
|
169
|
+
'nav',
|
|
170
|
+
'body',
|
|
171
|
+
'combobox',
|
|
172
|
+
'links design table',
|
|
173
|
+
'title and navigation',
|
|
174
|
+
'main heading',
|
|
175
|
+
'spacer',
|
|
176
|
+
'spacer table',
|
|
177
|
+
'menu',
|
|
178
|
+
'n/a',
|
|
179
|
+
'na',
|
|
180
|
+
'none',
|
|
181
|
+
'null',
|
|
182
|
+
'empty',
|
|
183
|
+
'blank',
|
|
184
|
+
'undefined',
|
|
185
|
+
'table summary',
|
|
186
|
+
'summary',
|
|
187
|
+
];
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Phrases indicating structure-focused rather than content-focused table summary.
|
|
191
|
+
* @type {string[]}
|
|
192
|
+
*/
|
|
193
|
+
const STRUCTURE_PHRASES = [
|
|
194
|
+
'rows and columns',
|
|
195
|
+
'grid format',
|
|
196
|
+
'for display purposes',
|
|
197
|
+
'arranged in a grid',
|
|
198
|
+
'the following table shows',
|
|
199
|
+
];
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Phrases indicating vague/rambling table summary content.
|
|
203
|
+
* @type {string[]}
|
|
204
|
+
*/
|
|
205
|
+
const VAGUE_PHRASES = [
|
|
206
|
+
'might find interesting',
|
|
207
|
+
'depending on their needs',
|
|
208
|
+
'users might find',
|
|
209
|
+
'may be useful',
|
|
210
|
+
];
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Valid ARIA parent-child interactive role combinations per the WAI-ARIA spec.
|
|
214
|
+
* These composite widget patterns require interactive children by design.
|
|
215
|
+
* Key = parent role, Value = array of valid child roles.
|
|
216
|
+
* @type {Object.<string, string[]>}
|
|
217
|
+
*/
|
|
218
|
+
const VALID_ARIA_NESTING = {
|
|
219
|
+
listbox: ['option'],
|
|
220
|
+
menu: ['menuitem', 'menuitemcheckbox', 'menuitemradio', 'menu'],
|
|
221
|
+
menubar: ['menuitem', 'menuitemcheckbox', 'menuitemradio', 'menu'],
|
|
222
|
+
menuitem: ['menu', 'menubar'],
|
|
223
|
+
tablist: ['tab'],
|
|
224
|
+
tree: ['treeitem', 'group'],
|
|
225
|
+
treeitem: ['group', 'tree'],
|
|
226
|
+
grid: ['gridcell', 'row', 'rowgroup'],
|
|
227
|
+
row: ['gridcell', 'columnheader', 'rowheader', 'cell'],
|
|
228
|
+
rowgroup: ['row'],
|
|
229
|
+
radiogroup: ['radio'],
|
|
230
|
+
combobox: ['listbox', 'textbox', 'tree', 'grid', 'dialog'],
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Thresholds for determining table complexity.
|
|
235
|
+
* @type {Object}
|
|
236
|
+
*/
|
|
237
|
+
const COMPLEXITY_THRESHOLDS = {
|
|
238
|
+
MAX_COLUMNS: 10,
|
|
239
|
+
MAX_HEADER_COLSPAN: 4,
|
|
240
|
+
MAX_ROWSPAN: 3,
|
|
241
|
+
MIN_HEADER_ROWS_FOR_COMPLEX: 3,
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* WCAG 2.5.5 minimum target size in CSS pixels.
|
|
246
|
+
* @type {number}
|
|
247
|
+
*/
|
|
248
|
+
const MIN_TARGET_SIZE = 44;
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Phrases that indicate a warning about new window/tab behavior.
|
|
252
|
+
* @type {string[]}
|
|
253
|
+
*/
|
|
254
|
+
const NEW_WINDOW_WARNINGS = [
|
|
255
|
+
'new window',
|
|
256
|
+
'new tab',
|
|
257
|
+
'opens in new',
|
|
258
|
+
'opens in a new',
|
|
259
|
+
'opens new',
|
|
260
|
+
'external link',
|
|
261
|
+
'external site',
|
|
262
|
+
];
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* ARIA roles that represent interactive widgets.
|
|
266
|
+
* @type {string[]}
|
|
267
|
+
*/
|
|
268
|
+
const INTERACTIVE_ROLES = [
|
|
269
|
+
'button',
|
|
270
|
+
'checkbox',
|
|
271
|
+
'combobox',
|
|
272
|
+
'link',
|
|
273
|
+
'menu',
|
|
274
|
+
'menuitemcheckbox',
|
|
275
|
+
'menuitemradio',
|
|
276
|
+
'radio',
|
|
277
|
+
'scrollbar',
|
|
278
|
+
'slider',
|
|
279
|
+
'spinbutton',
|
|
280
|
+
'tablist',
|
|
281
|
+
'textbox',
|
|
282
|
+
'toolbar',
|
|
283
|
+
'switch',
|
|
284
|
+
'tree',
|
|
285
|
+
];
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* HTML tag names that are landmark elements.
|
|
289
|
+
* @type {string[]}
|
|
290
|
+
*/
|
|
291
|
+
const LANDMARK_TAGS = ['NAV', 'MAIN', 'HEADER', 'FOOTER', 'ASIDE', 'SECTION'];
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* ARIA landmark roles.
|
|
295
|
+
* @type {string[]}
|
|
296
|
+
*/
|
|
297
|
+
const LANDMARK_ROLES = [
|
|
298
|
+
'navigation',
|
|
299
|
+
'main',
|
|
300
|
+
'banner',
|
|
301
|
+
'contentinfo',
|
|
302
|
+
'complementary',
|
|
303
|
+
'region',
|
|
304
|
+
'search',
|
|
305
|
+
'form',
|
|
306
|
+
];
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Mapping of HTML tag names to their implicit landmark roles.
|
|
310
|
+
* @type {Object.<string, string>}
|
|
311
|
+
*/
|
|
312
|
+
const LANDMARK_ELEMENT_MAP = {
|
|
313
|
+
nav: 'navigation',
|
|
314
|
+
main: 'main',
|
|
315
|
+
aside: 'complementary',
|
|
316
|
+
header: 'banner',
|
|
317
|
+
footer: 'contentinfo',
|
|
318
|
+
section: 'region',
|
|
319
|
+
form: 'form',
|
|
320
|
+
search: 'search',
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Set of valid ARIA attributes per WAI-ARIA specification.
|
|
325
|
+
* @type {Set<string>}
|
|
326
|
+
*/
|
|
327
|
+
const VALID_ARIA_ATTRIBUTES = new Set([
|
|
328
|
+
'aria-activedescendant',
|
|
329
|
+
'aria-atomic',
|
|
330
|
+
'aria-autocomplete',
|
|
331
|
+
'aria-braillelabel',
|
|
332
|
+
'aria-brailleroledescription',
|
|
333
|
+
'aria-busy',
|
|
334
|
+
'aria-checked',
|
|
335
|
+
'aria-colcount',
|
|
336
|
+
'aria-colindex',
|
|
337
|
+
'aria-colindextext',
|
|
338
|
+
'aria-colspan',
|
|
339
|
+
'aria-controls',
|
|
340
|
+
'aria-current',
|
|
341
|
+
'aria-describedby',
|
|
342
|
+
'aria-description',
|
|
343
|
+
'aria-details',
|
|
344
|
+
'aria-disabled',
|
|
345
|
+
'aria-dropeffect',
|
|
346
|
+
'aria-errormessage',
|
|
347
|
+
'aria-expanded',
|
|
348
|
+
'aria-flowto',
|
|
349
|
+
'aria-grabbed',
|
|
350
|
+
'aria-haspopup',
|
|
351
|
+
'aria-hidden',
|
|
352
|
+
'aria-invalid',
|
|
353
|
+
'aria-keyshortcuts',
|
|
354
|
+
'aria-label',
|
|
355
|
+
'aria-labelledby',
|
|
356
|
+
'aria-level',
|
|
357
|
+
'aria-live',
|
|
358
|
+
'aria-modal',
|
|
359
|
+
'aria-multiline',
|
|
360
|
+
'aria-multiselectable',
|
|
361
|
+
'aria-orientation',
|
|
362
|
+
'aria-owns',
|
|
363
|
+
'aria-placeholder',
|
|
364
|
+
'aria-posinset',
|
|
365
|
+
'aria-pressed',
|
|
366
|
+
'aria-readonly',
|
|
367
|
+
'aria-relevant',
|
|
368
|
+
'aria-required',
|
|
369
|
+
'aria-roledescription',
|
|
370
|
+
'aria-rowcount',
|
|
371
|
+
'aria-rowindex',
|
|
372
|
+
'aria-rowindextext',
|
|
373
|
+
'aria-rowspan',
|
|
374
|
+
'aria-selected',
|
|
375
|
+
'aria-setsize',
|
|
376
|
+
'aria-sort',
|
|
377
|
+
'aria-valuemax',
|
|
378
|
+
'aria-valuemin',
|
|
379
|
+
'aria-valuenow',
|
|
380
|
+
'aria-valuetext',
|
|
381
|
+
]);
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* CSS selectors for elements that are inherently not visible in the accessibility tree.
|
|
385
|
+
* @type {string[]}
|
|
386
|
+
*/
|
|
387
|
+
const NON_VISIBLE_SELECTORS = [
|
|
388
|
+
'base',
|
|
389
|
+
'head',
|
|
390
|
+
'meta',
|
|
391
|
+
'title',
|
|
392
|
+
'link',
|
|
393
|
+
'style',
|
|
394
|
+
'script',
|
|
395
|
+
'br',
|
|
396
|
+
'nobr',
|
|
397
|
+
'col',
|
|
398
|
+
'embed',
|
|
399
|
+
'input[type="hidden"]',
|
|
400
|
+
'keygen',
|
|
401
|
+
'source',
|
|
402
|
+
'track',
|
|
403
|
+
'wbr',
|
|
404
|
+
'datalist',
|
|
405
|
+
'area',
|
|
406
|
+
'param',
|
|
407
|
+
'noframes',
|
|
408
|
+
'ruby > rp',
|
|
409
|
+
];
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* ARIA roles that derive their accessible name from text content.
|
|
413
|
+
* @type {string[]}
|
|
414
|
+
*/
|
|
415
|
+
const TEXT_ROLES = [
|
|
416
|
+
'button',
|
|
417
|
+
'checkbox',
|
|
418
|
+
'columnheader',
|
|
419
|
+
'gridcell',
|
|
420
|
+
'heading',
|
|
421
|
+
'link',
|
|
422
|
+
'listitem',
|
|
423
|
+
'menuitem',
|
|
424
|
+
'menuitemcheckbox',
|
|
425
|
+
'menuitemradio',
|
|
426
|
+
'option',
|
|
427
|
+
'radio',
|
|
428
|
+
'row',
|
|
429
|
+
'rowgroup',
|
|
430
|
+
'rowheader',
|
|
431
|
+
'tab',
|
|
432
|
+
'tooltip',
|
|
433
|
+
'treeitem',
|
|
434
|
+
];
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Raw array of CSS selectors for focusable elements (without :not([disabled]) filters).
|
|
438
|
+
* @type {string[]}
|
|
439
|
+
*/
|
|
440
|
+
const FOCUSABLE_SELECTORS = [
|
|
441
|
+
'a[href]',
|
|
442
|
+
'area',
|
|
443
|
+
'button',
|
|
444
|
+
'select',
|
|
445
|
+
'textarea',
|
|
446
|
+
'input:not([type="hidden"])',
|
|
447
|
+
'[tabindex]',
|
|
448
|
+
];
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Set of all valid WAI-ARIA roles.
|
|
452
|
+
* @type {Set<string>}
|
|
453
|
+
*/
|
|
454
|
+
const VALID_ARIA_ROLES = new Set([
|
|
455
|
+
'alert',
|
|
456
|
+
'alertdialog',
|
|
457
|
+
'button',
|
|
458
|
+
'checkbox',
|
|
459
|
+
'dialog',
|
|
460
|
+
'gridcell',
|
|
461
|
+
'link',
|
|
462
|
+
'log',
|
|
463
|
+
'marquee',
|
|
464
|
+
'menuitem',
|
|
465
|
+
'menuitemcheckbox',
|
|
466
|
+
'menuitemradio',
|
|
467
|
+
'option',
|
|
468
|
+
'progressbar',
|
|
469
|
+
'radio',
|
|
470
|
+
'scrollbar',
|
|
471
|
+
'searchbox',
|
|
472
|
+
'slider',
|
|
473
|
+
'spinbutton',
|
|
474
|
+
'status',
|
|
475
|
+
'switch',
|
|
476
|
+
'tab',
|
|
477
|
+
'tabpanel',
|
|
478
|
+
'textbox',
|
|
479
|
+
'tooltip',
|
|
480
|
+
'treeitem',
|
|
481
|
+
'combobox',
|
|
482
|
+
'grid',
|
|
483
|
+
'listbox',
|
|
484
|
+
'menu',
|
|
485
|
+
'menubar',
|
|
486
|
+
'radiogroup',
|
|
487
|
+
'tablist',
|
|
488
|
+
'tree',
|
|
489
|
+
'treegrid',
|
|
490
|
+
'article',
|
|
491
|
+
'cell',
|
|
492
|
+
'columnheader',
|
|
493
|
+
'definition',
|
|
494
|
+
'directory',
|
|
495
|
+
'document',
|
|
496
|
+
'feed',
|
|
497
|
+
'figure',
|
|
498
|
+
'group',
|
|
499
|
+
'heading',
|
|
500
|
+
'img',
|
|
501
|
+
'list',
|
|
502
|
+
'listitem',
|
|
503
|
+
'math',
|
|
504
|
+
'none',
|
|
505
|
+
'note',
|
|
506
|
+
'presentation',
|
|
507
|
+
'row',
|
|
508
|
+
'rowgroup',
|
|
509
|
+
'rowheader',
|
|
510
|
+
'separator',
|
|
511
|
+
'table',
|
|
512
|
+
'term',
|
|
513
|
+
'toolbar',
|
|
514
|
+
'application',
|
|
515
|
+
'banner',
|
|
516
|
+
'complementary',
|
|
517
|
+
'contentinfo',
|
|
518
|
+
'form',
|
|
519
|
+
'main',
|
|
520
|
+
'navigation',
|
|
521
|
+
'region',
|
|
522
|
+
'search',
|
|
523
|
+
'timer',
|
|
524
|
+
]);
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* Generic/meaningless link text strings.
|
|
528
|
+
* @type {string[]}
|
|
529
|
+
*/
|
|
530
|
+
const GENERIC_LINK_TEXT = [
|
|
531
|
+
'click here',
|
|
532
|
+
'here',
|
|
533
|
+
'more',
|
|
534
|
+
'read more',
|
|
535
|
+
'learn more',
|
|
536
|
+
'click',
|
|
537
|
+
'link',
|
|
538
|
+
'this',
|
|
539
|
+
'page',
|
|
540
|
+
'article',
|
|
541
|
+
'continue',
|
|
542
|
+
'go',
|
|
543
|
+
'see more',
|
|
544
|
+
'view',
|
|
545
|
+
'download',
|
|
546
|
+
'pdf',
|
|
547
|
+
'document',
|
|
548
|
+
'form',
|
|
549
|
+
'submit',
|
|
550
|
+
'button',
|
|
551
|
+
'press',
|
|
552
|
+
'select',
|
|
553
|
+
'choose',
|
|
554
|
+
];
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* HTML tag names that act as semantic containers.
|
|
558
|
+
* @type {string[]}
|
|
559
|
+
*/
|
|
560
|
+
const SEMANTIC_CONTAINER_TAGS = [
|
|
561
|
+
'ARTICLE',
|
|
562
|
+
'ASIDE',
|
|
563
|
+
'BLOCKQUOTE',
|
|
564
|
+
'DETAILS',
|
|
565
|
+
'DIALOG',
|
|
566
|
+
'FIELDSET',
|
|
567
|
+
'FIGURE',
|
|
568
|
+
'FOOTER',
|
|
569
|
+
'FORM',
|
|
570
|
+
'HEADER',
|
|
571
|
+
'LI',
|
|
572
|
+
'MAIN',
|
|
573
|
+
'NAV',
|
|
574
|
+
'SECTION',
|
|
575
|
+
'TD',
|
|
576
|
+
'TH',
|
|
577
|
+
];
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* ARIA roles that represent semantic containers.
|
|
581
|
+
* @type {string[]}
|
|
582
|
+
*/
|
|
583
|
+
const SEMANTIC_CONTAINER_ROLES = [
|
|
584
|
+
'alert',
|
|
585
|
+
'alertdialog',
|
|
586
|
+
'application',
|
|
587
|
+
'banner',
|
|
588
|
+
'cell',
|
|
589
|
+
'complementary',
|
|
590
|
+
'contentinfo',
|
|
591
|
+
'dialog',
|
|
592
|
+
'document',
|
|
593
|
+
'feed',
|
|
594
|
+
'figure',
|
|
595
|
+
'form',
|
|
596
|
+
'grid',
|
|
597
|
+
'group',
|
|
598
|
+
'list',
|
|
599
|
+
'listbox',
|
|
600
|
+
'log',
|
|
601
|
+
'main',
|
|
602
|
+
'menu',
|
|
603
|
+
'menubar',
|
|
604
|
+
'navigation',
|
|
605
|
+
'note',
|
|
606
|
+
'region',
|
|
607
|
+
'row',
|
|
608
|
+
'rowgroup',
|
|
609
|
+
'search',
|
|
610
|
+
'status',
|
|
611
|
+
'table',
|
|
612
|
+
'tablist',
|
|
613
|
+
'tabpanel',
|
|
614
|
+
'toolbar',
|
|
615
|
+
'tree',
|
|
616
|
+
'treegrid',
|
|
617
|
+
];
|
|
618
|
+
|
|
619
|
+
/**
|
|
620
|
+
* Inline event handler attributes that indicate user interactivity.
|
|
621
|
+
* @type {string[]}
|
|
622
|
+
*/
|
|
623
|
+
const INTERACTIVE_HANDLER_ATTRIBUTES = [
|
|
624
|
+
'onclick',
|
|
625
|
+
'ondblclick',
|
|
626
|
+
'oncontextmenu',
|
|
627
|
+
'onmousedown',
|
|
628
|
+
'onmouseup',
|
|
629
|
+
'onkeydown',
|
|
630
|
+
'onkeyup',
|
|
631
|
+
'onkeypress',
|
|
632
|
+
'onfocus',
|
|
633
|
+
'onblur',
|
|
634
|
+
'oninput',
|
|
635
|
+
'onchange',
|
|
636
|
+
'onsubmit',
|
|
637
|
+
'ontouchstart',
|
|
638
|
+
'ontouchend',
|
|
639
|
+
'onpointerdown',
|
|
640
|
+
'onpointerup',
|
|
641
|
+
];
|
|
642
|
+
|
|
643
|
+
module.exports = {
|
|
644
|
+
INTERACTIVE_SELECTOR,
|
|
645
|
+
FOCUSABLE_SELECTOR,
|
|
646
|
+
LABELLABLE_ELEMENTS,
|
|
647
|
+
VALID_ALT_ELEMENTS,
|
|
648
|
+
RTL_LANGUAGES,
|
|
649
|
+
GENERIC_TITLES,
|
|
650
|
+
GENERIC_SUMMARIES,
|
|
651
|
+
STRUCTURE_PHRASES,
|
|
652
|
+
VAGUE_PHRASES,
|
|
653
|
+
VALID_ARIA_NESTING,
|
|
654
|
+
COMPLEXITY_THRESHOLDS,
|
|
655
|
+
MIN_TARGET_SIZE,
|
|
656
|
+
NEW_WINDOW_WARNINGS,
|
|
657
|
+
INTERACTIVE_ROLES,
|
|
658
|
+
LANDMARK_TAGS,
|
|
659
|
+
LANDMARK_ROLES,
|
|
660
|
+
LANDMARK_ELEMENT_MAP,
|
|
661
|
+
VALID_ARIA_ATTRIBUTES,
|
|
662
|
+
NON_VISIBLE_SELECTORS,
|
|
663
|
+
TEXT_ROLES,
|
|
664
|
+
FOCUSABLE_SELECTORS,
|
|
665
|
+
VALID_ARIA_ROLES,
|
|
666
|
+
GENERIC_LINK_TEXT,
|
|
667
|
+
SEMANTIC_CONTAINER_TAGS,
|
|
668
|
+
SEMANTIC_CONTAINER_ROLES,
|
|
669
|
+
INTERACTIVE_HANDLER_ATTRIBUTES,
|
|
670
|
+
};
|
|
671
|
+
</code></pre></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-QueryCache.html">QueryCache</a></div><div class="sidebar-section-children"><a href="module-afixt-test-utils.html">afixt-test-utils</a></div><div class="sidebar-section-children"><a href="module-colorConversions.html">colorConversions</a></div><div class="sidebar-section-children"><a href="module-constants.html">constants</a></div><div class="sidebar-section-children"><a href="module-cssUtils.html">cssUtils</a></div><div class="sidebar-section-children"><a href="module-formUtils.html">formUtils</a></div><div class="sidebar-section-children"><a href="module-suggestContrast.html">suggestContrast</a></div><div class="sidebar-section-children"><a href="module-tableUtils.html">tableUtils</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#RTL_LANGUAGES">RTL_LANGUAGES</a></div><div class="sidebar-section-children"><a href="global.html#_internal">_internal</a></div><div class="sidebar-section-children"><a href="global.html#arrayCount">arrayCount</a></div><div class="sidebar-section-children"><a href="global.html#arrayRemoveByValue">arrayRemoveByValue</a></div><div class="sidebar-section-children"><a href="global.html#arrayUnique">arrayUnique</a></div><div class="sidebar-section-children"><a href="global.html#cellColorDiffs">cellColorDiffs</a></div><div class="sidebar-section-children"><a href="global.html#cellCount">cellCount</a></div><div class="sidebar-section-children"><a href="global.html#checkInconsistent">checkInconsistent</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsInHeader">checkMultiRowsInHeader</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsWithColspan">checkMultiRowsWithColspan</a></div><div class="sidebar-section-children"><a href="global.html#cleanBlank">cleanBlank</a></div><div class="sidebar-section-children"><a href="global.html#colCount">colCount</a></div><div class="sidebar-section-children"><a href="global.html#collectSubtreeText">collectSubtreeText</a></div><div class="sidebar-section-children"><a href="global.html#countBordersPct">countBordersPct</a></div><div class="sidebar-section-children"><a href="global.html#extractMeaningfulContent">extractMeaningfulContent</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleName">getAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleText">getAccessibleText</a></div><div class="sidebar-section-children"><a href="global.html#getAriaAttributesByElement">getAriaAttributesByElement</a></div><div class="sidebar-section-children"><a href="global.html#getAttributeHandlers">getAttributeHandlers</a></div><div class="sidebar-section-children"><a href="global.html#getCSSGeneratedContent">getCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getColorContrast">getColorContrast</a></div><div class="sidebar-section-children"><a href="global.html#getComputedBackgroundColor">getComputedBackgroundColor</a></div><div class="sidebar-section-children"><a href="global.html#getComputedRole">getComputedRole</a></div><div class="sidebar-section-children"><a href="global.html#getContrastRatio">getContrastRatio</a></div><div class="sidebar-section-children"><a href="global.html#getEffectiveDir">getEffectiveDir</a></div><div class="sidebar-section-children"><a href="global.html#getEventListeners">getEventListeners</a></div><div class="sidebar-section-children"><a href="global.html#getFocusableElements">getFocusableElements</a></div><div class="sidebar-section-children"><a href="global.html#getGeneratedContent">getGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getImageText">getImageText</a></div><div class="sidebar-section-children"><a href="global.html#getPropertyHandlers">getPropertyHandlers</a></div><div class="sidebar-section-children"><a href="global.html#getRelativeLuminance">getRelativeLuminance</a></div><div class="sidebar-section-children"><a href="global.html#getStyleObject">getStyleObject</a></div><div class="sidebar-section-children"><a href="global.html#getTwoLetterCode">getTwoLetterCode</a></div><div class="sidebar-section-children"><a href="global.html#hasAccessibleName">hasAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#hasAttribute">hasAttribute</a></div><div class="sidebar-section-children"><a href="global.html#hasBackgroundImage">hasBackgroundImage</a></div><div class="sidebar-section-children"><a href="global.html#hasCSSGeneratedContent">hasCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#hasHiddenParent">hasHiddenParent</a></div><div class="sidebar-section-children"><a href="global.html#hasParent">hasParent</a></div><div class="sidebar-section-children"><a href="global.html#hasValidAriaAttributes">hasValidAriaAttributes</a></div><div class="sidebar-section-children"><a href="global.html#isA11yVisible">isA11yVisible</a></div><div class="sidebar-section-children"><a href="global.html#isAriaAttributeValid">isAriaAttributeValid</a></div><div class="sidebar-section-children"><a href="global.html#isComplexTable">isComplexTable</a></div><div class="sidebar-section-children"><a href="global.html#isDataTable">isDataTable</a></div><div class="sidebar-section-children"><a href="global.html#isFocusable">isFocusable</a></div><div class="sidebar-section-children"><a href="global.html#isHidden">isHidden</a></div><div class="sidebar-section-children"><a href="global.html#isNotVisible">isNotVisible</a></div><div class="sidebar-section-children"><a href="global.html#isOffScreen">isOffScreen</a></div><div class="sidebar-section-children"><a href="global.html#isRTLLanguage">isRTLLanguage</a></div><div class="sidebar-section-children"><a href="global.html#isValidLanguageCode">isValidLanguageCode</a></div><div class="sidebar-section-children"><a href="global.html#isValidUrl">isValidUrl</a></div><div class="sidebar-section-children"><a href="global.html#langCodes">langCodes</a></div><div class="sidebar-section-children"><a href="global.html#listEventListeners">listEventListeners</a></div><div class="sidebar-section-children"><a href="global.html#luminance">luminance</a></div><div class="sidebar-section-children"><a href="global.html#matchesSelector">matchesSelector</a></div><div class="sidebar-section-children"><a href="global.html#parseColor">parseColor</a></div><div class="sidebar-section-children"><a href="global.html#parseRGB">parseRGB</a></div><div class="sidebar-section-children"><a href="global.html#rowCount">rowCount</a></div><div class="sidebar-section-children"><a href="global.html#rtls">rtls</a></div><div class="sidebar-section-children"><a href="global.html#sortByVisualOrder">sortByVisualOrder</a></div><div class="sidebar-section-children"><a href="global.html#strlen">strlen</a></div><div class="sidebar-section-children"><a href="global.html#testContrast">testContrast</a></div><div class="sidebar-section-children"><a href="global.html#testLang">testLang</a></div><div class="sidebar-section-children"><a href="global.html#testOrder">testOrder</a></div><div class="sidebar-section-children"><a href="global.html#validLangCodes">validLangCodes</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
|