From e17e28fdda272ff0a0a14e0908763f9d6a2f82a9 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Mon, 27 Sep 2021 12:12:39 +0200 Subject: [PATCH] Merge pull request #4538 from Icinga/fix-multi-modal-windows-and-submit-4525 Fix multi modal windows and submit (cherry picked from commit 8ac8271eddc69d295bdf4efa72800016253c4dce) --- public/js/icinga/behavior/modal.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/public/js/icinga/behavior/modal.js b/public/js/icinga/behavior/modal.js index cd0652506..3f734c4af 100644 --- a/public/js/icinga/behavior/modal.js +++ b/public/js/icinga/behavior/modal.js @@ -42,6 +42,11 @@ var $modal = _this.$ghost.clone(); var $urlTarget = _this.icinga.loader.getLinkTargetFor($a, false); + _this.modalOpener = event.currentTarget; + + // Disable pointer events to block further function calls + _this.modalOpener.style.pointerEvents = 'none'; + // Add showCompact, we don't want controls in a modal url = _this.icinga.utils.addUrlFlag(url, 'showCompact'); @@ -90,6 +95,8 @@ var _this = event.data.self; var $form = $(event.currentTarget).closest('form'); var $modal = $form.closest('#modal'); + // otherwise the form is submitted several times by clicking the "Submit" button several times + $form.find('input:not(:disabled)').prop('disabled', true); var req = _this.icinga.loader.submitForm($form, $autoSubmittedBy); req.addToHistory = false; @@ -187,6 +194,10 @@ * @param $modal {jQuery} The modal element */ Modal.prototype.hide = function($modal) { + // Remove pointerEvent none style to make the button clickable again + this.modalOpener.style.pointerEvents = ''; + this.modalOpener = null; + $modal.removeClass('active'); // Using `setTimeout` here to let the transition finish setTimeout(function () {