aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/components/DashboardRepoList.vue
diff options
context:
space:
mode:
authorTyrone Yeh <tyrone_yeh@draytek.com>2023-06-03 02:39:07 +0800
committerGitHub <noreply@github.com>2023-06-02 18:39:07 +0000
commitb6d8d695dae2ae99368442be8d9b0ca2a6a281e1 (patch)
tree2c677817c3ae3f6bcaeb6cae6b7a06fa1fac0ce2 /web_src/js/components/DashboardRepoList.vue
parent72eedfb91584720da774909d3f078b7d515c9fdd (diff)
downloadgitea-b6d8d695dae2ae99368442be8d9b0ca2a6a281e1.tar.gz
gitea-b6d8d695dae2ae99368442be8d9b0ca2a6a281e1.zip
Add up and down arrows to selected lookup repositories (#24727)
Use up and down arrow key to select repositories ![image](https://github.com/go-gitea/gitea/assets/1255041/3f3bce64-86d9-4b37-994b-3d129ebf48d9) --------- Co-authored-by: silverwind <me@silverwind.io>
Diffstat (limited to 'web_src/js/components/DashboardRepoList.vue')
-rw-r--r--web_src/js/components/DashboardRepoList.vue46
1 files changed, 44 insertions, 2 deletions
diff --git a/web_src/js/components/DashboardRepoList.vue b/web_src/js/components/DashboardRepoList.vue
index 42396d36cb..ee7d805e77 100644
--- a/web_src/js/components/DashboardRepoList.vue
+++ b/web_src/js/components/DashboardRepoList.vue
@@ -17,7 +17,7 @@
</h4>
<div class="ui attached segment repos-search">
<div class="ui fluid right action left icon input" :class="{loading: isLoading}">
- <input @input="changeReposFilter(reposFilter)" v-model="searchQuery" ref="search" :placeholder="textSearchRepos">
+ <input @input="changeReposFilter(reposFilter)" v-model="searchQuery" ref="search" @keydown="reposFilterKeyControl" :placeholder="textSearchRepos">
<i class="icon gt-df gt-ac gt-jc"><svg-icon name="octicon-search" :size="16"/></i>
<div class="ui dropdown icon button" :title="textFilter">
<i class="icon gt-df gt-ac gt-jc gt-m-0"><svg-icon name="octicon-filter" :size="16"/></i>
@@ -70,7 +70,7 @@
</div>
<div v-if="repos.length" class="ui attached table segment gt-rounded-bottom">
<ul class="repo-owner-name-list">
- <li class="gt-df gt-ac" v-for="repo in repos" :key="repo.id">
+ <li class="gt-df gt-ac" v-for="repo, index in repos" :class="{'active': index === activeIndex}" :key="repo.id">
<a class="repo-list-link muted gt-df gt-ac gt-f1" :href="repo.link">
<svg-icon :name="repoIcon(repo)" :size="16" class-name="repo-list-icon"/>
<div class="text truncate">{{ repo.full_name }}</div>
@@ -215,6 +215,7 @@ const sfc = {
subUrl: appSubUrl,
...pageData.dashboardRepoList,
+ activeIndex: -1, // don't select anything at load, first cursor down will select
};
},
@@ -429,6 +430,43 @@ const sfc = {
statusColor(status) {
return commitStatus[status].color;
+ },
+
+ reposFilterKeyControl(e) {
+ switch (e.key) {
+ case 'Enter':
+ document.querySelector('.repo-owner-name-list li.active a')?.click();
+ break;
+ case 'ArrowUp':
+ if (this.activeIndex > 0) {
+ this.activeIndex--;
+ } else if (this.page > 1) {
+ this.changePage(this.page - 1);
+ this.activeIndex = this.searchLimit - 1;
+ }
+ break;
+ case 'ArrowDown':
+ if (this.activeIndex < this.repos.length - 1) {
+ this.activeIndex++;
+ } else if (this.page < this.finalPage) {
+ this.activeIndex = 0;
+ this.changePage(this.page + 1);
+ }
+ break;
+ case 'ArrowRight':
+ if (this.page < this.finalPage) {
+ this.changePage(this.page + 1);
+ }
+ break;
+ case 'ArrowLeft':
+ if (this.page > 1) {
+ this.changePage(this.page - 1);
+ }
+ break;
+ }
+ if (this.activeIndex === -1 || this.activeIndex > this.repos.length - 1) {
+ this.activeIndex = 0;
+ }
}
},
};
@@ -480,4 +518,8 @@ ul li:not(:last-child) {
margin-left: 1px;
margin-right: 3px;
}
+
+.repo-owner-name-list li.active {
+ background: var(--color-hover);
+}
</style>