KeyboardCheck.js (2758B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 "use strict"; 5 6 // React 7 const { 8 createFactory, 9 PureComponent, 10 } = require("resource://devtools/client/shared/vendor/react.mjs"); 11 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs"); 12 const ReactDOM = require("resource://devtools/client/shared/vendor/react-dom-factories.js"); 13 14 const Check = createFactory( 15 require("resource://devtools/client/accessibility/components/Check.js") 16 ); 17 18 const { 19 A11Y_KEYBOARD_LINKS, 20 } = require("resource://devtools/client/accessibility/constants.js"); 21 const { 22 accessibility: { 23 AUDIT_TYPE: { KEYBOARD }, 24 ISSUE_TYPE: { 25 [KEYBOARD]: { 26 FOCUSABLE_NO_SEMANTICS, 27 FOCUSABLE_POSITIVE_TABINDEX, 28 INTERACTIVE_NO_ACTION, 29 INTERACTIVE_NOT_FOCUSABLE, 30 MOUSE_INTERACTIVE_ONLY, 31 NO_FOCUS_VISIBLE, 32 }, 33 }, 34 }, 35 } = require("resource://devtools/shared/constants.js"); 36 37 /** 38 * A map from text label issues to annotation component properties. 39 */ 40 const ISSUE_TO_ANNOTATION_MAP = { 41 [FOCUSABLE_NO_SEMANTICS]: { 42 href: A11Y_KEYBOARD_LINKS.FOCUSABLE_NO_SEMANTICS, 43 l10nId: "accessibility-keyboard-issue-semantics", 44 }, 45 [FOCUSABLE_POSITIVE_TABINDEX]: { 46 href: A11Y_KEYBOARD_LINKS.FOCUSABLE_POSITIVE_TABINDEX, 47 l10nId: "accessibility-keyboard-issue-tabindex", 48 args: { 49 get code() { 50 return ReactDOM.code({}, "tabindex"); 51 }, 52 }, 53 }, 54 [INTERACTIVE_NO_ACTION]: { 55 href: A11Y_KEYBOARD_LINKS.INTERACTIVE_NO_ACTION, 56 l10nId: "accessibility-keyboard-issue-action", 57 }, 58 [INTERACTIVE_NOT_FOCUSABLE]: { 59 href: A11Y_KEYBOARD_LINKS.INTERACTIVE_NOT_FOCUSABLE, 60 l10nId: "accessibility-keyboard-issue-focusable", 61 }, 62 [MOUSE_INTERACTIVE_ONLY]: { 63 href: A11Y_KEYBOARD_LINKS.MOUSE_INTERACTIVE_ONLY, 64 l10nId: "accessibility-keyboard-issue-mouse-only", 65 }, 66 [NO_FOCUS_VISIBLE]: { 67 href: A11Y_KEYBOARD_LINKS.NO_FOCUS_VISIBLE, 68 l10nId: "accessibility-keyboard-issue-focus-visible", 69 }, 70 }; 71 72 /** 73 * Component for rendering a check for text label accessibliity check failures, 74 * warnings and best practices suggestions association with a given 75 * accessibility object in the accessibility tree. 76 */ 77 class KeyboardCheck extends PureComponent { 78 static get propTypes() { 79 return { 80 issue: PropTypes.string.isRequired, 81 score: PropTypes.string.isRequired, 82 }; 83 } 84 85 render() { 86 return Check({ 87 ...this.props, 88 getAnnotation: issue => ISSUE_TO_ANNOTATION_MAP[issue], 89 id: "accessibility-keyboard-header", 90 }); 91 } 92 } 93 94 module.exports = KeyboardCheck;