From 880f977925601c3afe125274b5cc95e150341a9f Mon Sep 17 00:00:00 2001 From: Chris Seelus Date: Sun, 22 Jul 2018 01:48:25 +0200 Subject: Enable multiple submit buttons for Active Storage forms --- activestorage/app/assets/javascripts/activestorage.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'activestorage/app/assets/javascripts') diff --git a/activestorage/app/assets/javascripts/activestorage.js b/activestorage/app/assets/javascripts/activestorage.js index d3fd795a3a..8a51805960 100644 --- a/activestorage/app/assets/javascripts/activestorage.js +++ b/activestorage/app/assets/javascripts/activestorage.js @@ -855,14 +855,21 @@ return DirectUploadsController; }(); var processingAttribute = "data-direct-uploads-processing"; + var submitButtonsByForm = new WeakMap; var started = false; function start() { if (!started) { started = true; + document.addEventListener("click", didClick, true); document.addEventListener("submit", didSubmitForm); document.addEventListener("ajax:before", didSubmitRemoteElement); } } + function didClick(event) { + if (event.target.tagName == "INPUT" && event.target.type == "submit" && event.target.form) { + submitButtonsByForm.set(event.target.form, event.target); + } + } function didSubmitForm(event) { handleFormSubmissionEvent(event); } @@ -894,7 +901,8 @@ } } function submitForm(form) { - var button = findElement(form, "input[type=submit]"); + var button = submitButtonsByForm.get(form) || findElement(form, "input[type=submit]"); + if (button) { var _button = button, disabled = _button.disabled; button.disabled = false; @@ -909,6 +917,7 @@ button.click(); form.removeChild(button); } + submitButtonsByForm.delete(form); } function disable(input) { input.disabled = true; -- cgit v1.2.3