From 0094cbb7d1ba2deb7f3fea3f65e140dc5c8ff3ac Mon Sep 17 00:00:00 2001
From: Agate
Date: Fri, 3 Jul 2020 16:07:44 +0200
Subject: [PATCH] Fix #1128: Lock focus in modals to improve accessibility
---
changes/changelog.d/1121.enhancement | 1 +
front/package.json | 1 +
front/src/components/Queue.vue | 5 ++++-
front/src/components/SetInstanceModal.vue | 2 +-
front/src/components/ShortcutsModal.vue | 2 +-
front/src/components/auth/LoginForm.vue | 3 +--
front/src/components/common/DangerousButton.vue | 8 ++++----
front/src/components/moderation/FilterModal.vue | 4 ++--
front/src/components/moderation/ReportModal.vue | 2 +-
front/src/components/semantic/Modal.vue | 12 +++++++++++-
front/yarn.lock | 13 +++++++++++++
11 files changed, 40 insertions(+), 13 deletions(-)
create mode 100644 changes/changelog.d/1121.enhancement
diff --git a/changes/changelog.d/1121.enhancement b/changes/changelog.d/1121.enhancement
new file mode 100644
index 000000000..188865c94
--- /dev/null
+++ b/changes/changelog.d/1121.enhancement
@@ -0,0 +1 @@
+Use semantic headers for accessibility (#1121)
\ No newline at end of file
diff --git a/front/package.json b/front/package.json
index 4a85f6469..86540e149 100644
--- a/front/package.json
+++ b/front/package.json
@@ -20,6 +20,7 @@
"core-js": "^3.6.4",
"diff": "^4.0.1",
"django-channels": "^1.1.6",
+ "focus-trap": "^5.1.0",
"fomantic-ui-css": "^2.8.3",
"howler": "^2.0.14",
"js-logger": "^1.4.1",
diff --git a/front/src/components/Queue.vue b/front/src/components/Queue.vue
index 4becb11f3..0813291af 100644
--- a/front/src/components/Queue.vue
+++ b/front/src/components/Queue.vue
@@ -209,7 +209,7 @@ import $ from 'jquery'
import moment from "moment"
import lodash from '@/lodash'
import time from "@/utils/time"
-
+import createFocusTrap from 'focus-trap'
import store from "@/store"
export default {
@@ -224,11 +224,14 @@ export default {
showVolume: false,
isShuffling: false,
tracksChangeBuffer: null,
+ focusTrap: null,
time
}
},
mounted () {
let self = this
+ this.focusTrap = createFocusTrap(this.$el, {allowOutsideClick: () => { return true }})
+ this.focusTrap.activate()
this.$nextTick(() => {
setTimeout(() => {
this.scrollToCurrent()
diff --git a/front/src/components/SetInstanceModal.vue b/front/src/components/SetInstanceModal.vue
index 618a16a20..2e5c24bc2 100644
--- a/front/src/components/SetInstanceModal.vue
+++ b/front/src/components/SetInstanceModal.vue
@@ -35,7 +35,7 @@
diff --git a/front/src/components/ShortcutsModal.vue b/front/src/components/ShortcutsModal.vue
index 017cdc977..c88bfb715 100644
--- a/front/src/components/ShortcutsModal.vue
+++ b/front/src/components/ShortcutsModal.vue
@@ -36,7 +36,7 @@
diff --git a/front/src/components/auth/LoginForm.vue b/front/src/components/auth/LoginForm.vue
index 3b18fbc29..f0591a538 100644
--- a/front/src/components/auth/LoginForm.vue
+++ b/front/src/components/auth/LoginForm.vue
@@ -25,7 +25,6 @@
You will be redirected to %{ domain } to authenticate.
-