123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- import titleText from './title-text';
- import subtreeText from './subtree-text';
- import labelText from './label-text';
- import accessibleText from './accessible-text';
- const defaultButtonValues = {
- submit: 'Submit',
- image: 'Submit',
- reset: 'Reset',
- button: '' // No default for "button"
- };
- const nativeTextMethods = {
- /**
- * Return the value of a DOM node
- * @param {VirtualNode} element
- * @return {String} value text
- */
- valueText: ({ actualNode }) => actualNode.value || '',
- /**
- * Return default value of a button
- * @param {VirtualNode} element
- * @return {String} default button text
- */
- buttonDefaultText: ({ actualNode }) =>
- defaultButtonValues[actualNode.type] || '',
- /**
- * Return caption text of an HTML table element
- * @param {VirtualNode} element
- * @param {Object} context
- * @return {String} caption text
- */
- tableCaptionText: descendantText.bind(null, 'caption'),
- /**
- * Return figcaption text of an HTML figure element
- * @param {VirtualNode} element
- * @param {Object} context
- * @return {String} figcaption text
- */
- figureText: descendantText.bind(null, 'figcaption'),
- /**
- * Return figcaption text of an HTML figure element
- * @param {VirtualNode} element
- * @param {Object} context
- * @return {String} figcaption text
- */
- svgTitleText: descendantText.bind(null, 'title'),
- /**
- * Return legend text of an HTML fieldset element
- * @param {VirtualNode} element
- * @param {Object} context
- * @return {String} legend text
- */
- fieldsetLegendText: descendantText.bind(null, 'legend'),
- /**
- * Return the alt text
- * @param {VirtualNode} element
- * @return {String} alt text
- */
- altText: attrText.bind(null, 'alt'),
- /**
- * Return summary text for an HTML table element
- * @param {VirtualNode} element
- * @return {String} summary text
- */
- tableSummaryText: attrText.bind(null, 'summary'),
- /**
- * Return the title text
- * @param {VirtualNode} element
- * @return {String} title text
- */
- titleText,
- /**
- * Return accessible text of the subtree
- * @param {VirtualNode} element
- * @param {Object} context
- * @return {String} Subtree text
- */
- subtreeText,
- /**
- * Return accessible text for an implicit and/or explicit HTML label element
- * @param {VirtualNode} element
- * @param {Object} context
- * @return {String} Label text
- */
- labelText,
- /**
- * Return a single space
- * @return {String} Returns ` `
- */
- singleSpace: function singleSpace() {
- return ' ';
- },
- /**
- * Return the placeholder text
- * @param {VirtualNode} element
- * @return {String} placeholder text
- */
- placeholderText: attrText.bind(null, 'placeholder')
- };
- function attrText(attr, vNode) {
- return vNode.attr(attr) || '';
- }
- /**
- * Get the accessible text of first matching node
- * IMPORTANT: This method does not look at the composed tree
- * @private
- */
- function descendantText(nodeName, { actualNode }, context) {
- nodeName = nodeName.toLowerCase();
- // Prevent accidently getting the nested element, like:
- // fieldset > fielset > legend (1st fieldset has no legend)
- const nodeNames = [nodeName, actualNode.nodeName.toLowerCase()].join(',');
- const candidate = actualNode.querySelector(nodeNames);
- if (!candidate || candidate.nodeName.toLowerCase() !== nodeName) {
- return '';
- }
- return accessibleText(candidate, context);
- }
- export default nativeTextMethods;
|