12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @providesModule Style
- * @typechecks
- */
- var getStyleProperty = require('./getStyleProperty');
- /**
- * @param {DOMNode} element [description]
- * @param {string} name Overflow style property name.
- * @return {boolean} True if the supplied ndoe is scrollable.
- */
- function _isNodeScrollable(element, name) {
- var overflow = Style.get(element, name);
- return overflow === 'auto' || overflow === 'scroll';
- }
- /**
- * Utilities for querying and mutating style properties.
- */
- var Style = {
- /**
- * Gets the style property for the supplied node. This will return either the
- * computed style, if available, or the declared style.
- *
- * @param {DOMNode} node
- * @param {string} name Style property name.
- * @return {?string} Style property value.
- */
- get: getStyleProperty,
- /**
- * Determines the nearest ancestor of a node that is scrollable.
- *
- * NOTE: This can be expensive if used repeatedly or on a node nested deeply.
- *
- * @param {?DOMNode} node Node from which to start searching.
- * @return {?DOMWindow|DOMElement} Scroll parent of the supplied node.
- */
- getScrollParent: function (node) {
- if (!node) {
- return null;
- }
- var ownerDocument = node.ownerDocument;
- while (node && node !== ownerDocument.body) {
- if (_isNodeScrollable(node, 'overflow') || _isNodeScrollable(node, 'overflowY') || _isNodeScrollable(node, 'overflowX')) {
- return node;
- }
- node = node.parentNode;
- }
- return ownerDocument.defaultView || ownerDocument.parentWindow;
- }
- };
- module.exports = Style;
|