Skip to content

Commit 1a8c706

Browse files
author
Nicholas C. Zakas
committed
Make sure headings are counted correctly (fixes #25)
1 parent 8a13335 commit 1a8c706

File tree

8 files changed

+52
-66
lines changed

8 files changed

+52
-66
lines changed

build/csslint-node.js

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10291,18 +10291,14 @@ CSSLint.addRule({
1029110291

1029210292
for (i=0; i < selectors.length; i++){
1029310293
selector = selectors[i];
10294+
part = selector.parts[selector.parts.length-1];
1029410295

10295-
for (j=0; j < selector.parts.length; j++){
10296-
part = selector.parts[j];
10297-
if (part instanceof parserlib.css.SelectorPart){
10298-
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
10299-
headings[RegExp.$1]++;
10300-
if (headings[RegExp.$1] > 1) {
10301-
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
10302-
}
10303-
}
10304-
}
10305-
}
10296+
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
10297+
headings[RegExp.$1]++;
10298+
if (headings[RegExp.$1] > 1) {
10299+
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
10300+
}
10301+
}
1030610302
}
1030710303
});
1030810304
}

build/csslint-rhino.js

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10292,18 +10292,14 @@ CSSLint.addRule({
1029210292

1029310293
for (i=0; i < selectors.length; i++){
1029410294
selector = selectors[i];
10295+
part = selector.parts[selector.parts.length-1];
1029510296

10296-
for (j=0; j < selector.parts.length; j++){
10297-
part = selector.parts[j];
10298-
if (part instanceof parserlib.css.SelectorPart){
10299-
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
10300-
headings[RegExp.$1]++;
10301-
if (headings[RegExp.$1] > 1) {
10302-
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
10303-
}
10304-
}
10305-
}
10306-
}
10297+
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
10298+
headings[RegExp.$1]++;
10299+
if (headings[RegExp.$1] > 1) {
10300+
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
10301+
}
10302+
}
1030710303
}
1030810304
});
1030910305
}

build/csslint-tests.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,11 @@ background: -ms-linear-gradient(top, #1e5799 ,#2989d8 ,#207cca ,#7db9e8 );
798798
"Defining one rule for h1 should not result in a warning": function(){
799799
var result = CSSLint.verify("h1 { color: red;}", { "unique-headings": 1 });
800800
Assert.areEqual(0, result.messages.length);
801+
},
802+
803+
"Defining multiple rules that contain h1 should not result in a warning": function(){
804+
var result = CSSLint.verify("h2 a, h2 a:active, h2 a:hover, h2 a:visited, h2 a:link { color: red;}", { "unique-headings": 1 });
805+
Assert.areEqual(0, result.messages.length);
801806
}
802807

803808
}));

build/csslint-worker.js

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10291,18 +10291,14 @@ CSSLint.addRule({
1029110291

1029210292
for (i=0; i < selectors.length; i++){
1029310293
selector = selectors[i];
10294+
part = selector.parts[selector.parts.length-1];
1029410295

10295-
for (j=0; j < selector.parts.length; j++){
10296-
part = selector.parts[j];
10297-
if (part instanceof parserlib.css.SelectorPart){
10298-
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
10299-
headings[RegExp.$1]++;
10300-
if (headings[RegExp.$1] > 1) {
10301-
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
10302-
}
10303-
}
10304-
}
10305-
}
10296+
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
10297+
headings[RegExp.$1]++;
10298+
if (headings[RegExp.$1] > 1) {
10299+
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
10300+
}
10301+
}
1030610302
}
1030710303
});
1030810304
}

build/csslint.js

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10292,18 +10292,14 @@ CSSLint.addRule({
1029210292

1029310293
for (i=0; i < selectors.length; i++){
1029410294
selector = selectors[i];
10295+
part = selector.parts[selector.parts.length-1];
1029510296

10296-
for (j=0; j < selector.parts.length; j++){
10297-
part = selector.parts[j];
10298-
if (part instanceof parserlib.css.SelectorPart){
10299-
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
10300-
headings[RegExp.$1]++;
10301-
if (headings[RegExp.$1] > 1) {
10302-
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
10303-
}
10304-
}
10305-
}
10306-
}
10297+
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
10298+
headings[RegExp.$1]++;
10299+
if (headings[RegExp.$1] > 1) {
10300+
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
10301+
}
10302+
}
1030710303
}
1030810304
});
1030910305
}

build/npm/lib/csslint-node.js

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10291,18 +10291,14 @@ CSSLint.addRule({
1029110291

1029210292
for (i=0; i < selectors.length; i++){
1029310293
selector = selectors[i];
10294+
part = selector.parts[selector.parts.length-1];
1029410295

10295-
for (j=0; j < selector.parts.length; j++){
10296-
part = selector.parts[j];
10297-
if (part instanceof parserlib.css.SelectorPart){
10298-
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
10299-
headings[RegExp.$1]++;
10300-
if (headings[RegExp.$1] > 1) {
10301-
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
10302-
}
10303-
}
10304-
}
10305-
}
10296+
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
10297+
headings[RegExp.$1]++;
10298+
if (headings[RegExp.$1] > 1) {
10299+
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
10300+
}
10301+
}
1030610302
}
1030710303
});
1030810304
}

src/rules/unique-headings.js

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,14 @@ CSSLint.addRule({
3131

3232
for (i=0; i < selectors.length; i++){
3333
selector = selectors[i];
34+
part = selector.parts[selector.parts.length-1];
3435

35-
for (j=0; j < selector.parts.length; j++){
36-
part = selector.parts[j];
37-
if (part instanceof parserlib.css.SelectorPart){
38-
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
39-
headings[RegExp.$1]++;
40-
if (headings[RegExp.$1] > 1) {
41-
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
42-
}
43-
}
44-
}
45-
}
36+
if (part.elementName && /(h[1-6])/.test(part.elementName.toString())){
37+
headings[RegExp.$1]++;
38+
if (headings[RegExp.$1] > 1) {
39+
reporter.warn("Heading (" + part.elementName + ") has already been defined.", part.line, part.col, rule);
40+
}
41+
}
4642
}
4743
});
4844
}

tests/rules/unique-headings.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
"Defining one rule for h1 should not result in a warning": function(){
1818
var result = CSSLint.verify("h1 { color: red;}", { "unique-headings": 1 });
1919
Assert.areEqual(0, result.messages.length);
20+
},
21+
22+
"Defining multiple rules that contain h1 should not result in a warning": function(){
23+
var result = CSSLint.verify("h2 a, h2 a:active, h2 a:hover, h2 a:visited, h2 a:link { color: red;}", { "unique-headings": 1 });
24+
Assert.areEqual(0, result.messages.length);
2025
}
2126

2227
}));

0 commit comments

Comments
 (0)