1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Enable multiple submit buttons for Active Storage forms

This commit is contained in:
Chris Seelus 2018-07-22 01:48:25 +02:00
parent 87d5415f0a
commit 880f977925
2 changed files with 22 additions and 2 deletions

View file

@ -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;

View file

@ -2,16 +2,25 @@ import { DirectUploadsController } from "./direct_uploads_controller"
import { findElement } from "./helpers"
const processingAttribute = "data-direct-uploads-processing"
const submitButtonsByForm = new WeakMap
let started = false
export function start() {
if (!started) {
started = true
document.addEventListener("click", didClick, true)
document.addEventListener("submit", didSubmitForm)
document.addEventListener("ajax:before", didSubmitRemoteElement)
}
}
function didClick(event) {
const { target } = event
if (target.tagName == "INPUT" && target.type == "submit" && target.form) {
submitButtonsByForm.set(target.form, target)
}
}
function didSubmitForm(event) {
handleFormSubmissionEvent(event)
}
@ -49,7 +58,8 @@ function handleFormSubmissionEvent(event) {
}
function submitForm(form) {
let button = findElement(form, "input[type=submit]")
let button = submitButtonsByForm.get(form) || findElement(form, "input[type=submit]")
if (button) {
const { disabled } = button
button.disabled = false
@ -64,6 +74,7 @@ function submitForm(form) {
button.click()
form.removeChild(button)
}
submitButtonsByForm.delete(form)
}
function disable(input) {