Sha256: c1523f59984c371254ad96e5701a6e05f5f6a78d6849bf3269ee89edb4280586

Contents?: true

Size: 1.7 KB

Versions: 271

Compression:

Stored size: 1.7 KB

Contents

function getSelector(role) {
	var impliedNative = axe.commons.aria.implicitNodes(role) || [];
	return impliedNative.concat('[role="' + role + '"]').join(',');
}

function getMissingContext(virtualNode, requiredContext, includeElement) {
	var index,
		length,
		role = virtualNode.actualNode.getAttribute('role'),
		missing = [];

	if (!requiredContext) {
		requiredContext = axe.commons.aria.requiredContext(role);
	}

	if (!requiredContext) {
		return null;
	}

	for (index = 0, length = requiredContext.length; index < length; index++) {
		if (
			includeElement &&
			axe.utils.matchesSelector(
				virtualNode.actualNode,
				getSelector(requiredContext[index])
			)
		) {
			return null;
		}
		if (
			axe.commons.dom.findUpVirtual(
				virtualNode,
				getSelector(requiredContext[index])
			)
		) {
			//if one matches, it passes
			return null;
		} else {
			missing.push(requiredContext[index]);
		}
	}

	return missing;
}

function getAriaOwners(element) {
	var owners = [],
		o = null;

	while (element) {
		if (element.getAttribute('id')) {
			const id = axe.utils.escapeSelector(element.getAttribute('id'));
			let doc = axe.commons.dom.getRootNode(element);
			o = doc.querySelector(`[aria-owns~=${id}]`);
			if (o) {
				owners.push(o);
			}
		}
		element = element.parentElement;
	}

	return owners.length ? owners : null;
}

var missingParents = getMissingContext(virtualNode);

if (!missingParents) {
	return true;
}

var owners = getAriaOwners(node);

if (owners) {
	for (var i = 0, l = owners.length; i < l; i++) {
		missingParents = getMissingContext(
			axe.utils.getNodeFromTree(owners[i]),
			missingParents,
			true
		);
		if (!missingParents) {
			return true;
		}
	}
}

this.data(missingParents);
return false;

Version data entries

271 entries across 271 versions & 1 rubygems

Version Path
govuk_publishing_components-30.4.1 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-30.4.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-30.3.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-30.2.1 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-30.2.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-30.1.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-30.0.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.15.3 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.15.2 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.15.1 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.15.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.14.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.13.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.12.1 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.12.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.11.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.10.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.9.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.8.0 node_modules/axe-core/lib/checks/aria/required-parent.js
govuk_publishing_components-29.7.0 node_modules/axe-core/lib/checks/aria/required-parent.js