UNPKG

google-closure-library

Version:
82 lines (69 loc) 2.43 kB
/** * @license * Copyright The Closure Library Authors. * SPDX-License-Identifier: Apache-2.0 */ /** * @fileoverview Utilities for inspecting page layout. This is a port of * http://go/layoutbot.java * See {@link http://go/layouttesting}. */ goog.setTestOnly('goog.testing.style'); goog.provide('goog.testing.style'); goog.require('goog.dom'); goog.require('goog.math.Rect'); goog.require('goog.style'); /** * Determines whether the bounding rectangles of the given elements intersect. * @param {Element} element The first element. * @param {Element} otherElement The second element. * @return {boolean} Whether the bounding rectangles of the given elements * intersect. */ goog.testing.style.intersects = function(element, otherElement) { 'use strict'; const elementRect = goog.style.getBounds(element); const otherElementRect = goog.style.getBounds(otherElement); return goog.math.Rect.intersects(elementRect, otherElementRect); }; /** * Determines whether the element has visible dimensions, i.e. x > 0 && y > 0. * @param {Element} element The element to check. * @return {boolean} Whether the element has visible dimensions. */ goog.testing.style.hasVisibleDimensions = function(element) { 'use strict'; const elSize = goog.style.getSize(element); const shortest = elSize.getShortest(); if (shortest <= 0) { return false; } return true; }; /** * Determines whether the CSS style of the element renders it visible. * Elements detached from the document are considered invisible. * @param {!Element} element The element to check. * @return {boolean} Whether the CSS style of the element renders it visible. */ goog.testing.style.isVisible = function(element) { 'use strict'; if (!goog.dom.isInDocument(element)) { return false; } const style = getComputedStyle(element); return style.visibility != 'hidden' && style.display != 'none'; }; /** * Test whether the given element is on screen. * @param {!Element} el The element to test. * @return {boolean} Whether the element is on the screen. */ goog.testing.style.isOnScreen = function(el) { 'use strict'; const doc = goog.dom.getDomHelper(el).getDocument(); const viewport = goog.style.getVisibleRectForElement(doc.body); const viewportRect = goog.math.Rect.createFromBox(viewport); return goog.dom.contains(doc, el) && goog.style.getBounds(el).intersects(viewportRect); };