UNPKG

5.58 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4Object.defineProperty(exports, "__esModule", {
5 value: true
6});
7exports.default = void 0;
8var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12var _getScrollBarSize = _interopRequireDefault(require("../getScrollBarSize"));
13var _setStyle = _interopRequireDefault(require("../setStyle"));
14var uuid = 0;
15var locks = [];
16var scrollingEffectClassName = 'ant-scrolling-effect';
17var scrollingEffectClassNameReg = new RegExp("".concat(scrollingEffectClassName), 'g');
18
19// https://github.com/ant-design/ant-design/issues/19340
20// https://github.com/ant-design/ant-design/issues/19332
21var cacheStyle = new Map();
22var ScrollLocker = exports.default = /*#__PURE__*/(0, _createClass2.default)(function ScrollLocker(_options) {
23 var _this = this;
24 (0, _classCallCheck2.default)(this, ScrollLocker);
25 (0, _defineProperty2.default)(this, "lockTarget", void 0);
26 (0, _defineProperty2.default)(this, "options", void 0);
27 (0, _defineProperty2.default)(this, "getContainer", function () {
28 var _this$options;
29 return (_this$options = _this.options) === null || _this$options === void 0 ? void 0 : _this$options.container;
30 });
31 // if options change...
32 (0, _defineProperty2.default)(this, "reLock", function (options) {
33 var findLock = locks.find(function (_ref) {
34 var target = _ref.target;
35 return target === _this.lockTarget;
36 });
37 if (findLock) {
38 _this.unLock();
39 }
40 _this.options = options;
41 if (findLock) {
42 findLock.options = options;
43 _this.lock();
44 }
45 });
46 (0, _defineProperty2.default)(this, "lock", function () {
47 var _this$options3;
48 // If lockTarget exist return
49 if (locks.some(function (_ref2) {
50 var target = _ref2.target;
51 return target === _this.lockTarget;
52 })) {
53 return;
54 }
55
56 // If same container effect, return
57 if (locks.some(function (_ref3) {
58 var _this$options2;
59 var options = _ref3.options;
60 return (options === null || options === void 0 ? void 0 : options.container) === ((_this$options2 = _this.options) === null || _this$options2 === void 0 ? void 0 : _this$options2.container);
61 })) {
62 locks = [].concat((0, _toConsumableArray2.default)(locks), [{
63 target: _this.lockTarget,
64 options: _this.options
65 }]);
66 return;
67 }
68 var scrollBarSize = 0;
69 var container = ((_this$options3 = _this.options) === null || _this$options3 === void 0 ? void 0 : _this$options3.container) || document.body;
70 if (container === document.body && window.innerWidth - document.documentElement.clientWidth > 0 || container.scrollHeight > container.clientHeight) {
71 if (getComputedStyle(container).overflow !== 'hidden') {
72 scrollBarSize = (0, _getScrollBarSize.default)();
73 }
74 }
75 var containerClassName = container.className;
76 if (locks.filter(function (_ref4) {
77 var _this$options4;
78 var options = _ref4.options;
79 return (options === null || options === void 0 ? void 0 : options.container) === ((_this$options4 = _this.options) === null || _this$options4 === void 0 ? void 0 : _this$options4.container);
80 }).length === 0) {
81 cacheStyle.set(container, (0, _setStyle.default)({
82 width: scrollBarSize !== 0 ? "calc(100% - ".concat(scrollBarSize, "px)") : undefined,
83 overflow: 'hidden',
84 overflowX: 'hidden',
85 overflowY: 'hidden'
86 }, {
87 element: container
88 }));
89 }
90
91 // https://github.com/ant-design/ant-design/issues/19729
92 if (!scrollingEffectClassNameReg.test(containerClassName)) {
93 var addClassName = "".concat(containerClassName, " ").concat(scrollingEffectClassName);
94 container.className = addClassName.trim();
95 }
96 locks = [].concat((0, _toConsumableArray2.default)(locks), [{
97 target: _this.lockTarget,
98 options: _this.options
99 }]);
100 });
101 (0, _defineProperty2.default)(this, "unLock", function () {
102 var _this$options5;
103 var findLock = locks.find(function (_ref5) {
104 var target = _ref5.target;
105 return target === _this.lockTarget;
106 });
107 locks = locks.filter(function (_ref6) {
108 var target = _ref6.target;
109 return target !== _this.lockTarget;
110 });
111 if (!findLock || locks.some(function (_ref7) {
112 var _findLock$options;
113 var options = _ref7.options;
114 return (options === null || options === void 0 ? void 0 : options.container) === ((_findLock$options = findLock.options) === null || _findLock$options === void 0 ? void 0 : _findLock$options.container);
115 })) {
116 return;
117 }
118
119 // Remove Effect
120 var container = ((_this$options5 = _this.options) === null || _this$options5 === void 0 ? void 0 : _this$options5.container) || document.body;
121 var containerClassName = container.className;
122 if (!scrollingEffectClassNameReg.test(containerClassName)) return;
123 (0, _setStyle.default)(cacheStyle.get(container), {
124 element: container
125 });
126 cacheStyle.delete(container);
127 container.className = container.className.replace(scrollingEffectClassNameReg, '').trim();
128 });
129 // eslint-disable-next-line no-plusplus
130 this.lockTarget = uuid++;
131 this.options = _options;
132});
\No newline at end of file