12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import getRole from '../aria/get-role';
- import getElementSpec from '../standards/get-element-spec';
- import nativeTextMethods from './native-text-methods';
- /**
- * Get the accessible text using native HTML methods only
- * @param {VirtualNode} element
- * @param {Object} context
- * @property {Bool} debug Enable logging for formControlValue
- * @return {String} Accessible text
- */
- function nativeTextAlternative(virtualNode, context = {}) {
- const { actualNode } = virtualNode;
- if (
- virtualNode.props.nodeType !== 1 ||
- ['presentation', 'none'].includes(getRole(virtualNode))
- ) {
- return '';
- }
- const textMethods = findTextMethods(virtualNode);
- // Find the first step that returns a non-empty string
- const accName = textMethods.reduce((accName, step) => {
- return accName || step(virtualNode, context);
- }, '');
- if (context.debug) {
- axe.log(accName || '{empty-value}', actualNode, context);
- }
- return accName;
- }
- /**
- * Get accessible text functions for a specific native HTML element
- * @private
- * @param {VirtualNode} element
- * @return {Function[]} Array of native accessible name computation methods
- */
- function findTextMethods(virtualNode) {
- const elmSpec = getElementSpec(virtualNode);
- const methods = elmSpec.namingMethods || [];
- return methods.map(methodName => nativeTextMethods[methodName]);
- }
- export default nativeTextAlternative;
|