// the confirm action opens front-dialog Turbo.config.forms.confirm = (content) => { const dialog = document.getElementById('front-dialog') const dialogContent = dialog.querySelector('[data-dialog-content]') dialogContent.innerHTML = content dialog.showModal() return new Promise((resolve) => { dialog.addEventListener( 'close', () => { resolve(dialog.returnValue == 'confirm') }, { once: true }) }) } Turbo.config.forms.showModal = (dialogId) => { const dialog = document.getElementById(dialogId) if (dialog) dialog.showModal() else console.warn(`dialog id=<${dialogId}> not found!`) } document.addEventListener('turbo:submit-start', (e) => { const dialogId = e.explicitOriginalTarget.dataset.turboShowModal if (dialogId) { e.detail.formSubmission.stop() Turbo.config.forms.showModal(dialogId) } }) Turbo.config.forms.closeModal = (dialogId) => { console.log('closeModal called', dialogId) } document.addEventListener('turbo:submit-start', (e) => { const dialogId = e.explicitOriginalTarget.dataset.turboCloseModal if (dialogId) { e.detail.formSubmission.stop() Turbo.config.forms.closeModal(dialogId) } })