UNPKG

3.89 kBJavaScriptView Raw
1"use strict";
2var __extends = (this && this.__extends) || (function () {
3 var extendStatics = Object.setPrototypeOf ||
4 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6 return function (d, b) {
7 extendStatics(d, b);
8 function __() { this.constructor = d; }
9 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10 };
11})();
12Object.defineProperty(exports, "__esModule", { value: true });
13var ts = require("typescript");
14var Lint = require("tslint");
15var JsxAttribute_1 = require("./utils/JsxAttribute");
16var DOM_SCHEMA = require('./utils/attributes/domSchema.json');
17var ARIA_SCHEMA = require('./utils/attributes/ariaSchema.json');
18function getFailureString(tagName, ariaAttributeNames) {
19 return "This element " + tagName + " does not support ARIA roles, states and properties. "
20 + ("Try removing attribute(s): " + ariaAttributeNames.join(', ') + ".");
21}
22exports.getFailureString = getFailureString;
23var Rule = (function (_super) {
24 __extends(Rule, _super);
25 function Rule() {
26 return _super !== null && _super.apply(this, arguments) || this;
27 }
28 Rule.prototype.apply = function (sourceFile) {
29 return sourceFile.languageVariant === ts.LanguageVariant.JSX
30 ? this.applyWithWalker(new ReactA11yAriaUnsupportedElementsWalker(sourceFile, this.getOptions()))
31 : [];
32 };
33 Rule.metadata = {
34 ruleName: 'react-a11y-aria-unsupported-elements',
35 type: 'maintainability',
36 description: 'Enforce that elements that do not support ARIA roles, states, and properties do not have those attributes.',
37 options: null,
38 optionsDescription: '',
39 typescriptOnly: true,
40 issueClass: 'Non-SDL',
41 issueType: 'Warning',
42 severity: 'Important',
43 level: 'Opportunity for Excellence',
44 group: 'Accessibility'
45 };
46 return Rule;
47}(Lint.Rules.AbstractRule));
48exports.Rule = Rule;
49var ReactA11yAriaUnsupportedElementsWalker = (function (_super) {
50 __extends(ReactA11yAriaUnsupportedElementsWalker, _super);
51 function ReactA11yAriaUnsupportedElementsWalker() {
52 return _super !== null && _super.apply(this, arguments) || this;
53 }
54 ReactA11yAriaUnsupportedElementsWalker.prototype.visitJsxElement = function (node) {
55 this.validateOpeningElement(node.openingElement);
56 _super.prototype.visitJsxElement.call(this, node);
57 };
58 ReactA11yAriaUnsupportedElementsWalker.prototype.visitJsxSelfClosingElement = function (node) {
59 this.validateOpeningElement(node);
60 _super.prototype.visitJsxSelfClosingElement.call(this, node);
61 };
62 ReactA11yAriaUnsupportedElementsWalker.prototype.validateOpeningElement = function (node) {
63 var tagName = node.tagName.getText();
64 if (!DOM_SCHEMA[tagName]) {
65 return;
66 }
67 var supportAria = DOM_SCHEMA[tagName].supportAria != null
68 ? DOM_SCHEMA[tagName].supportAria
69 : false;
70 if (supportAria) {
71 return;
72 }
73 var checkAttributeNames = Object.keys(ARIA_SCHEMA).concat('role');
74 var attributes = JsxAttribute_1.getJsxAttributesFromJsxElement(node);
75 var invalidAttributeNames = checkAttributeNames.filter(function (attributeName) { return !!attributes[attributeName]; });
76 if (invalidAttributeNames.length > 0) {
77 var message = getFailureString(tagName, invalidAttributeNames);
78 this.addFailureAt(node.getStart(), node.getWidth(), message);
79 }
80 };
81 return ReactA11yAriaUnsupportedElementsWalker;
82}(Lint.RuleWalker));
83//# sourceMappingURL=reactA11yAriaUnsupportedElementsRule.js.map
\No newline at end of file