import { isCrossDomain } from “../utils/ajax” import * as csrf from “../utils/csrf” import { stopEverything } from “../utils/event” import { isContentEditable } from “../utils/dom”
// Handles “data-method” on links such as: // <a href=“/users/5” data-method=“delete” rel=“nofollow” data-confirm=“Are you sure?”>Delete</a> const handleMethodWithRails = (rails) => function(e) {
const link = this const method = link.getAttribute("data-method") if (!method) { return } if (isContentEditable(this)) { return } const href = rails.href(link) const csrfToken = csrf.csrfToken() const csrfParam = csrf.csrfParam() const form = document.createElement("form") let formContent = `<input name='_method' value='${method}' type='hidden' />` if (csrfParam && csrfToken && !isCrossDomain(href)) { formContent += `<input name='${csrfParam}' value='${csrfToken}' type='hidden' />` } // Must trigger submit by click on a button, else "submit" event handler won't work! // https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit formContent += "<input type=\"submit\" />" form.method = "post" form.action = href form.target = link.target form.innerHTML = formContent form.style.display = "none" document.body.appendChild(form) form.querySelector("[type=\"submit\"]").click() stopEverything(e)
}
export { handleMethodWithRails }