UNPKG

@uuv/a11y

Version:

A javascript lib for running a11y validation based on multiple reference(RGAA, etc)

74 lines (73 loc) 2.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fromAxeToUvvA11yIssue = fromAxeToUvvA11yIssue; const uuv_a11y_result_1 = require("../../model/uuv-a11y-result"); /** * Convert an aXe selector array to a selector string. Copied from * https://github.com/dequelabs/axe-cli/blob/develop/lib/utils.js * for now, wonder if we can share or move out. * @private * @param {Array} selectors - The selector parts. * @returns {String} Returns the selector string. */ function selectorToString(selectors) { return selectors .reduce((selectorParts, selector) => selectorParts.concat(selector), []) .join(" "); } /** * Convert a axe violation impact to a pa11y level * @private * @param {string} impact axe level * @returns {string} pa11y level */ function axeImpactToPa11yLevel(impact) { switch (impact) { case "moderate": return uuv_a11y_result_1.IssueType.Warning; case "minor": return uuv_a11y_result_1.IssueType.Notice; case "critical": case "serious": default: return uuv_a11y_result_1.IssueType.Error; } } function axeImpactToPa11yImpact(impact) { switch (impact) { case "critical": return uuv_a11y_result_1.IssueImpact.Critical; case "serious": return uuv_a11y_result_1.IssueImpact.Serious; case "moderate": return uuv_a11y_result_1.IssueImpact.Moderate; case "minor": return uuv_a11y_result_1.IssueImpact.Minor; default: return uuv_a11y_result_1.IssueImpact.Unknown; } } /** * Process an aXe issue. * @private * @param {Object} axeIssue - An aXe issue to process. * @returns {Object[]} Returns an array of processed issues. */ function fromAxeToUvvA11yIssue(axeIssue) { // See https://github.com/dequelabs/axe-core/blob/develop/doc/API.md#results-object for a description // of an axe issue const selectors = axeIssue.nodes.map(node => selectorToString(node.target)); return selectors.map(selector => ({ type: axeImpactToPa11yLevel(axeIssue.impact), code: axeIssue.id, message: `${axeIssue.help} (${axeIssue.helpUrl})`, selector, htmlElement: window.document.querySelector(selector), runnerExtras: { description: axeIssue.description, impact: axeImpactToPa11yImpact(axeIssue.impact), help: axeIssue.help, helpUrl: axeIssue.helpUrl } })); }