native-text-methods.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import titleText from './title-text';
  2. import subtreeText from './subtree-text';
  3. import labelText from './label-text';
  4. import accessibleText from './accessible-text';
  5. const defaultButtonValues = {
  6. submit: 'Submit',
  7. image: 'Submit',
  8. reset: 'Reset',
  9. button: '' // No default for "button"
  10. };
  11. const nativeTextMethods = {
  12. /**
  13. * Return the value of a DOM node
  14. * @param {VirtualNode} element
  15. * @return {String} value text
  16. */
  17. valueText: ({ actualNode }) => actualNode.value || '',
  18. /**
  19. * Return default value of a button
  20. * @param {VirtualNode} element
  21. * @return {String} default button text
  22. */
  23. buttonDefaultText: ({ actualNode }) =>
  24. defaultButtonValues[actualNode.type] || '',
  25. /**
  26. * Return caption text of an HTML table element
  27. * @param {VirtualNode} element
  28. * @param {Object} context
  29. * @return {String} caption text
  30. */
  31. tableCaptionText: descendantText.bind(null, 'caption'),
  32. /**
  33. * Return figcaption text of an HTML figure element
  34. * @param {VirtualNode} element
  35. * @param {Object} context
  36. * @return {String} figcaption text
  37. */
  38. figureText: descendantText.bind(null, 'figcaption'),
  39. /**
  40. * Return figcaption text of an HTML figure element
  41. * @param {VirtualNode} element
  42. * @param {Object} context
  43. * @return {String} figcaption text
  44. */
  45. svgTitleText: descendantText.bind(null, 'title'),
  46. /**
  47. * Return legend text of an HTML fieldset element
  48. * @param {VirtualNode} element
  49. * @param {Object} context
  50. * @return {String} legend text
  51. */
  52. fieldsetLegendText: descendantText.bind(null, 'legend'),
  53. /**
  54. * Return the alt text
  55. * @param {VirtualNode} element
  56. * @return {String} alt text
  57. */
  58. altText: attrText.bind(null, 'alt'),
  59. /**
  60. * Return summary text for an HTML table element
  61. * @param {VirtualNode} element
  62. * @return {String} summary text
  63. */
  64. tableSummaryText: attrText.bind(null, 'summary'),
  65. /**
  66. * Return the title text
  67. * @param {VirtualNode} element
  68. * @return {String} title text
  69. */
  70. titleText,
  71. /**
  72. * Return accessible text of the subtree
  73. * @param {VirtualNode} element
  74. * @param {Object} context
  75. * @return {String} Subtree text
  76. */
  77. subtreeText,
  78. /**
  79. * Return accessible text for an implicit and/or explicit HTML label element
  80. * @param {VirtualNode} element
  81. * @param {Object} context
  82. * @return {String} Label text
  83. */
  84. labelText,
  85. /**
  86. * Return a single space
  87. * @return {String} Returns ` `
  88. */
  89. singleSpace: function singleSpace() {
  90. return ' ';
  91. },
  92. /**
  93. * Return the placeholder text
  94. * @param {VirtualNode} element
  95. * @return {String} placeholder text
  96. */
  97. placeholderText: attrText.bind(null, 'placeholder')
  98. };
  99. function attrText(attr, vNode) {
  100. return vNode.attr(attr) || '';
  101. }
  102. /**
  103. * Get the accessible text of first matching node
  104. * IMPORTANT: This method does not look at the composed tree
  105. * @private
  106. */
  107. function descendantText(nodeName, { actualNode }, context) {
  108. nodeName = nodeName.toLowerCase();
  109. // Prevent accidently getting the nested element, like:
  110. // fieldset > fielset > legend (1st fieldset has no legend)
  111. const nodeNames = [nodeName, actualNode.nodeName.toLowerCase()].join(',');
  112. const candidate = actualNode.querySelector(nodeNames);
  113. if (!candidate || candidate.nodeName.toLowerCase() !== nodeName) {
  114. return '';
  115. }
  116. return accessibleText(candidate, context);
  117. }
  118. export default nativeTextMethods;