Jesus sucks
This commit is contained in:
105
backend/frontend/node_modules/@restart/ui/cjs/ModalManager.js
generated
vendored
Normal file
105
backend/frontend/node_modules/@restart/ui/cjs/ModalManager.js
generated
vendored
Normal file
@@ -0,0 +1,105 @@
|
||||
"use strict";
|
||||
|
||||
exports.__esModule = true;
|
||||
exports.default = exports.OPEN_DATA_ATTRIBUTE = void 0;
|
||||
var _css = _interopRequireDefault(require("dom-helpers/css"));
|
||||
var _DataKey = require("./DataKey");
|
||||
var _getScrollbarWidth = _interopRequireDefault(require("./getScrollbarWidth"));
|
||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
||||
const OPEN_DATA_ATTRIBUTE = exports.OPEN_DATA_ATTRIBUTE = (0, _DataKey.dataAttr)('modal-open');
|
||||
|
||||
/**
|
||||
* Manages a stack of Modals as well as ensuring
|
||||
* body scrolling is is disabled and padding accounted for
|
||||
*/
|
||||
class ModalManager {
|
||||
constructor({
|
||||
ownerDocument,
|
||||
handleContainerOverflow = true,
|
||||
isRTL = false
|
||||
} = {}) {
|
||||
this.handleContainerOverflow = handleContainerOverflow;
|
||||
this.isRTL = isRTL;
|
||||
this.modals = [];
|
||||
this.ownerDocument = ownerDocument;
|
||||
}
|
||||
getScrollbarWidth() {
|
||||
return (0, _getScrollbarWidth.default)(this.ownerDocument);
|
||||
}
|
||||
getElement() {
|
||||
return (this.ownerDocument || document).body;
|
||||
}
|
||||
setModalAttributes(_modal) {
|
||||
// For overriding
|
||||
}
|
||||
removeModalAttributes(_modal) {
|
||||
// For overriding
|
||||
}
|
||||
setContainerStyle(containerState) {
|
||||
const style = {
|
||||
overflow: 'hidden'
|
||||
};
|
||||
|
||||
// we are only interested in the actual `style` here
|
||||
// because we will override it
|
||||
const paddingProp = this.isRTL ? 'paddingLeft' : 'paddingRight';
|
||||
const container = this.getElement();
|
||||
containerState.style = {
|
||||
overflow: container.style.overflow,
|
||||
[paddingProp]: container.style[paddingProp]
|
||||
};
|
||||
if (containerState.scrollBarWidth) {
|
||||
// use computed style, here to get the real padding
|
||||
// to add our scrollbar width
|
||||
style[paddingProp] = `${parseInt((0, _css.default)(container, paddingProp) || '0', 10) + containerState.scrollBarWidth}px`;
|
||||
}
|
||||
container.setAttribute(OPEN_DATA_ATTRIBUTE, '');
|
||||
(0, _css.default)(container, style);
|
||||
}
|
||||
reset() {
|
||||
[...this.modals].forEach(m => this.remove(m));
|
||||
}
|
||||
removeContainerStyle(containerState) {
|
||||
const container = this.getElement();
|
||||
container.removeAttribute(OPEN_DATA_ATTRIBUTE);
|
||||
Object.assign(container.style, containerState.style);
|
||||
}
|
||||
add(modal) {
|
||||
let modalIdx = this.modals.indexOf(modal);
|
||||
if (modalIdx !== -1) {
|
||||
return modalIdx;
|
||||
}
|
||||
modalIdx = this.modals.length;
|
||||
this.modals.push(modal);
|
||||
this.setModalAttributes(modal);
|
||||
if (modalIdx !== 0) {
|
||||
return modalIdx;
|
||||
}
|
||||
this.state = {
|
||||
scrollBarWidth: this.getScrollbarWidth(),
|
||||
style: {}
|
||||
};
|
||||
if (this.handleContainerOverflow) {
|
||||
this.setContainerStyle(this.state);
|
||||
}
|
||||
return modalIdx;
|
||||
}
|
||||
remove(modal) {
|
||||
const modalIdx = this.modals.indexOf(modal);
|
||||
if (modalIdx === -1) {
|
||||
return;
|
||||
}
|
||||
this.modals.splice(modalIdx, 1);
|
||||
|
||||
// if that was the last modal in a container,
|
||||
// clean up the container
|
||||
if (!this.modals.length && this.handleContainerOverflow) {
|
||||
this.removeContainerStyle(this.state);
|
||||
}
|
||||
this.removeModalAttributes(modal);
|
||||
}
|
||||
isTopModal(modal) {
|
||||
return !!this.modals.length && this.modals[this.modals.length - 1] === modal;
|
||||
}
|
||||
}
|
||||
var _default = exports.default = ModalManager;
|
||||
Reference in New Issue
Block a user