source: frontend/node_modules/eslint-plugin-jsx-a11y/lib/rules/accessible-emoji.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 2 weeks ago

Fix frontend appearance

  • Property mode set to 100644
File size: 2.8 KB
Line 
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports["default"] = void 0;
7var _emojiRegex = _interopRequireDefault(require("emoji-regex"));
8var _jsxAstUtils = require("jsx-ast-utils");
9var _safeRegexTest = _interopRequireDefault(require("safe-regex-test"));
10var _schemas = require("../util/schemas");
11var _getElementType = _interopRequireDefault(require("../util/getElementType"));
12var _isHiddenFromScreenReader = _interopRequireDefault(require("../util/isHiddenFromScreenReader"));
13function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
14/**
15 * @fileoverview Enforce emojis are wrapped in <span> and provide screen reader access.
16 * @author Ethan Cohen
17 */
18
19// ----------------------------------------------------------------------------
20// Rule Definition
21// ----------------------------------------------------------------------------
22
23var errorMessage = 'Emojis should be wrapped in <span>, have role="img", and have an accessible description with aria-label or aria-labelledby.';
24var schema = (0, _schemas.generateObjSchema)();
25var _default = exports["default"] = {
26 meta: {
27 docs: {
28 description: 'Enforce emojis are wrapped in `<span>` and provide screen reader access.',
29 url: 'https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/tree/HEAD/docs/rules/accessible-emoji.md'
30 },
31 deprecated: true,
32 schema: [schema]
33 },
34 create: function create(context) {
35 var elementType = (0, _getElementType["default"])(context);
36 var testEmoji = (0, _safeRegexTest["default"])((0, _emojiRegex["default"])());
37 return {
38 JSXOpeningElement: function JSXOpeningElement(node) {
39 var literalChildValue = node.parent.children.find(function (child) {
40 return child.type === 'Literal' || child.type === 'JSXText';
41 });
42 if (literalChildValue && testEmoji(literalChildValue.value)) {
43 var elementIsHidden = (0, _isHiddenFromScreenReader["default"])(elementType(node), node.attributes);
44 if (elementIsHidden) {
45 return; // emoji is decorative
46 }
47 var rolePropValue = (0, _jsxAstUtils.getLiteralPropValue)((0, _jsxAstUtils.getProp)(node.attributes, 'role'));
48 var ariaLabelProp = (0, _jsxAstUtils.getProp)(node.attributes, 'aria-label');
49 var arialLabelledByProp = (0, _jsxAstUtils.getProp)(node.attributes, 'aria-labelledby');
50 var hasLabel = ariaLabelProp !== undefined || arialLabelledByProp !== undefined;
51 var isSpan = elementType(node) === 'span';
52 if (hasLabel === false || rolePropValue !== 'img' || isSpan === false) {
53 context.report({
54 node,
55 message: errorMessage
56 });
57 }
58 }
59 }
60 };
61 }
62};
63module.exports = exports.default;
Note: See TracBrowser for help on using the repository browser.