Sha256: c70a9e5f8ffa47a50172ee9bcef889d190b0d9c68fb6433985c8a6d12707cb54

Contents?: true

Size: 1.63 KB

Versions: 11

Compression:

Stored size: 1.63 KB

Contents

const { dom } = axe.commons;
const getIsListItemRole = (role, tagName) => {
	return role === 'listitem' || (tagName === 'LI' && !role);
};

const getHasListItem = (hasListItem, tagName, isListItemRole) => {
	return hasListItem || (tagName === 'LI' && isListItemRole) || isListItemRole;
};

let base = {
	badNodes: [],
	isEmpty: true,
	hasNonEmptyTextNode: false,
	hasListItem: false,
	liItemsWithRole: 0
};

let out = virtualNode.children.reduce((out, { actualNode }) => {
	const tagName = actualNode.nodeName.toUpperCase();

	if (actualNode.nodeType === 1 && dom.isVisible(actualNode, true, false)) {
		const role = (actualNode.getAttribute('role') || '').toLowerCase();
		const isListItemRole = getIsListItemRole(role, tagName);

		out.hasListItem = getHasListItem(out.hasListItem, tagName, isListItemRole);

		if (isListItemRole) {
			out.isEmpty = false;
		}
		if (tagName === 'LI' && !isListItemRole) {
			out.liItemsWithRole++;
		}
		if (tagName !== 'LI' && !isListItemRole) {
			out.badNodes.push(actualNode);
		}
	}
	if (actualNode.nodeType === 3) {
		if (actualNode.nodeValue.trim() !== '') {
			out.hasNonEmptyTextNode = true;
		}
	}

	return out;
}, base);

const virtualNodeChildrenOfTypeLi = virtualNode.children.filter(
	({ actualNode }) => {
		return actualNode.nodeName.toUpperCase() === 'LI';
	}
);

const allLiItemsHaveRole =
	out.liItemsWithRole > 0 &&
	virtualNodeChildrenOfTypeLi.length === out.liItemsWithRole;

if (out.badNodes.length) {
	this.relatedNodes(out.badNodes);
}

const isInvalidListItem = !(
	out.hasListItem ||
	(out.isEmpty && !allLiItemsHaveRole)
);
return isInvalidListItem || !!out.badNodes.length || out.hasNonEmptyTextNode;

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
govuk_publishing_components-21.22.1 node_modules/axe-core/lib/checks/lists/only-listitems.js
govuk_publishing_components-21.22.0 node_modules/axe-core/lib/checks/lists/only-listitems.js
govuk_publishing_components-21.21.3 node_modules/axe-core/lib/checks/lists/only-listitems.js
govuk_publishing_components-21.21.2 node_modules/axe-core/lib/checks/lists/only-listitems.js
govuk_publishing_components-21.21.1 node_modules/axe-core/lib/checks/lists/only-listitems.js
govuk_publishing_components-21.21.0 node_modules/axe-core/lib/checks/lists/only-listitems.js
govuk_publishing_components-21.20.0 node_modules/axe-core/lib/checks/lists/only-listitems.js
govuk_publishing_components-21.19.1 node_modules/axe-core/lib/checks/lists/only-listitems.js
govuk_publishing_components-21.19.0 node_modules/axe-core/lib/checks/lists/only-listitems.js
govuk_publishing_components-21.18.0 node_modules/axe-core/lib/checks/lists/only-listitems.js
govuk_publishing_components-21.17.0 node_modules/axe-core/lib/checks/lists/only-listitems.js