import { DirectUploadsController } from "./direct_uploads_controller" import { findElement } from "./helpers" const processingAttribute = "data-direct-uploads-processing" let started = false export function start() { if (!started) { started = true document.addEventListener("submit", didSubmitForm) document.addEventListener("ajax:before", didSubmitRemoteElement) } } function didSubmitForm(event) { handleFormSubmissionEvent(event) } function didSubmitRemoteElement(event) { if (event.target.tagName == "FORM") { handleFormSubmissionEvent(event) } } function handleFormSubmissionEvent(event) { const form = event.target if (form.hasAttribute(processingAttribute)) { event.preventDefault() return } const controller = new DirectUploadsController(form) const { inputs } = controller if (inputs.length) { event.preventDefault() form.setAttribute(processingAttribute, "") inputs.forEach(disable) controller.start(error => { form.removeAttribute(processingAttribute) if (error) { inputs.forEach(enable) } else { submitForm(form) } }) } } function submitForm(form) { let button = findElement(form, "input[type=submit]") if (button) { const { disabled } = button button.disabled = false button.click() button.disabled = disabled } else { button = document.createElement("input") button.type = "submit" button.style = "display:none" form.appendChild(button) button.click() form.removeChild(button) } } function disable(input) { input.disabled = true } function enable(input) { input.disabled = false }