From 5e179a35b23282c4613582755de06a91f6991309 Mon Sep 17 00:00:00 2001
From: zeroinformatique
Date: Sun, 18 Oct 2020 00:22:04 +0200
Subject: viewer: accessibility: set focus on the main area (#273)
github: resolves #177---
viewer/src/views/MainLayout.vue | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/viewer/src/views/MainLayout.vue b/viewer/src/views/MainLayout.vue
index 6ef9a3b..9cd518b 100644
--- a/viewer/src/views/MainLayout.vue
+++ b/viewer/src/views/MainLayout.vue
@@ -22,7 +22,7 @@
-
+
@@ -43,6 +43,10 @@ export default class MainLayout extends Vue {
isLoading: boolean = true;
scrollPositions: ScrollPosition = {};
+ get contentDiv() {
+ return this.content.$el as HTMLDivElement;
+ }
+
mounted() {
history.replaceState({ ldgallery: "ENTRYPOINT" }, "");
this.fetchGalleryItems();
@@ -53,11 +57,15 @@ export default class MainLayout extends Vue {
document.body.removeEventListener("fullscreenchange", this.onFullscreenChange);
}
+ moveFocusToContentDiv() {
+ setTimeout(() => this.contentDiv.focus());
+ }
+
@Watch("$route")
routeChanged(newRoute: Route, oldRoute: Route) {
- const el = this.content.$el;
- this.scrollPositions[oldRoute.path] = el.scrollTop;
- this.$nextTick(() => (el.scrollTop = this.scrollPositions[newRoute.path]));
+ this.scrollPositions[oldRoute.path] = this.contentDiv.scrollTop;
+ this.$nextTick(() => (this.contentDiv.scrollTop = this.scrollPositions[newRoute.path]));
+ this.moveFocusToContentDiv();
}
fetchGalleryItems() {
@@ -66,6 +74,7 @@ export default class MainLayout extends Vue {
.fetchConfig()
.then(this.$uiStore.initFromConfig)
.then(this.$galleryStore.fetchGalleryItems)
+ .then(this.moveFocusToContentDiv)
.finally(() => (this.isLoading = false))
.catch(this.displayError);
}
@@ -130,6 +139,9 @@ html {
left: var(--layout-left);
z-index: 3;
overflow-x: hidden;
+ &:focus {
+ outline: none;
+ }
}
}
.fullscreen {
--
cgit v1.2.3