summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--public/js/index.js64
-rw-r--r--templates/user/dashboard/dashboard.tmpl29
2 files changed, 74 insertions, 19 deletions
diff --git a/public/js/index.js b/public/js/index.js
index 259980c3ca..b6438f296f 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -1671,12 +1671,46 @@ function initVueComponents(){
reposTotalCount: 0,
reposFilter: 'all',
searchQuery: '',
- isLoading: false
+ isLoading: false,
+ repoTypes: {
+ 'all': {
+ count: 0,
+ searchMode: '',
+ },
+ 'forks': {
+ count: 0,
+ searchMode: 'fork',
+ },
+ 'mirrors': {
+ count: 0,
+ searchMode: 'mirror',
+ },
+ 'sources': {
+ count: 0,
+ searchMode: 'source',
+ },
+ 'collaborative': {
+ count: 0,
+ searchMode: 'collaborative',
+ },
+ }
+ }
+ },
+
+ computed: {
+ showMoreReposLink: function() {
+ return this.repos.length > 0 && this.repos.length < this.repoTypes[this.reposFilter].count;
+ },
+ searchURL: function() {
+ return this.suburl + '/api/v1/repos/search?uid=' + this.uid + '&q=' + this.searchQuery + '&limit=' + this.searchLimit + '&mode=' + this.repoTypes[this.reposFilter].searchMode + (this.reposFilter !== 'all' ? '&exclusive=1' : '');
+ },
+ repoTypeCount: function() {
+ return this.repoTypes[this.reposFilter].count;
}
},
mounted: function() {
- this.searchRepos();
+ this.searchRepos(this.reposFilter);
var self = this;
Vue.nextTick(function() {
@@ -1691,6 +1725,9 @@ function initVueComponents(){
changeReposFilter: function(filter) {
this.reposFilter = filter;
+ this.repos = [];
+ this.repoTypes[filter].count = 0;
+ this.searchRepos(filter);
},
showRepo: function(repo, filter) {
@@ -1708,28 +1745,31 @@ function initVueComponents(){
}
},
- searchRepos: function() {
+ searchRepos: function(reposFilter) {
var self = this;
+
this.isLoading = true;
+
+ var searchedMode = this.repoTypes[reposFilter].searchMode;
+ var searchedURL = this.searchURL;
var searchedQuery = this.searchQuery;
- $.getJSON(this.searchURL(), function(result, textStatus, request) {
- if (searchedQuery == self.searchQuery) {
+
+ $.getJSON(searchedURL, function(result, textStatus, request) {
+ if (searchedURL == self.searchURL) {
self.repos = result.data;
- if (searchedQuery == "") {
- self.reposTotalCount = request.getResponseHeader('X-Total-Count');
+ var count = request.getResponseHeader('X-Total-Count');
+ if (searchedQuery === '' && searchedMode === '') {
+ self.reposTotalCount = count;
}
+ self.repoTypes[reposFilter].count = count;
}
}).always(function() {
- if (searchedQuery == self.searchQuery) {
+ if (searchedURL == self.searchURL) {
self.isLoading = false;
}
});
},
- searchURL: function() {
- return this.suburl + '/api/v1/repos/search?uid=' + this.uid + '&q=' + this.searchQuery + '&limit=' + this.searchLimit;
- },
-
repoClass: function(repo) {
if (repo.fork) {
return 'octicon octicon-repo-forked';
diff --git a/templates/user/dashboard/dashboard.tmpl b/templates/user/dashboard/dashboard.tmpl
index 8204c0b7e7..2ad4008bbf 100644
--- a/templates/user/dashboard/dashboard.tmpl
+++ b/templates/user/dashboard/dashboard.tmpl
@@ -43,15 +43,30 @@
</h4>
<div class="ui attached secondary segment repos-search">
<div class="ui fluid icon input" :class="{loading: isLoading}">
- <input @input="searchRepos" v-model="searchQuery" ref="search" placeholder="{{.i18n.Tr "home.search_repos"}}">
+ <input @input="searchRepos(reposFilter)" v-model="searchQuery" ref="search" placeholder="{{.i18n.Tr "home.search_repos"}}">
<i class="search icon"></i>
</div>
<div class="ui secondary tiny pointing borderless menu center aligned grid repos-filter">
- <a class="item" :class="{active: reposFilter === 'all'}" @click="changeReposFilter('all')">{{.i18n.Tr "all"}}</a>
- <a class="item" :class="{active: reposFilter === 'sources'}" @click="changeReposFilter('sources')">{{.i18n.Tr "sources"}}</a>
- <a class="item" :class="{active: reposFilter === 'forks'}" @click="changeReposFilter('forks')">{{.i18n.Tr "forks"}}</a>
- <a class="item" :class="{active: reposFilter === 'mirrors'}" @click="changeReposFilter('mirrors')">{{.i18n.Tr "mirrors"}}</a>
- <a class="item" :class="{active: reposFilter === 'collaborative'}" @click="changeReposFilter('collaborative')">{{.i18n.Tr "collaborative"}}</a>
+ <a class="item" :class="{active: reposFilter === 'all'}" @click="changeReposFilter('all')">
+ {{.i18n.Tr "all"}}
+ <div v-show="reposFilter === 'all'" class="ui circular mini grey label">${repoTypeCount}</div>
+ </a>
+ <a class="item" :class="{active: reposFilter === 'sources'}" @click="changeReposFilter('sources')">
+ {{.i18n.Tr "sources"}}
+ <div v-show="reposFilter === 'sources'" class="ui circular mini grey label">${repoTypeCount}</div>
+ </a>
+ <a class="item" :class="{active: reposFilter === 'forks'}" @click="changeReposFilter('forks')">
+ {{.i18n.Tr "forks"}}
+ <div v-show="reposFilter === 'forks'" class="ui circular mini grey label">${repoTypeCount}</div>
+ </a>
+ <a class="item" :class="{active: reposFilter === 'mirrors'}" @click="changeReposFilter('mirrors')">
+ {{.i18n.Tr "mirrors"}}
+ <div v-show="reposFilter === 'mirrors'" class="ui circular mini grey label">${repoTypeCount}</div>
+ </a>
+ <a class="item" :class="{active: reposFilter === 'collaborative'}" @click="changeReposFilter('collaborative')">
+ {{.i18n.Tr "collaborative"}}
+ <div v-show="reposFilter === 'collaborative'" class="ui circular mini grey label">${repoTypeCount}</div>
+ </a>
</div>
</div>
<div class="ui attached table segment">
@@ -65,7 +80,7 @@
</span>
</a>
</li>
- <li v-if="repos.length < reposTotalCount">
+ <li v-if="showMoreReposLink">
<a :href="moreReposLink">{{.i18n.Tr "home.show_more_repos"}}</a>
</li>
</ul>