Sha256: 4529781fcc4a2f114cf4ab3f0438aeab5680d402a491b8e9d9d21ac89ddf3b1c

Contents?: true

Size: 1.35 KB

Versions: 375

Compression:

Stored size: 1.35 KB

Contents

/* global dom */

function noParentScrolled(element, offset) {
	element = dom.getComposedParent(element);
	while (element && element.nodeName.toLowerCase() !== 'html') {
		if (element.scrollTop) {
			offset += element.scrollTop;
			if (offset >= 0) {
				return false;
			}
		}
		element = dom.getComposedParent(element);
	}
	return true;
}

/**
 * Determines if element is off screen
 * @method isOffscreen
 * @memberof axe.commons.dom
 * @instance
 * @param  {Element} element
 * @return {Boolean}
 */
dom.isOffscreen = function(element) {
	let leftBoundary;
	const docElement = document.documentElement;
	const styl = window.getComputedStyle(element);
	const dir = window
		.getComputedStyle(document.body || docElement)
		.getPropertyValue('direction');
	const coords = dom.getElementCoordinates(element);

	// bottom edge beyond
	if (
		coords.bottom < 0 &&
		(noParentScrolled(element, coords.bottom) || styl.position === 'absolute')
	) {
		return true;
	}

	if (coords.left === 0 && coords.right === 0) {
		//This is an edge case, an empty (zero-width) element that isn't positioned 'off screen'.
		return false;
	}

	if (dir === 'ltr') {
		if (coords.right <= 0) {
			return true;
		}
	} else {
		leftBoundary = Math.max(
			docElement.scrollWidth,
			dom.getViewportSize(window).width
		);
		if (coords.left >= leftBoundary) {
			return true;
		}
	}

	return false;
};

Version data entries

375 entries across 375 versions & 1 rubygems

Version Path
govuk_publishing_components-30.4.1 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-30.4.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-30.3.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-30.2.1 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-30.2.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-30.1.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-30.0.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.15.3 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.15.2 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.15.1 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.15.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.14.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.13.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.12.1 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.12.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.11.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.10.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.9.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.8.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js
govuk_publishing_components-29.7.0 node_modules/axe-core/lib/commons/dom/is-offscreen.js