123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- // Copyright 2011 The Closure Library Authors. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS-IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- /**
- * @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) {
- var elementRect = goog.style.getBounds(element);
- var 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) {
- var elSize = goog.style.getSize(element);
- var shortest = elSize.getShortest();
- if (shortest <= 0) {
- return false;
- }
- return true;
- };
- /**
- * Determines whether the CSS style of the element renders it visible.
- * @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) {
- var visibilityStyle =
- goog.testing.style.getAvailableStyle_(element, 'visibility');
- var displayStyle = goog.testing.style.getAvailableStyle_(element, 'display');
- return (visibilityStyle != 'hidden' && displayStyle != '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) {
- var doc = goog.dom.getDomHelper(el).getDocument();
- var viewport = goog.style.getVisibleRectForElement(doc.body);
- var viewportRect = goog.math.Rect.createFromBox(viewport);
- return goog.dom.contains(doc, el) &&
- goog.style.getBounds(el).intersects(viewportRect);
- };
- /**
- * This is essentially goog.style.getStyle_. goog.style.getStyle_ is private
- * and is not a recommended way for general purpose style extractor. For the
- * purposes of layout testing, we only use this function for retrieving
- * 'visiblity' and 'display' style.
- * @param {!Element} element The element to retrieve the style from.
- * @param {string} style Style property name.
- * @return {string} Style value.
- * @private
- */
- goog.testing.style.getAvailableStyle_ = function(element, style) {
- return goog.style.getComputedStyle(element, style) ||
- goog.style.getCascadedStyle(element, style) ||
- goog.style.getStyle(element, style);
- };
|