Sha256: 95952f179b318761033607764f8a0f5cee4f0d53bdd1323a71ba971255b4b968

Contents?: true

Size: 1.21 KB

Versions: 271

Compression:

Stored size: 1.21 KB

Contents

/* global dom */

// test for hrefs that start with # or /# (for angular)
const isInternalLinkRegex = /^\/?#[^/!]/;

/**
 * Determines if element is a skip link
 * @method isSkipLink
 * @memberof axe.commons.dom
 * @instance
 * @param  {Element} element
 * @return {Boolean}
 */
dom.isSkipLink = function(element) {
	if (!isInternalLinkRegex.test(element.getAttribute('href'))) {
		return false;
	}

	let firstPageLink;
	if (typeof axe._cache.get('firstPageLink') !== 'undefined') {
		firstPageLink = axe._cache.get('firstPageLink');
	} else {
		// define a skip link as any anchor element whose href starts with `#...`
		// and which precedes the first anchor element whose href doesn't start
		// with  `#...` (that is, a link to a page)
		firstPageLink = axe.utils.querySelectorAll(
			axe._tree,
			'a:not([href^="#"]):not([href^="/#"]):not([href^="javascript"])'
		)[0];

		// null will signify no first page link
		axe._cache.set('firstPageLink', firstPageLink || null);
	}

	// if there are no page links then all all links will need to be
	// considered as skip links
	if (!firstPageLink) {
		return true;
	}

	return (
		element.compareDocumentPosition(firstPageLink.actualNode) ===
		element.DOCUMENT_POSITION_FOLLOWING
	);
};

Version data entries

271 entries across 271 versions & 1 rubygems

Version Path
govuk_publishing_components-29.6.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-29.5.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-29.4.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-29.3.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-29.2.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-29.1.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-29.0.1 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-29.0.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.9.2 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.9.1 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.9.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.8.1 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.8.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.7.1 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.6.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.5.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.4.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.3.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.2.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js
govuk_publishing_components-28.1.0 node_modules/axe-core/lib/commons/dom/is-skip-link.js