-
-
Notifications
You must be signed in to change notification settings - Fork 385
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add alt of area[href] and input[type=image] rule
- Loading branch information
Showing
2 changed files
with
128 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
/** | ||
* Copyright (c) 2013, Yanis Wang <[email protected]> | ||
* Copyright (c) 2014, Takeshi Kurosawa <[email protected]> | ||
* MIT Licensed | ||
*/ | ||
HTMLHint.addRule({ | ||
id: 'alt-not-empty', | ||
description: 'Alt of input[type=image], area[href] must set value.', | ||
init: function(parser, reporter){ | ||
var self = this; | ||
parser.addListener('tagstart', function(event){ | ||
var tagName = event.tagName.toLowerCase(), | ||
attrs = event.attrs, | ||
attrMap = {}, | ||
attr, | ||
col = event.col + tagName.length + 1, | ||
selector; | ||
if (tagName !== 'area' && tagName !== 'input'){ | ||
return; | ||
} | ||
for(var i=0, l=attrs.length;i<l;i++){ | ||
attr = attrs[i]; | ||
attrMap[attr.name.toLowerCase()] = attr.value; | ||
} | ||
if ((tagName === 'area' && 'href' in attrMap) || | ||
(tagName === 'input' && attrMap['type'] === 'image')) { | ||
selector = tagName === 'area' ? 'area[href]' : 'input[type=image]'; | ||
if (!('alt' in attrMap) || attrMap['alt'] === '') { | ||
reporter.warn('Alt of ' + tagName + ' must be set value.', event.line, col, self, event.raw); | ||
} | ||
} | ||
}); | ||
} | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
/** | ||
* Copyright (c) 2013, Yanis Wang <[email protected]> | ||
* Copyright (c) 2014, Takeshi Kurosawa <[email protected]> | ||
* MIT Licensed | ||
*/ | ||
|
||
var expect = require("expect.js"); | ||
|
||
var HTMLHint = require("../../index").HTMLHint; | ||
|
||
var ruldId = 'alt-not-empty', | ||
ruleOptions = {}; | ||
|
||
ruleOptions[ruldId] = true; | ||
|
||
describe('Rules: '+ruldId, function(){ | ||
|
||
/* A tag can have shape and coords attributes and not have alt attribute */ | ||
it('A tag have not alt attribute should not result in an error', function(){ | ||
var code = '<a>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Area tag have not href and alt attribute should not result in an error', function(){ | ||
var code = '<area>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Area[href] tag have not alt attribute should result in an error', function(){ | ||
var code = '<area href="#test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(6); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Area[href] tag have empty alt attribute should result in an error', function(){ | ||
var code = '<area href="#test" alt="">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(6); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Area[href] tag have non emtpy alt attribute should not result in an error', function(){ | ||
var code = '<area href="#test" alt="test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Input tag have not type and alt attribute should not result in an error', function(){ | ||
var code = '<input>'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Input[type="text"] tag have not alt attribute should not result in an error', function(){ | ||
var code = '<input type="text">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
|
||
it('Input[type="image"] tag have not alt attribute should result in an error', function(){ | ||
var code = '<input type="image">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(7); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Input[type="image"] tag have empty alt attribute should result in an error', function(){ | ||
var code = '<input type="image" alt="">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(1); | ||
expect(messages[0].rule.id).to.be(ruldId); | ||
expect(messages[0].line).to.be(1); | ||
expect(messages[0].col).to.be(7); | ||
expect(messages[0].type).to.be('warning'); | ||
}); | ||
|
||
it('Input[type="image"] tag have non emtpy alt attribute should not result in an error', function(){ | ||
var code = '<input type="image" alt="test">'; | ||
var messages = HTMLHint.verify(code, ruleOptions); | ||
expect(messages.length).to.be(0); | ||
}); | ||
}); |