js: Use a submit event's `submitter` property to identify the submit button

This commit is contained in:
Johannes Meyer 2024-11-04 15:31:21 +01:00
parent 48dcb051d1
commit eef276be93
2 changed files with 37 additions and 21 deletions

View File

@ -92,31 +92,39 @@
* @returns {boolean}
*/
Modal.prototype.onFormSubmit = function(event) {
var _this = event.data.self;
var $form = $(event.currentTarget).closest('form');
var $modal = $form.closest('#modal');
const _this = event.data.self;
const $form = $(event.currentTarget).closest('form');
const $modal = $form.closest('#modal');
var $button;
var $rememberedSubmittButton = $form.data('submitButton');
if (typeof $rememberedSubmittButton != 'undefined') {
if ($form.has($rememberedSubmittButton)) {
$button = $rememberedSubmittButton;
let $button;
if (typeof event.originalEvent !== 'undefined'
&& typeof event.originalEvent.submitter !== 'undefined'
&& event.originalEvent.submitter !== null) {
$button = $(event.originalEvent.submitter);
}
// Safari fallback only
const $rememberedSubmitButton = $form.data('submitButton');
if (typeof $rememberedSubmitButton !== 'undefined') {
if (typeof $button === 'undefined' && $form.has($rememberedSubmitButton)) {
$button = $rememberedSubmitButton;
}
$form.removeData('submitButton');
}
let $autoSubmittedBy;
if (! $autoSubmittedBy && event.detail && event.detail.submittedBy) {
if (typeof event.detail !== 'undefined' && "submittedBy" in event.detail) {
$autoSubmittedBy = $(event.detail.submittedBy);
}
// Prevent our other JS from running
$modal[0].dataset.noIcingaAjax = '';
var req = _this.icinga.loader.submitForm($form, $autoSubmittedBy, $button);
const req = _this.icinga.loader.submitForm($form, $autoSubmittedBy, $button);
req.addToHistory = false;
req.done(function (data, textStatus, req) {
var title = req.getResponseHeader('X-Icinga-Title');
const title = req.getResponseHeader('X-Icinga-Title');
if (!! title) {
_this.setTitle($modal, decodeURIComponent(title).replace(/\s::\s.*/, ''));
}

View File

@ -200,26 +200,34 @@
*
*/
submitForm: function (event, $autoSubmittedBy) {
var _this = event.data.self;
const _this = event.data.self;
// .closest is not required unless subelements to trigger this
var $form = $(event.currentTarget).closest('form');
const $form = $(event.currentTarget).closest('form');
if ($form.closest('[data-no-icinga-ajax]').length > 0) {
return true;
}
var $button;
var $rememberedSubmittButton = $form.data('submitButton');
if (typeof $rememberedSubmittButton != 'undefined') {
if ($form.has($rememberedSubmittButton)) {
$button = $rememberedSubmittButton;
let $button;
if (typeof event.originalEvent !== 'undefined'
&& typeof event.originalEvent.submitter !== 'undefined'
&& event.originalEvent.submitter !== null) {
$button = $(event.originalEvent.submitter);
}
// Safari fallback only
const $rememberedSubmitButton = $form.data('submitButton');
if (typeof $rememberedSubmitButton !== 'undefined') {
if (typeof $button === 'undefined' && $form.has($rememberedSubmitButton)) {
$button = $rememberedSubmitButton;
}
$form.removeData('submitButton');
}
if (typeof $button === 'undefined') {
var $el;
let $el;
if (typeof event.originalEvent !== 'undefined'
&& typeof event.originalEvent.explicitOriginalTarget === 'object') { // Firefox
@ -239,7 +247,7 @@
}
}
if (! $autoSubmittedBy && event.detail && event.detail.submittedBy) {
if (! $autoSubmittedBy && typeof event.detail !== 'undefined' && "submittedBy" in event.detail) {
$autoSubmittedBy = $(event.detail.submittedBy);
}