diff --git a/plugins/base.js b/plugins/base.js
index 1ca07b47..8874d58e 100644
--- a/plugins/base.js
+++ b/plugins/base.js
@@ -43,8 +43,8 @@ class Plugin {
}
// Adds an entry to the info panel's "Errors" tab
- error(title, $description, $el) {
- return this.panel.addError(title, $description, $el);
+ error(title, $description, $el, level = "error") {
+ return this.panel.addError(title, $description, $el, level);
}
/**
diff --git a/plugins/headings/index.js b/plugins/headings/index.js
index bb49ac05..3038a6c1 100644
--- a/plugins/headings/index.js
+++ b/plugins/headings/index.js
@@ -12,7 +12,7 @@ require("./style.less");
const ERRORS = {
FIRST_NOT_H1(level) {
return {
- title: "First heading is not an <h1>",
+ title: "Error: First heading is not an <h1>",
description: `
To give your document a proper structure for assistive
@@ -36,7 +36,7 @@ const ERRORS = {
// [1]: http://www.w3.org/html/wg/drafts/html/master/semantics.html#outline
// [2]: https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Sections_and_Outlines_of_an_HTML5_document#The_HTML5_Outline_Algorithm
MULTIPLE_H1: {
- title: "<h1> used when one is already present"
+ title: "Error: <h1> used when one is already present"
},
// This error accepts two arguments to display a relevant error message
@@ -60,11 +60,35 @@ const ERRORS = {
return {
title: `
- Nonconsecutive heading level used (h${prevLevel} →
+ Error: Nonconsecutive heading level used (h${prevLevel} →
h${currLevel})
`,
description: description
};
+ },
+
+ HIDDEN_HEADER(level) {
+ return {
+ title: `Warning: Hidden heading level (h${level})`,
+ description: `
+
+ This document contains a hidden h${level}
+
+ `,
+ errorLevel: "warning",
+ };
+ },
+
+ ARIA_HIDDEN_HEADER(level) {
+ return {
+ title: `Warning: ARIA Hidden heading level (h${level})`,
+ description: `
+
+ This document contains an h${level} with aria-hidden set to true.
+
+ `,
+ errorLevel: "warning"
+ };
}
};
@@ -102,6 +126,14 @@ class HeadingsPlugin extends Plugin {
error = ERRORS.NONCONSECUTIVE_HEADER(prevLevel, level); // eslint-disable-line new-cap
}
+ if ($el.attr("aria-hidden")) {
+ error = ERRORS.ARIA_HIDDEN_HEADER(level);
+ }
+
+ if ($el.is(":hidden")) {
+ error = ERRORS.HIDDEN_HEADER(level);
+ }
+
prevLevel = level;
// Render the entry in the outline for the "Summary" tab
@@ -116,23 +148,26 @@ class HeadingsPlugin extends Plugin {
annotate.toggleHighlight($el, $item);
if (error) {
+ const { errorLevel = "error" } = error;
+
// Register an error to the info panel
let infoPanelError = this.error(
- error.title, $(error.description), $el);
+ error.title, $(error.description), $el, errorLevel);
// Place an error label on the heading tag
annotate.errorLabel(
$el,
$el.prop("tagName").toLowerCase(),
error.title,
- infoPanelError);
+ infoPanelError,
+ errorLevel);
// Mark the summary item as red
// Pretty hacky, since we're borrowing label styles for this
// summary tab
$item
.find(".tota11y-heading-outline-level")
- .addClass("tota11y-label-error");
+ .addClass(`tota11y-label-${errorLevel}`);
} else {
// Label the heading tag
annotate.label($el).addClass("tota11y-label-success");
diff --git a/plugins/shared/annotate/index.js b/plugins/shared/annotate/index.js
index d01b7bf0..340b498f 100644
--- a/plugins/shared/annotate/index.js
+++ b/plugins/shared/annotate/index.js
@@ -115,7 +115,7 @@ module.exports = (namespace) => {
// object will contain a "show()" method when the info panel is
// rendered, allowing us to externally open the entry in the info
// panel corresponding to this error.
- errorLabel($el, text, expanded, errorEntry) {
+ errorLabel($el, text, expanded, errorEntry, level = "error") {
let $innerHtml = $(errorLabelTemplate({
text: text,
detail: expanded,
@@ -137,7 +137,7 @@ module.exports = (namespace) => {
}
return this.label($el)
- .addClass("tota11y-label-error")
+ .addClass(`tota11y-label-${level}`)
.html($innerHtml);
},
diff --git a/plugins/shared/info-panel/error.handlebars b/plugins/shared/info-panel/error.handlebars
index c4842be4..1260910a 100644
--- a/plugins/shared/info-panel/error.handlebars
+++ b/plugins/shared/info-panel/error.handlebars
@@ -1,4 +1,4 @@
-
+
diff --git a/plugins/shared/info-panel/index.js b/plugins/shared/info-panel/index.js
index 6cfdc8b9..41d26ec1 100644
--- a/plugins/shared/info-panel/index.js
+++ b/plugins/shared/info-panel/index.js
@@ -53,8 +53,8 @@ class InfoPanel {
* Adds an error to the errors tab. Also receives a jQuery element to
* highlight on hover.
*/
- addError(title, $description, $el) {
- let error = {title, $description, $el};
+ addError(title, $description, $el, level = "error") {
+ let error = {title, $description, $el, level};
this.errors.push(error);
return error;
}
diff --git a/test/index.html b/test/index.html
index 257acf94..81aff3e8 100644
--- a/test/index.html
+++ b/test/index.html
@@ -19,6 +19,10 @@
font-size: 24px;
font-weight: bold;
}
+
+ .hidden {
+ display: none;
+ }
@@ -32,6 +36,7 @@
+ This heading should be hidden.
Project name