aboutsummaryrefslogtreecommitdiffstats
path: root/apps/settings/src/components/UserList.vue
diff options
context:
space:
mode:
Diffstat (limited to 'apps/settings/src/components/UserList.vue')
-rw-r--r--apps/settings/src/components/UserList.vue171
1 files changed, 95 insertions, 76 deletions
diff --git a/apps/settings/src/components/UserList.vue b/apps/settings/src/components/UserList.vue
index 6aa61ccf8da..d2ab07dae50 100644
--- a/apps/settings/src/components/UserList.vue
+++ b/apps/settings/src/components/UserList.vue
@@ -21,7 +21,11 @@
-->
<template>
- <div id="app-content" class="user-list-grid" @scroll.passive="onScroll">
+ <table id="app-content"
+ role="grid"
+ :aria-label="t('settings', 'User\'s table')"
+ class="user-list-grid"
+ @scroll.passive="onScroll">
<NcModal v-if="showConfig.showNewUserForm" size="small" @close="closeModal">
<form id="new-user"
:disabled="loading.all"
@@ -152,85 +156,92 @@
</div>
</form>
</NcModal>
- <div id="grid-header"
- :class="{'sticky': scrolled && !showConfig.showNewUserForm}"
- class="row">
- <div id="headerAvatar" class="avatar" />
- <div id="headerName" class="name">
- <div class="subtitle">
- <strong>
- {{ t('settings', 'Display name') }}
- </strong>
- </div>
- {{ t('settings', 'Username') }}
- </div>
- <div id="headerPassword" class="password">
- {{ t('settings', 'Password') }}
- </div>
- <div id="headerAddress" class="mailAddress">
- {{ t('settings', 'Email') }}
- </div>
- <div id="headerGroups" class="groups">
- {{ t('settings', 'Groups') }}
- </div>
- <div v-if="subAdminsGroups.length>0 && settings.isAdmin"
- id="headerSubAdmins"
- class="subadmins">
- {{ t('settings', 'Group admin for') }}
- </div>
- <div id="headerQuota" class="quota">
- {{ t('settings', 'Quota') }}
- </div>
- <div v-if="showConfig.showLanguages"
- id="headerLanguages"
- class="languages">
- {{ t('settings', 'Language') }}
- </div>
+ <tbody>
+ <tr id="grid-header"
+ :class="{'sticky': scrolled && !showConfig.showNewUserForm}"
+ class="row">
+ <th id="headerAvatar" class="avatar">
+ <span class="hidden-visually"> {{ t('settings', 'Avatar') }} </span>
+ </th>
+ <th id="headerName" class="name">
+ <div class="subtitle">
+ <strong>
+ {{ t('settings', 'Display name') }}
+ </strong>
+ </div>
+ {{ t('settings', 'Username') }}
+ </th>
+ <th id="headerPassword" class="password">
+ {{ t('settings', 'Password') }}
+ </th>
+ <th id="headerAddress" class="mailAddress">
+ {{ t('settings', 'Email') }}
+ </th>
+ <th id="headerGroups" class="groups">
+ {{ t('settings', 'Groups') }}
+ </th>
+ <th v-if="subAdminsGroups.length>0 && settings.isAdmin"
+ id="headerSubAdmins"
+ class="subadmins">
+ {{ t('settings', 'Group admin for') }}
+ </th>
+ <th id="headerQuota" class="quota">
+ {{ t('settings', 'Quota') }}
+ </th>
+ <th v-if="showConfig.showLanguages"
+ id="headerLanguages"
+ class="languages">
+ {{ t('settings', 'Language') }}
+ </th>
- <div v-if="showConfig.showUserBackend || showConfig.showStoragePath"
- class="headerUserBackend userBackend">
- <div v-if="showConfig.showUserBackend" class="userBackend">
- {{ t('settings', 'User backend') }}
- </div>
- <div v-if="showConfig.showStoragePath"
- class="subtitle storageLocation">
- {{ t('settings', 'Storage location') }}
- </div>
- </div>
- <div v-if="showConfig.showLastLogin"
- class="headerLastLogin lastLogin">
- {{ t('settings', 'Last login') }}
- </div>
+ <th v-if="showConfig.showUserBackend || showConfig.showStoragePath"
+ class="headerUserBackend userBackend">
+ <div v-if="showConfig.showUserBackend" class="userBackend">
+ {{ t('settings', 'User backend') }}
+ </div>
+ <div v-if="showConfig.showStoragePath"
+ class="subtitle storageLocation">
+ {{ t('settings', 'Storage location') }}
+ </div>
+ </th>
+ <th v-if="showConfig.showLastLogin"
+ class="headerLastLogin lastLogin">
+ {{ t('settings', 'Last login') }}
+ </th>
- <div class="userActions" />
- </div>
+ <th class="userActions hidden-visually">
+ {{ t('settings', 'User actions') }}
+ </th>
+ </tr>
- <user-row v-for="user in filteredUsers"
- :key="user.id"
- :external-actions="externalActions"
- :groups="groups"
- :languages="languages"
- :quota-options="quotaOptions"
- :settings="settings"
- :show-config="showConfig"
- :sub-admins-groups="subAdminsGroups"
- :user="user"
- :is-dark-theme="isDarkTheme" />
- <InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">
- <div slot="spinner">
- <div class="users-icon-loading icon-loading" />
- </div>
- <div slot="no-more">
- <div class="users-list-end" />
- </div>
- <div slot="no-results">
- <div id="emptycontent">
- <div class="icon-contacts-dark" />
- <h2>{{ t('settings', 'No users in here') }}</h2>
+ <user-row v-for="user in filteredUsers"
+ :key="user.id"
+ :external-actions="externalActions"
+ :groups="groups"
+ :languages="languages"
+ :quota-options="quotaOptions"
+ :settings="settings"
+ :show-config="showConfig"
+ :sub-admins-groups="subAdminsGroups"
+ :user="user"
+ :is-dark-theme="isDarkTheme" />
+
+ <InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">
+ <div slot="spinner">
+ <div class="users-icon-loading icon-loading" />
+ </div>
+ <div slot="no-more">
+ <div class="users-list-end" />
</div>
- </div>
- </InfiniteLoading>
- </div>
+ <div slot="no-results">
+ <div id="emptycontent">
+ <div class="icon-contacts-dark" />
+ <h2>{{ t('settings', 'No users in here') }}</h2>
+ </div>
+ </div>
+ </InfiniteLoading>
+ </tbody>
+ </table>
</template>
<script>
@@ -642,4 +653,12 @@ export default {
* prevent it). */
width: 0;
}
+
+ #app-content tbody tr {
+ &:hover,
+ &:focus,
+ &:active {
+ background-color: var(--color-main-background);
+ }
+ }
</style>