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; }