diff --git a/server/src/Patterns.ts b/server/src/Patterns.ts
index 2a515c4..02460be 100644
--- a/server/src/Patterns.ts
+++ b/server/src/Patterns.ts
@@ -17,7 +17,8 @@ const patterns: string[] = [
"
",
"",
"
(?:(?:\\s|\\S|)+?(?=<\/head>))<\/head>",
- ""
+ "",
+ "tabindex=\"(?:.)+?\""
];
export const pattern: RegExp = new RegExp(patterns.join('|'), 'ig');
@@ -205,7 +206,7 @@ export async function validateInput(m: RegExpExecArray) {
} else {
return {
meta: m,
- mess: 'Provide an id with in the aria labelled by [aria-labelledby=""]'
+ mess: 'Provide an id with in the aria labelledby [aria-labelledby=""]'
};
}
case (/role=/i.test(m[0])):
@@ -217,4 +218,14 @@ export async function validateInput(m: RegExpExecArray) {
mess: 'Provide an aria label [aria-label=""]'
};
}
+}
+
+export async function validateTab(m: RegExpExecArray) {
+ connection.console.log(m[0]);
+ if (!/tabindex="(?:0|-1)"/i.test(m[0])) {
+ return {
+ meta: m,
+ mess: 'A tabindex greater than 0 interferes with the focus order. Try restructuring the HTML'
+ };
+ }
}
\ No newline at end of file
diff --git a/server/src/server.ts b/server/src/server.ts
index 74d840a..65dfb89 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -168,6 +168,14 @@ async function validateTextDocument(textDocument: TextDocument): Promise {
_diagnostics(resultHtml.meta, resultHtml.mess);
}
break;
+ // Tabindex
+ case (/tabin/i.test(el)):
+ let resultTab = await Pattern.validateTab(m);
+ if (resultTab) {
+ problems++;
+ _diagnostics(resultTab.meta, resultTab.mess);
+ }
+ break;
default:
break;
}