export default class extends HTMLElement { connectedCallback () { this.showDialog() } showDialog () { const dialogId = `prompt-password-dialog-${Math.random().toString(36).slice(2)}` const inputId = `prompt-password-input-${Math.random().toString(36).slice(2)}` const dialog = document.createElement('div') dialog.setAttribute('role', 'dialog') dialog.setAttribute('aria-modal', 'true') dialog.setAttribute('aria-labelledby', `${dialogId}-title`) dialog.id = dialogId dialog.className = 'fixed inset-0 z-50 flex items-center justify-center bg-black/50' dialog.innerHTML = `

PDF Password Required

` document.body.append(dialog) const input = dialog.querySelector(`#${inputId}`) const cancelBtn = dialog.querySelector('[data-action="cancel"]') const confirmBtn = dialog.querySelector('[data-action="confirm"]') requestAnimationFrame(() => input.focus()) const confirm = () => { const passwordInput = document.createElement('input') passwordInput.type = 'hidden' passwordInput.name = 'password' passwordInput.value = input.value this.form.append(passwordInput) dialog.remove() this.form.requestSubmit() this.remove() } const cancel = () => { dialog.remove() this.remove() } confirmBtn.addEventListener('click', confirm) cancelBtn.addEventListener('click', cancel) input.addEventListener('keydown', (e) => { if (e.key === 'Enter') confirm() if (e.key === 'Escape') cancel() }) dialog.addEventListener('keydown', (e) => { if (e.key === 'Escape') cancel() }) } get form () { return this.closest('form') } }