first commit
This commit is contained in:
84
frontend/node_modules/rc-util/lib/getScrollBarSize.js
generated
vendored
Normal file
84
frontend/node_modules/rc-util/lib/getScrollBarSize.js
generated
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = getScrollBarSize;
|
||||
exports.getTargetScrollBarSize = getTargetScrollBarSize;
|
||||
var _dynamicCSS = require("./Dom/dynamicCSS");
|
||||
/* eslint-disable no-param-reassign */
|
||||
|
||||
var cached;
|
||||
function measureScrollbarSize(ele) {
|
||||
var randomId = "rc-scrollbar-measure-".concat(Math.random().toString(36).substring(7));
|
||||
var measureEle = document.createElement('div');
|
||||
measureEle.id = randomId;
|
||||
|
||||
// Create Style
|
||||
var measureStyle = measureEle.style;
|
||||
measureStyle.position = 'absolute';
|
||||
measureStyle.left = '0';
|
||||
measureStyle.top = '0';
|
||||
measureStyle.width = '100px';
|
||||
measureStyle.height = '100px';
|
||||
measureStyle.overflow = 'scroll';
|
||||
|
||||
// Clone Style if needed
|
||||
var fallbackWidth;
|
||||
var fallbackHeight;
|
||||
if (ele) {
|
||||
var targetStyle = getComputedStyle(ele);
|
||||
measureStyle.scrollbarColor = targetStyle.scrollbarColor;
|
||||
measureStyle.scrollbarWidth = targetStyle.scrollbarWidth;
|
||||
|
||||
// Set Webkit style
|
||||
var webkitScrollbarStyle = getComputedStyle(ele, '::-webkit-scrollbar');
|
||||
var width = parseInt(webkitScrollbarStyle.width, 10);
|
||||
var height = parseInt(webkitScrollbarStyle.height, 10);
|
||||
|
||||
// Try wrap to handle CSP case
|
||||
try {
|
||||
var widthStyle = width ? "width: ".concat(webkitScrollbarStyle.width, ";") : '';
|
||||
var heightStyle = height ? "height: ".concat(webkitScrollbarStyle.height, ";") : '';
|
||||
(0, _dynamicCSS.updateCSS)("\n#".concat(randomId, "::-webkit-scrollbar {\n").concat(widthStyle, "\n").concat(heightStyle, "\n}"), randomId);
|
||||
} catch (e) {
|
||||
// Can't wrap, just log error
|
||||
console.error(e);
|
||||
|
||||
// Get from style directly
|
||||
fallbackWidth = width;
|
||||
fallbackHeight = height;
|
||||
}
|
||||
}
|
||||
document.body.appendChild(measureEle);
|
||||
|
||||
// Measure. Get fallback style if provided
|
||||
var scrollWidth = ele && fallbackWidth && !isNaN(fallbackWidth) ? fallbackWidth : measureEle.offsetWidth - measureEle.clientWidth;
|
||||
var scrollHeight = ele && fallbackHeight && !isNaN(fallbackHeight) ? fallbackHeight : measureEle.offsetHeight - measureEle.clientHeight;
|
||||
|
||||
// Clean up
|
||||
document.body.removeChild(measureEle);
|
||||
(0, _dynamicCSS.removeCSS)(randomId);
|
||||
return {
|
||||
width: scrollWidth,
|
||||
height: scrollHeight
|
||||
};
|
||||
}
|
||||
function getScrollBarSize(fresh) {
|
||||
if (typeof document === 'undefined') {
|
||||
return 0;
|
||||
}
|
||||
if (fresh || cached === undefined) {
|
||||
cached = measureScrollbarSize();
|
||||
}
|
||||
return cached.width;
|
||||
}
|
||||
function getTargetScrollBarSize(target) {
|
||||
if (typeof document === 'undefined' || !target || !(target instanceof Element)) {
|
||||
return {
|
||||
width: 0,
|
||||
height: 0
|
||||
};
|
||||
}
|
||||
return measureScrollbarSize(target);
|
||||
}
|
||||
Reference in New Issue
Block a user