Skip to content

Commit 33bdb0d

Browse files
author
Ethan Cohen
committed
Enforce no accessKey prop.
1 parent 5fb3347 commit 33bdb0d

File tree

6 files changed

+82
-4
lines changed

6 files changed

+82
-4
lines changed

index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ module.exports = {
55
'img-uses-alt': require('./lib/rules/img-uses-alt'),
66
'onClick-uses-role': require('./lib/rules/onClick-uses-role'),
77
'mouseEvents-require-keyEvents': require('./lib/rules/mouseEvents-require-keyEvents'),
8-
'use-onblur-not-onchange': require('./lib/rules/use-onblur-not-onchange')
8+
'use-onblur-not-onchange': require('./lib/rules/use-onblur-not-onchange'),
9+
'no-access-key': require('./lib/rules/no-access-key')
910
},
1011
configs: {
1112
recommended: {

lib/rules/no-access-key.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* @fileoverview Enforce no accesskey attribute on element.
3+
* @author Ethan Cohen
4+
*/
5+
'use strict';
6+
7+
// ------------------------------------------------------------------------------
8+
// Rule Definition
9+
// ------------------------------------------------------------------------------
10+
11+
var hasAttribute = require('../hasAttribute');
12+
13+
module.exports = function(context) {
14+
15+
return {
16+
JSXOpeningElement: function(node) {
17+
var hasAccessKey = hasAttribute(node.attributes, 'accesskey');
18+
19+
if (Boolean(hasAccessKey) === true) {
20+
context.report({
21+
node: node,
22+
message: 'Inconsistencies between keyboard shortcuts and keyboard commands used by screenreader ' +
23+
'and keyboard only users create accessibility complications so to avoid complications, access keys ' +
24+
'should not be used.'
25+
});
26+
}
27+
}
28+
};
29+
};
30+
31+
module.exports.schema = [{
32+
type: 'object'
33+
}];

tests/lib/rules/mouseEvents-require-keyEvents.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* @fileoverview Enforce img tags use alt attribute.
2+
* @fileoverview Enforce onmouseover/onmouseout are accompanied by onfocus/onblur.
33
* @author Ethan Cohen
44
*/
55

tests/lib/rules/no-access-key.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* @fileoverview Enforce no accesskey attribute on element.
3+
* @author Ethan Cohen
4+
*/
5+
6+
'use strict';
7+
8+
// -----------------------------------------------------------------------------
9+
// Requirements
10+
// -----------------------------------------------------------------------------
11+
12+
var rule = require('../../../lib/rules/no-access-key');
13+
var RuleTester = require('eslint').RuleTester;
14+
15+
var parserOptions = {
16+
ecmaVersion: 6,
17+
ecmaFeatures: {
18+
jsx: true
19+
}
20+
};
21+
22+
// -----------------------------------------------------------------------------
23+
// Tests
24+
// -----------------------------------------------------------------------------
25+
26+
var ruleTester = new RuleTester();
27+
28+
var expectedError = {
29+
message: 'Inconsistencies between keyboard shortcuts and keyboard commands used by screenreader ' +
30+
'and keyboard only users create accessibility complications so to avoid complications, access keys ' +
31+
'should not be used.',
32+
type: 'JSXOpeningElement'
33+
};
34+
35+
ruleTester.run('no-access-key', rule, {
36+
valid: [
37+
{code: '<div />;', parserOptions: parserOptions}
38+
],
39+
invalid: [
40+
{code: '<div accesskey="h" />;', errors: [expectedError], parserOptions: parserOptions},
41+
{code: '<div accessKey="h" />', errors: [expectedError], parserOptions: parserOptions},
42+
{code: '<section acCesSKeY="y" />', errors: [expectedError], parserOptions: parserOptions}
43+
]
44+
});

tests/lib/rules/onClick-uses-role.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* @fileoverview Enforce img tags use alt attribute.
2+
* @fileoverview Enforce non-interactive elements with click handlers use role attribute.
33
* @author Ethan Cohen
44
*/
55

tests/lib/rules/use-onblur-not-onchange.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* @fileoverview Enforce img tags use alt attribute.
2+
* @fileoverview Enforce usage of onBlur over onChange for accessibility.
33
* @author Ethan Cohen
44
*/
55

0 commit comments

Comments
 (0)