UNPKG

dom-helpers-extra

Version:
71 lines (56 loc) 1.92 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _offset = _interopRequireDefault(require("dom-helpers/offset")); var _css = _interopRequireDefault(require("dom-helpers/css")); var _position = _interopRequireDefault(require("dom-helpers/position")); function offset(node, coords) { if (!coords) { return (0, _offset.default)(node); } var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, positionState = (0, _css.default)(node, "position"), props = {}; var targetPos = {}; // Set position first, in-case top/left are set even on static elem if (positionState === "static") { node.style.position = "relative"; } curOffset = (0, _offset.default)(node); curCSSTop = (0, _css.default)(node, "top"); curCSSLeft = (0, _css.default)(node, "left"); calculatePosition = (positionState === "absolute" || positionState === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1; // Need to be able to calculate position if either // top or left is auto and position is either absolute or fixed if (calculatePosition) { curPosition = (0, _position.default)(node); curTop = curPosition.top; curLeft = curPosition.left; } else { curTop = parseFloat(curCSSTop) || 0; curLeft = parseFloat(curCSSLeft) || 0; } if (coords.top != null) { targetPos.top = coords.top - curOffset.top + curTop; props.top = targetPos.top + "px"; } if (coords.left != null) { targetPos.left = coords.left - curOffset.left + curLeft; props.left = targetPos.left + "px"; } if (coords.using) { coords.using(targetPos); } else { (0, _css.default)(node, props); } return; } var _default = offset; exports.default = _default;