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
}