mouse-events-have-key-events.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports["default"] = void 0;
  6. var _ariaQuery = require("aria-query");
  7. var _jsxAstUtils = require("jsx-ast-utils");
  8. var _schemas = require("../util/schemas");
  9. /**
  10. * @fileoverview Enforce onmouseover/onmouseout are
  11. * accompanied by onfocus/onblur.
  12. * @author Ethan Cohen
  13. */
  14. // ----------------------------------------------------------------------------
  15. // Rule Definition
  16. // ----------------------------------------------------------------------------
  17. var mouseOverErrorMessage = 'onMouseOver must be accompanied by onFocus for accessibility.';
  18. var mouseOutErrorMessage = 'onMouseOut must be accompanied by onBlur for accessibility.';
  19. var schema = (0, _schemas.generateObjSchema)();
  20. var _default = {
  21. meta: {
  22. docs: {
  23. url: 'https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/HEAD/docs/rules/mouse-events-have-key-events.md',
  24. description: 'Enforce that `onMouseOver`/`onMouseOut` are accompanied by `onFocus`/`onBlur` for keyboard-only users.'
  25. },
  26. schema: [schema]
  27. },
  28. create: function create(context) {
  29. return {
  30. JSXOpeningElement: function JSXOpeningElement(node) {
  31. var name = node.name.name;
  32. if (!_ariaQuery.dom.get(name)) {
  33. return;
  34. }
  35. var attributes = node.attributes; // Check onmouseover / onfocus pairing.
  36. var onMouseOver = (0, _jsxAstUtils.getProp)(attributes, 'onMouseOver');
  37. var onMouseOverValue = (0, _jsxAstUtils.getPropValue)(onMouseOver);
  38. if (onMouseOver && onMouseOverValue != null) {
  39. var hasOnFocus = (0, _jsxAstUtils.getProp)(attributes, 'onFocus');
  40. var onFocusValue = (0, _jsxAstUtils.getPropValue)(hasOnFocus);
  41. if (hasOnFocus === false || onFocusValue === null || onFocusValue === undefined) {
  42. context.report({
  43. node,
  44. message: mouseOverErrorMessage
  45. });
  46. }
  47. } // Checkout onmouseout / onblur pairing
  48. var onMouseOut = (0, _jsxAstUtils.getProp)(attributes, 'onMouseOut');
  49. var onMouseOutValue = (0, _jsxAstUtils.getPropValue)(onMouseOut);
  50. if (onMouseOut && onMouseOutValue != null) {
  51. var hasOnBlur = (0, _jsxAstUtils.getProp)(attributes, 'onBlur');
  52. var onBlurValue = (0, _jsxAstUtils.getPropValue)(hasOnBlur);
  53. if (hasOnBlur === false || onBlurValue === null || onBlurValue === undefined) {
  54. context.report({
  55. node,
  56. message: mouseOutErrorMessage
  57. });
  58. }
  59. }
  60. }
  61. };
  62. }
  63. };
  64. exports["default"] = _default;
  65. module.exports = exports.default;