Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
// ----------------------------------------------------------------------------
// Rule Definition
// ----------------------------------------------------------------------------
const VueUtils = require('eslint-plugin-vue/lib/utils');
const utils = require('../utils');
const altRule = require('eslint-plugin-jsx-a11y/lib/rules/iframe-has-title.js');
const { generateObjSchema } = require('eslint-plugin-jsx-a11y/lib/util/schemas.js');
const errorMessage = '
// ----------------------------------------------------------------------------
// Rule Definition
// ----------------------------------------------------------------------------
const VueUtils = require('eslint-plugin-vue/lib/utils');
const utils = require('../utils');
const altRule = require('eslint-plugin-jsx-a11y/lib/rules/tabindex-no-positive.js');
const { generateObjSchema } = require('eslint-plugin-jsx-a11y/lib/util/schemas.js');
const errorMessage = 'Avoid positive integer values for tabIndex.';
const schema = generateObjSchema();
module.exports = {
meta: {
docs: {
url: 'https://github.com/maranran/eslint-plugin-vue-a11y/blob/master/docs/rules/tabindex-no-positive.md'
},
schema: [schema],
},
create (context) {
return VueUtils.defineTemplateBodyVisitor(context, {
"VAttribute" (node) {
const isTabindex = utils.isAttribute(node, 'tabindex')
if (!isTabindex) {
return;
}
// ----------------------------------------------------------------------------
const VueUtils = require('eslint-plugin-vue/lib/utils');
const utils = require('../utils');
const altRule = require('eslint-plugin-jsx-a11y/lib/rules/no-distracting-elements.js');
const { generateObjSchema, enumArraySchema } = require('eslint-plugin-jsx-a11y/lib/util/schemas.js');
const errorMessage = element =>
`Do not use <${element}> elements as they can create visual accessibility issues and are deprecated.`;
const DEFAULT_ELEMENTS = [
'marquee',
'blink',
];
const schema = generateObjSchema({
elements: enumArraySchema(DEFAULT_ELEMENTS),
});
module.exports = {
meta: {
docs: {
url: 'https://github.com/maranran/eslint-plugin-vue-a11y/blob/master/docs/rules/no-distracting-elements.md'
},
schema: [schema],
},
create (context) {
return VueUtils.defineTemplateBodyVisitor(context, {
"VElement" (node) {
const options = context.options[0] || {};
const elementOptions = options.elements || DEFAULT_ELEMENTS;
// ----------------------------------------------------------------------------
// Rule Definition
// ----------------------------------------------------------------------------
const VueUtils = require('eslint-plugin-vue/lib/utils');
const utils = require('../utils');
const altRule = require('eslint-plugin-jsx-a11y/lib/rules/aria-role.js');
const { generateObjSchema } = require('eslint-plugin-jsx-a11y/lib/util/schemas.js');
const { dom, roles } = require('aria-query');
const errorMessage = 'Elements with ARIA roles must use a valid, non-abstract ARIA role.';
const schema = generateObjSchema({
ignoreNonDOM: {
type: 'boolean',
default: false,
},
});
module.exports = {
meta: {
docs: {
url: 'https://github.com/maranran/eslint-plugin-vue-a11y/blob/master/docs/rules/aria-role.md'
},
schema: [schema],
},
create (context) {
// ----------------------------------------------------------------------------
// Rule Definition
// ----------------------------------------------------------------------------
const VueUtils = require('eslint-plugin-vue/lib/utils');
const utils = require('../utils');
const altRule = require('eslint-plugin-jsx-a11y/lib/rules/role-has-required-aria-props.js');
const { generateObjSchema, arraySchema } = require('eslint-plugin-jsx-a11y/lib/util/schemas.js');
const { dom, roles } = require('aria-query');
const errorMessage = (role, requiredProps) =>
`Elements with the ARIA role "${role}" must have the following ` +
`attributes defined: ${String(requiredProps).toLowerCase()}`;
const schema = generateObjSchema();
module.exports = {
meta: {
docs: {
url: 'https://github.com/maranran/eslint-plugin-vue-a11y/blob/master/docs/rules/role-has-required-aria-props.md'
},
schema: [schema],
},
create (context) {
return VueUtils.defineTemplateBodyVisitor(context, {
"VStartTag" (node) {
const element = node.parent;
const type = utils.getElementType(element);
const role = utils.getRoleValue(element)
if (!role) {
const VueUtils = require('eslint-plugin-vue/lib/utils');
const utils = require('../utils');
const JsxRule = require('eslint-plugin-jsx-a11y/lib/rules/mouse-events-have-key-events.js');
const { generateObjSchema } = require('eslint-plugin-jsx-a11y/lib/util/schemas.js');
const mouseOverErrorMessage = 'mouseover or mouseenter or hover must be accompanied by focusin or focus for accessibility.';
const mouseOutErrorMessage = 'mouseout or mouseleave must be accompanied by focusout or blur for accessibility.';
const schema = generateObjSchema();
module.exports = {
meta: {
docs: {
url: 'https://github.com/maranran/eslint-plugin-vue-a11y/blob/master/docs/rules/mouse-events-have-key-events.md'
},
schema: [schema]
},
create (context) {
return VueUtils.defineTemplateBodyVisitor(context, {
"VElement" (node) {
const enterEvent = ['mouseover', 'mouseenter', 'hover']
if (utils.hasAnyEvent(node, enterEvent)) {
if (!utils.hasAnyEvent(node, ['focus', 'focusin'])) {
context.report({
node,
const VueUtils = require('eslint-plugin-vue/lib/utils')
const utils = require('../utils')
const anchorRule = require('eslint-plugin-jsx-a11y/lib/rules/anchor-has-content.js')
const { generateObjSchema, arraySchema } = require('eslint-plugin-jsx-a11y/lib/util/schemas.js')
const errorMessage =
'Anchors must have content and the content must be accessible by a screen reader.';
const schema = generateObjSchema({ components: arraySchema });
module.exports = {
meta: {
docs: {
url: 'https://github.com/maranran/eslint-plugin-vue-a11y/blob/master/docs/rules/anchor-has-content.md'
},
schema: [schema]
},
create (context) {
return VueUtils.defineTemplateBodyVisitor(context, {
"VStartTag" (node) {
const options = context.options[0] || {};
const componentOptions = options.components || [];
const typeCheck = ['a'].concat(componentOptions);
const parent = node.parent;
const nodeType = utils.getElementType(parent);
const VueUtils = require('eslint-plugin-vue/lib/utils')
const utils = require('../utils')
const JsxRule = require('eslint-plugin-jsx-a11y/lib/rules/click-events-have-key-events.js')
const { generateObjSchema } = require('eslint-plugin-jsx-a11y/lib/util/schemas.js')
const errorMessage = 'Visible, non-interactive elements with click handlers' +
' must have at least one keyboard listener.';
const schema = generateObjSchema();
module.exports = {
meta: {
docs: {
url: 'https://github.com/maranran/eslint-plugin-vue-a11y/blob/master/docs/rules/click-events-have-key-events.md'
},
schema: [schema]
},
create (context) {
return VueUtils.defineTemplateBodyVisitor(context, {
"VAttribute[directive=true][key.name.name='on'][key.argument.name='click']" (node) {
const requiredEvents = ['keydown', 'keyup', 'keypress'];
const element = node.parent.parent;
if (VueUtils.isCustomComponent(element)) {
return;
} else if (
const altRule = require('eslint-plugin-jsx-a11y/lib/rules/heading-has-content.js');
const { generateObjSchema, arraySchema } = require('eslint-plugin-jsx-a11y/lib/util/schemas.js');
const errorMessage =
'Headings must have content and the content must be accessible by a screen reader.';
const headings = [
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
];
const schema = generateObjSchema({ components: arraySchema });
module.exports = {
meta: {
docs: {
url: 'https://github.com/maranran/eslint-plugin-vue-a11y/blob/master/docs/rules/heading-has-content.md'
},
schema: [schema]
},
create (context) {
return VueUtils.defineTemplateBodyVisitor(context, {
"VElement" (node) {
const typeCheck = headings.concat(context.options[0]);
const nodeType = utils.getElementType(node);
if (typeCheck.indexOf(nodeType) === -1) {
return;
const VueUtils = require('eslint-plugin-vue/lib/utils')
const utils = require('../utils')
const JsxRule = require('eslint-plugin-jsx-a11y/lib/rules/no-autofocus.js')
const { generateObjSchema } = require('eslint-plugin-jsx-a11y/lib/util/schemas.js')
const { dom } = require('aria-query');
const errorMessage =
'The autoFocus prop should not be used, as it can reduce usability and accessibility for users.';
const schema = generateObjSchema({
ignoreNonDOM: {
type: 'boolean',
default: false,
},
});
module.exports = {
meta: {
docs: {
url: 'https://github.com/maranran/eslint-plugin-vue-a11y/blob/master/docs/rules/no-autofocus.md'
},
schema: [schema]
},
create (context) {
return VueUtils.defineTemplateBodyVisitor(context, {
"VAttribute" (node) {