Fix modals not closing properly when the outside is clicked (#967)
This commit is contained in:
parent
25cedc8c52
commit
890de095db
@ -26,20 +26,13 @@ class ModalController {
|
||||
}
|
||||
|
||||
prepare() {
|
||||
for (const node of document.querySelectorAll('.modal')) {
|
||||
for (const node of document.querySelectorAll('.modal,.modal-container')) {
|
||||
const {id} = node;
|
||||
const modal = new Modal(node);
|
||||
modal.prepare();
|
||||
this._modalMap.set(id, modal);
|
||||
this._modals.push(modal);
|
||||
}
|
||||
|
||||
for (const node of document.querySelectorAll('.modal-container')) {
|
||||
const {id} = node;
|
||||
const modal = new Modal(node);
|
||||
this._modalMap.set(id, modal);
|
||||
this._modals.push(modal);
|
||||
node.addEventListener('click', this._onModalContainerClick.bind(this, modal), false);
|
||||
}
|
||||
}
|
||||
|
||||
getModal(name) {
|
||||
@ -56,11 +49,4 @@ class ModalController {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Private
|
||||
|
||||
_onModalContainerClick(modal, e) {
|
||||
if (e.currentTarget !== e.target) { return; }
|
||||
modal.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,10 @@ class Modal extends EventDispatcher {
|
||||
return this._node;
|
||||
}
|
||||
|
||||
prepare() {
|
||||
// NOP
|
||||
}
|
||||
|
||||
isVisible() {
|
||||
return !!(this._getWrappedNode().data('bs.modal') || {}).isShown;
|
||||
}
|
||||
|
@ -112,6 +112,32 @@ class Modal extends PopupElement {
|
||||
closingClassName: 'modal-container-closing',
|
||||
closingAnimationDuration: 375 // Milliseconds; includes buffer
|
||||
});
|
||||
this._canCloseOnClick = false;
|
||||
}
|
||||
|
||||
prepare() {
|
||||
const node = this._node;
|
||||
node.addEventListener('mousedown', this._onModalContainerMouseDown.bind(this), false);
|
||||
node.addEventListener('mouseup', this._onModalContainerMouseUp.bind(this), false);
|
||||
node.addEventListener('click', this._onModalContainerClick.bind(this), false);
|
||||
}
|
||||
|
||||
// Private
|
||||
|
||||
_onModalContainerMouseDown(e) {
|
||||
this._canCloseOnClick = (e.currentTarget === e.target);
|
||||
}
|
||||
|
||||
_onModalContainerMouseUp(e) {
|
||||
if (!this._canCloseOnClick) { return; }
|
||||
this._canCloseOnClick = (e.currentTarget === e.target);
|
||||
}
|
||||
|
||||
_onModalContainerClick(e) {
|
||||
if (!this._canCloseOnClick) { return; }
|
||||
this._canCloseOnClick = false;
|
||||
if (e.currentTarget !== e.target) { return; }
|
||||
this.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user