123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.collectScroller = collectScroller;
- exports.getAlignPopupClassName = getAlignPopupClassName;
- exports.getMotion = getMotion;
- exports.getVisibleArea = getVisibleArea;
- exports.getWin = getWin;
- exports.toNum = toNum;
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
- function isPointsEq() {
- var a1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
- var a2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
- var isAlignPoint = arguments.length > 2 ? arguments[2] : undefined;
- if (isAlignPoint) {
- return a1[0] === a2[0];
- }
- return a1[0] === a2[0] && a1[1] === a2[1];
- }
- function getAlignPopupClassName(builtinPlacements, prefixCls, align, isAlignPoint) {
- var points = align.points;
- var placements = Object.keys(builtinPlacements);
- for (var i = 0; i < placements.length; i += 1) {
- var _builtinPlacements$pl;
- var placement = placements[i];
- if (isPointsEq((_builtinPlacements$pl = builtinPlacements[placement]) === null || _builtinPlacements$pl === void 0 ? void 0 : _builtinPlacements$pl.points, points, isAlignPoint)) {
- return "".concat(prefixCls, "-placement-").concat(placement);
- }
- }
- return '';
- }
- /** @deprecated We should not use this if we can refactor all deps */
- function getMotion(prefixCls, motion, animation, transitionName) {
- if (motion) {
- return motion;
- }
- if (animation) {
- return {
- motionName: "".concat(prefixCls, "-").concat(animation)
- };
- }
- if (transitionName) {
- return {
- motionName: transitionName
- };
- }
- return null;
- }
- function getWin(ele) {
- return ele.ownerDocument.defaultView;
- }
- /**
- * Get all the scrollable parent elements of the element
- * @param ele The element to be detected
- * @param areaOnly Only return the parent which will cut visible area
- */
- function collectScroller(ele) {
- var scrollerList = [];
- var current = ele === null || ele === void 0 ? void 0 : ele.parentElement;
- var scrollStyle = ['hidden', 'scroll', 'clip', 'auto'];
- while (current) {
- var _getWin$getComputedSt = getWin(current).getComputedStyle(current),
- overflowX = _getWin$getComputedSt.overflowX,
- overflowY = _getWin$getComputedSt.overflowY,
- overflow = _getWin$getComputedSt.overflow;
- if ([overflowX, overflowY, overflow].some(function (o) {
- return scrollStyle.includes(o);
- })) {
- scrollerList.push(current);
- }
- current = current.parentElement;
- }
- return scrollerList;
- }
- function toNum(num) {
- var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
- return Number.isNaN(num) ? defaultValue : num;
- }
- function getPxValue(val) {
- return toNum(parseFloat(val), 0);
- }
- /**
- *
- *
- * **************************************
- * * Border *
- * * ************************** *
- * * * * * *
- * * B * * S * B *
- * * o * * c * o *
- * * r * Content * r * r *
- * * d * * o * d *
- * * e * * l * e *
- * * r ******************** l * r *
- * * * Scroll * *
- * * ************************** *
- * * Border *
- * **************************************
- *
- */
- /**
- * Get visible area of element
- */
- function getVisibleArea(initArea, scrollerList) {
- var visibleArea = (0, _objectSpread2.default)({}, initArea);
- (scrollerList || []).forEach(function (ele) {
- if (ele instanceof HTMLBodyElement || ele instanceof HTMLHtmlElement) {
- return;
- }
- // Skip if static position which will not affect visible area
- var _getWin$getComputedSt2 = getWin(ele).getComputedStyle(ele),
- overflow = _getWin$getComputedSt2.overflow,
- overflowClipMargin = _getWin$getComputedSt2.overflowClipMargin,
- borderTopWidth = _getWin$getComputedSt2.borderTopWidth,
- borderBottomWidth = _getWin$getComputedSt2.borderBottomWidth,
- borderLeftWidth = _getWin$getComputedSt2.borderLeftWidth,
- borderRightWidth = _getWin$getComputedSt2.borderRightWidth;
- var eleRect = ele.getBoundingClientRect();
- var eleOutHeight = ele.offsetHeight,
- eleInnerHeight = ele.clientHeight,
- eleOutWidth = ele.offsetWidth,
- eleInnerWidth = ele.clientWidth;
- var borderTopNum = getPxValue(borderTopWidth);
- var borderBottomNum = getPxValue(borderBottomWidth);
- var borderLeftNum = getPxValue(borderLeftWidth);
- var borderRightNum = getPxValue(borderRightWidth);
- var scaleX = toNum(Math.round(eleRect.width / eleOutWidth * 1000) / 1000);
- var scaleY = toNum(Math.round(eleRect.height / eleOutHeight * 1000) / 1000);
- // Original visible area
- var eleScrollWidth = (eleOutWidth - eleInnerWidth - borderLeftNum - borderRightNum) * scaleX;
- var eleScrollHeight = (eleOutHeight - eleInnerHeight - borderTopNum - borderBottomNum) * scaleY;
- // Cut border size
- var scaledBorderTopWidth = borderTopNum * scaleY;
- var scaledBorderBottomWidth = borderBottomNum * scaleY;
- var scaledBorderLeftWidth = borderLeftNum * scaleX;
- var scaledBorderRightWidth = borderRightNum * scaleX;
- // Clip margin
- var clipMarginWidth = 0;
- var clipMarginHeight = 0;
- if (overflow === 'clip') {
- var clipNum = getPxValue(overflowClipMargin);
- clipMarginWidth = clipNum * scaleX;
- clipMarginHeight = clipNum * scaleY;
- }
- // Region
- var eleLeft = eleRect.x + scaledBorderLeftWidth - clipMarginWidth;
- var eleTop = eleRect.y + scaledBorderTopWidth - clipMarginHeight;
- var eleRight = eleLeft + eleRect.width + 2 * clipMarginWidth - scaledBorderLeftWidth - scaledBorderRightWidth - eleScrollWidth;
- var eleBottom = eleTop + eleRect.height + 2 * clipMarginHeight - scaledBorderTopWidth - scaledBorderBottomWidth - eleScrollHeight;
- visibleArea.left = Math.max(visibleArea.left, eleLeft);
- visibleArea.top = Math.max(visibleArea.top, eleTop);
- visibleArea.right = Math.min(visibleArea.right, eleRight);
- visibleArea.bottom = Math.min(visibleArea.bottom, eleBottom);
- });
- return visibleArea;
- }
|