From 57f99276c5acea845b70139f19d28dc0a47277f6 Mon Sep 17 00:00:00 2001 From: Pascal Wengerter Date: Fri, 28 May 2021 11:39:45 +0100 Subject: [PATCH 1/3] Focus breadcrumb on route change --- ...hancement-focus-breadcrumb-on-route-change | 7 ++++ .../src/mixins/accessibleBreadcrumb.js | 35 +++++++++++++++++++ packages/web-app-files/src/views/Personal.vue | 12 +++++-- .../web-app-files/src/views/PublicFiles.vue | 8 +++-- 4 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 changelog/unreleased/enhancement-focus-breadcrumb-on-route-change create mode 100644 packages/web-app-files/src/mixins/accessibleBreadcrumb.js diff --git a/changelog/unreleased/enhancement-focus-breadcrumb-on-route-change b/changelog/unreleased/enhancement-focus-breadcrumb-on-route-change new file mode 100644 index 00000000000..2c45716e9fd --- /dev/null +++ b/changelog/unreleased/enhancement-focus-breadcrumb-on-route-change @@ -0,0 +1,7 @@ +Enhancement: Focus breadcrumb on route change + +We now focus the current breadcrumb item when navigating to another page +and announce the amount of files and folders in the folder the user +has navigated to. + +https://github.com/owncloud/web/pull/5166 diff --git a/packages/web-app-files/src/mixins/accessibleBreadcrumb.js b/packages/web-app-files/src/mixins/accessibleBreadcrumb.js new file mode 100644 index 00000000000..09e258db27d --- /dev/null +++ b/packages/web-app-files/src/mixins/accessibleBreadcrumb.js @@ -0,0 +1,35 @@ +import last from 'lodash-es/last' +import { mapGetters } from 'vuex' + +export default { + computed: { + ...mapGetters('Files', ['activeFilesCount']) + }, + methods: { + accessibleBreadcrumb_focusAndAnnounceBreadcrumb() { + const activeBreadcrumb = last( + document.getElementById('files-breadcrumb').children[0].children + ) + const activeBreadcrumbItem = activeBreadcrumb.lastChild + + const announcement = this.$gettextInterpolate( + 'containing %{filesCount} files and %{folderCount} folders', + { filesCount: this.activeFilesCount.files, folderCount: this.activeFilesCount.folders } + ) + + const translatedHint = + this.activeFilesCount.folders > 0 || this.activeFilesCount.files > 0 + ? announcement + : this.$gettext('This folder has no content') + + document.querySelectorAll('.oc-breadcrumb-sr').forEach(el => el.remove()) + + const invisibleHint = document.createElement('span') + invisibleHint.className = 'oc-invisible-sr oc-breadcrumb-sr' + invisibleHint.innerHTML = translatedHint + + activeBreadcrumb.append(invisibleHint) + activeBreadcrumbItem.focus() + } + } +} diff --git a/packages/web-app-files/src/views/Personal.vue b/packages/web-app-files/src/views/Personal.vue index a79a6f70b9f..5eb574bea07 100644 --- a/packages/web-app-files/src/views/Personal.vue +++ b/packages/web-app-files/src/views/Personal.vue @@ -66,7 +66,8 @@ import { mapGetters, mapState, mapActions, mapMutations } from 'vuex' import isNil from 'lodash/isNil' -import FileActions from '../mixins/fileActions' +import MixinAccessibleBreadcrumb from '../mixins/accessibleBreadcrumb' +import MixinFileActions from '../mixins/fileActions' import MixinFilesListScrolling from '../mixins/filesListScrolling' import MixinFilesListPositioning from '../mixins/filesListPositioning' import MixinResources from '../mixins/resources' @@ -80,7 +81,13 @@ import NotFoundMessage from '../components/FilesLists/NotFoundMessage.vue' export default { components: { QuickActions, ListLoader, NoContentMessage, NotFoundMessage }, - mixins: [FileActions, MixinFilesListPositioning, MixinFilesListScrolling, MixinResources], + mixins: [ + MixinAccessibleBreadcrumb, + MixinFileActions, + MixinFilesListPositioning, + MixinFilesListScrolling, + MixinResources + ], data: () => ({ loading: true @@ -212,6 +219,7 @@ export default { this.adjustTableHeaderPosition() this.loading = false + this.accessibleBreadcrumb_focusAndAnnounceBreadcrumb() this.scrollToResourceFromRoute() }, diff --git a/packages/web-app-files/src/views/PublicFiles.vue b/packages/web-app-files/src/views/PublicFiles.vue index c06034aa9df..78f9e3e42c8 100644 --- a/packages/web-app-files/src/views/PublicFiles.vue +++ b/packages/web-app-files/src/views/PublicFiles.vue @@ -57,10 +57,11 @@