UNPKG

htmllint

Version:
54 lines (41 loc) 1.43 kB
var Issue = require('../issue'); module.exports = { name: 'focusable-tabindex-style', on: ['tag'], filter: ['a', 'area', 'button', 'input', 'img', 'select', 'textarea'], desc: [ 'If set, all focusable elements', '(`a`, `area`, `button`, `input`, `img`, `select`, `textarea`)', 'must have a positive `tabindex` attribute, if any.', '', 'Reasoning: [IITAA, 10.3 and 10.4](http://www.dhs.state.il.us/IITAA/IITAAWebImplementationGuidelines.html)' ].join('\n'), detectedStyle: null }; module.exports.end = function () { this.detectedStyle = null; }; module.exports.lint = function (element, opts) { if (this.isDisabled(element)) { return []; } var tabIndexStyle = this.getTabIndexStyle(element); if (this.detectedStyle !== null && this.detectedStyle !== tabIndexStyle) { var msg = tabIndexStyle ? 'remove the tabindex' : 'add a positive tabindex'; return new Issue('E026', element.openLineCol, {op: msg}); } this.detectedStyle = tabIndexStyle; return []; }; module.exports.isDisabled = function (element) { return element.attribs && element.attribs.hasOwnProperty('disabled'); }; module.exports.getTabIndexStyle = function (element) { var a = element.attribs; if (a && a.hasOwnProperty('tabindex') && typeof a !== 'undefined') { return a.tabindex.value > 0; } return false; };