diff --git a/app/javascript/elements/download_button.js b/app/javascript/elements/download_button.js index 160fc770..2a4b6210 100644 --- a/app/javascript/elements/download_button.js +++ b/app/javascript/elements/download_button.js @@ -5,6 +5,12 @@ export default targetable(class extends HTMLElement { connectedCallback () { this.addEventListener('click', () => this.downloadFiles()) + this.addEventListener('keydown', (e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault() + this.downloadFiles() + } + }) } toggleState () { diff --git a/app/javascript/elements/modal_button.js b/app/javascript/elements/modal_button.js new file mode 100644 index 00000000..0dbc75a8 --- /dev/null +++ b/app/javascript/elements/modal_button.js @@ -0,0 +1,18 @@ +export default class extends HTMLElement { + connectedCallback () { + const dialog = document.getElementById(this.dataset.target) + + this.querySelector('button').addEventListener('click', () => { + if (dialog) { + dialog.inert = false + dialog.showModal() + } + }) + + if (dialog) { + dialog.addEventListener('close', () => { + dialog.inert = true + }) + } + } +} diff --git a/app/javascript/elements/scroll_buttons.js b/app/javascript/elements/scroll_buttons.js index 6525adf9..09e4796e 100644 --- a/app/javascript/elements/scroll_buttons.js +++ b/app/javascript/elements/scroll_buttons.js @@ -47,11 +47,13 @@ export default class extends HTMLElement { this.classList.remove('hidden', '-translate-y-10', 'opacity-0') this.classList.add('translate-y-0', 'opacity-100') + this.querySelectorAll('[tabindex]').forEach((el) => { el.tabIndex = 0 }) } hideButtons () { this.classList.remove('translate-y-0', 'opacity-100') this.classList.add('-translate-y-10', 'opacity-0') + this.querySelectorAll('[tabindex]').forEach((el) => { el.tabIndex = -1 }) setTimeout(() => { if (this.classList.contains('-translate-y-10')) { diff --git a/app/javascript/form.js b/app/javascript/form.js index f8561dc0..c8d5790e 100644 --- a/app/javascript/form.js +++ b/app/javascript/form.js @@ -7,6 +7,7 @@ import FetchForm from './elements/fetch_form' import ScrollButtons from './elements/scroll_buttons' import PageContainer from './elements/page_container' import SubmitForm from './elements/submit_form' +import ModalButton from './elements/modal_button' const safeRegisterElement = (name, element, options = {}) => !window.customElements.get(name) && window.customElements.define(name, element, options) @@ -16,6 +17,7 @@ safeRegisterElement('fetch-form', FetchForm) safeRegisterElement('scroll-buttons', ScrollButtons) safeRegisterElement('page-container', PageContainer) safeRegisterElement('submit-form', SubmitForm) +safeRegisterElement('modal-button', ModalButton) safeRegisterElement('submission-form', class extends HTMLElement { connectedCallback () { this.appElem = document.createElement('div') diff --git a/app/javascript/submission_form/area.vue b/app/javascript/submission_form/area.vue index affd57a6..a3e83b62 100644 --- a/app/javascript/submission_form/area.vue +++ b/app/javascript/submission_form/area.vue @@ -1,9 +1,14 @@ diff --git a/app/javascript/submission_form/verification_step.vue b/app/javascript/submission_form/verification_step.vue index 0e0bb767..59ae6c4c 100644 --- a/app/javascript/submission_form/verification_step.vue +++ b/app/javascript/submission_form/verification_step.vue @@ -30,6 +30,7 @@