* Added repository search order by stars or forks. Added Forks column to admin repository list. Signed-off-by: Alexey Terentyev <axifnx@gmail.com> * Renamed search repo template Signed-off-by: Alexey Terentyev <axifnx@gmail.com>tags/v1.21.12.1
| @@ -152,6 +152,10 @@ const ( | |||
| SearchOrderBySizeReverse = "size DESC" | |||
| SearchOrderByID = "id ASC" | |||
| SearchOrderByIDReverse = "id DESC" | |||
| SearchOrderByStars = "num_stars ASC" | |||
| SearchOrderByStarsReverse = "num_stars DESC" | |||
| SearchOrderByForks = "num_forks ASC" | |||
| SearchOrderByForksReverse = "num_forks DESC" | |||
| ) | |||
| // SearchRepositoryByName takes keyword and part of repository name to search, | |||
| @@ -1272,7 +1272,7 @@ func GetUser(user *User) (bool, error) { | |||
| type SearchUserOptions struct { | |||
| Keyword string | |||
| Type UserType | |||
| OrderBy string | |||
| OrderBy SearchOrderBy | |||
| Page int | |||
| PageSize int // Can be smaller than or equal to setting.UI.ExplorePagingNum | |||
| IsActive util.OptionalBool | |||
| @@ -1322,7 +1322,7 @@ func SearchUsers(opts *SearchUserOptions) (users []*User, _ int64, _ error) { | |||
| users = make([]*User, 0, opts.PageSize) | |||
| return users, count, x.Where(cond). | |||
| Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). | |||
| OrderBy(opts.OrderBy). | |||
| OrderBy(opts.OrderBy.String()). | |||
| Find(&users) | |||
| } | |||
| @@ -693,6 +693,10 @@ issues.filter_sort.recentupdate = Recently updated | |||
| issues.filter_sort.leastupdate = Least recently updated | |||
| issues.filter_sort.mostcomment = Most commented | |||
| issues.filter_sort.leastcomment = Least commented | |||
| issues.filter_sort.moststars = Most stars | |||
| issues.filter_sort.feweststars = Fewest stars | |||
| issues.filter_sort.mostforks = Most forks | |||
| issues.filter_sort.fewestforks = Fewest forks | |||
| issues.action_open = Open | |||
| issues.action_close = Close | |||
| issues.action_label = Label | |||
| @@ -1359,6 +1363,7 @@ repos.name = Name | |||
| repos.private = Private | |||
| repos.watches = Watches | |||
| repos.stars = Stars | |||
| repos.forks = Forks | |||
| repos.issues = Issues | |||
| repos.size = Size | |||
| @@ -104,6 +104,14 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) { | |||
| orderBy = models.SearchOrderBySizeReverse | |||
| case "size": | |||
| orderBy = models.SearchOrderBySize | |||
| case "moststars": | |||
| orderBy = models.SearchOrderByStarsReverse | |||
| case "feweststars": | |||
| orderBy = models.SearchOrderByStars | |||
| case "mostforks": | |||
| orderBy = models.SearchOrderByForksReverse | |||
| case "fewestforks": | |||
| orderBy = models.SearchOrderByForks | |||
| default: | |||
| ctx.Data["SortType"] = "recentupdate" | |||
| orderBy = models.SearchOrderByRecentUpdated | |||
| @@ -164,26 +172,26 @@ func RenderUserSearch(ctx *context.Context, opts *models.SearchUserOptions, tplN | |||
| users []*models.User | |||
| count int64 | |||
| err error | |||
| orderBy string | |||
| orderBy models.SearchOrderBy | |||
| ) | |||
| ctx.Data["SortType"] = ctx.Query("sort") | |||
| switch ctx.Query("sort") { | |||
| case "newest": | |||
| orderBy = "id DESC" | |||
| orderBy = models.SearchOrderByIDReverse | |||
| case "oldest": | |||
| orderBy = "id ASC" | |||
| orderBy = models.SearchOrderByID | |||
| case "recentupdate": | |||
| orderBy = "updated_unix DESC" | |||
| orderBy = models.SearchOrderByRecentUpdated | |||
| case "leastupdate": | |||
| orderBy = "updated_unix ASC" | |||
| orderBy = models.SearchOrderByLeastUpdated | |||
| case "reversealphabetically": | |||
| orderBy = "name DESC" | |||
| orderBy = models.SearchOrderByAlphabeticallyReverse | |||
| case "alphabetically": | |||
| orderBy = "name ASC" | |||
| orderBy = models.SearchOrderByAlphabetically | |||
| default: | |||
| ctx.Data["SortType"] = "alphabetically" | |||
| orderBy = "name ASC" | |||
| orderBy = models.SearchOrderByAlphabetically | |||
| } | |||
| opts.Keyword = strings.Trim(ctx.Query("q"), " ") | |||
| @@ -125,6 +125,14 @@ func Profile(ctx *context.Context) { | |||
| orderBy = models.SearchOrderByAlphabeticallyReverse | |||
| case "alphabetically": | |||
| orderBy = models.SearchOrderByAlphabetically | |||
| case "moststars": | |||
| orderBy = models.SearchOrderByStarsReverse | |||
| case "feweststars": | |||
| orderBy = models.SearchOrderByStars | |||
| case "mostforks": | |||
| orderBy = models.SearchOrderByForksReverse | |||
| case "fewestforks": | |||
| orderBy = models.SearchOrderByForks | |||
| default: | |||
| ctx.Data["SortType"] = "recentupdate" | |||
| orderBy = models.SearchOrderByRecentUpdated | |||
| @@ -12,8 +12,6 @@ | |||
| <a class="{{if eq .SortType "reversealphabetically"}}active{{end}} item" href="{{$.Link}}?sort=reversealphabetically&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_alphabetically"}}</a> | |||
| <a class="{{if eq .SortType "recentupdate"}}active{{end}} item" href="{{$.Link}}?sort=recentupdate&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.recentupdate"}}</a> | |||
| <a class="{{if eq .SortType "leastupdate"}}active{{end}} item" href="{{$.Link}}?sort=leastupdate&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.leastupdate"}}</a> | |||
| <a class="{{if eq .SortType "size"}}active{{end}} item" href="{{$.Link}}?sort=size&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.by_size"}}</a> | |||
| <a class="{{if eq .SortType "reversesize"}}active{{end}} item" href="{{$.Link}}?sort=reversesize&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_by_size"}}</a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -7,7 +7,7 @@ | |||
| {{.i18n.Tr "admin.repos.repo_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}}) | |||
| </h4> | |||
| <div class="ui attached segment"> | |||
| {{template "admin/base/search" .}} | |||
| {{template "admin/repo/search" .}} | |||
| </div> | |||
| <div class="ui attached table segment"> | |||
| <table class="ui very basic striped table"> | |||
| @@ -19,6 +19,7 @@ | |||
| <th>{{.i18n.Tr "admin.repos.private"}}</th> | |||
| <th>{{.i18n.Tr "admin.repos.watches"}}</th> | |||
| <th>{{.i18n.Tr "admin.repos.stars"}}</th> | |||
| <th>{{.i18n.Tr "admin.repos.forks"}}</th> | |||
| <th>{{.i18n.Tr "admin.repos.issues"}}</th> | |||
| <th>{{.i18n.Tr "admin.repos.size"}}</th> | |||
| <th>{{.i18n.Tr "admin.users.created"}}</th> | |||
| @@ -34,6 +35,7 @@ | |||
| <td><i class="fa fa{{if .IsPrivate}}-check{{end}}-square-o"></i></td> | |||
| <td>{{.NumWatches}}</td> | |||
| <td>{{.NumStars}}</td> | |||
| <td>{{.NumForks}}</td> | |||
| <td>{{.NumIssues}}</td> | |||
| <td>{{SizeFmt .Size}}</td> | |||
| <td><span title="{{.CreatedUnix.FormatLong}}">{{.CreatedUnix.FormatShort}}</span></td> | |||
| @@ -0,0 +1,29 @@ | |||
| <div class="ui right floated secondary filter menu"> | |||
| <!-- Sort --> | |||
| <div class="ui dropdown type jump item"> | |||
| <span class="text"> | |||
| {{.i18n.Tr "repo.issues.filter_sort"}} | |||
| <i class="dropdown icon"></i> | |||
| </span> | |||
| <div class="menu"> | |||
| <a class="{{if or (eq .SortType "oldest") (not .SortType)}}active{{end}} item" href="{{$.Link}}?sort=oldest&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.oldest"}}</a> | |||
| <a class="{{if eq .SortType "newest"}}active{{end}} item" href="{{$.Link}}?sort=newest&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.latest"}}</a> | |||
| <a class="{{if eq .SortType "alphabetically"}}active{{end}} item" href="{{$.Link}}?sort=alphabetically&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.alphabetically"}}</a> | |||
| <a class="{{if eq .SortType "reversealphabetically"}}active{{end}} item" href="{{$.Link}}?sort=reversealphabetically&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_alphabetically"}}</a> | |||
| <a class="{{if eq .SortType "recentupdate"}}active{{end}} item" href="{{$.Link}}?sort=recentupdate&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.recentupdate"}}</a> | |||
| <a class="{{if eq .SortType "leastupdate"}}active{{end}} item" href="{{$.Link}}?sort=leastupdate&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.filter_sort.leastupdate"}}</a> | |||
| <a class="{{if eq .SortType "moststars"}}active{{end}} item" href="{{$.Link}}?sort=moststars&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.moststars"}}</a> | |||
| <a class="{{if eq .SortType "feweststars"}}active{{end}} item" href="{{$.Link}}?sort=feweststars&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.feweststars"}}</a> | |||
| <a class="{{if eq .SortType "mostforks"}}active{{end}} item" href="{{$.Link}}?sort=mostforks&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.mostforks"}}</a> | |||
| <a class="{{if eq .SortType "fewestforks"}}active{{end}} item" href="{{$.Link}}?sort=fewestforks&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.fewestforks"}}</a> | |||
| <a class="{{if eq .SortType "size"}}active{{end}} item" href="{{$.Link}}?sort=size&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.by_size"}}</a> | |||
| <a class="{{if eq .SortType "reversesize"}}active{{end}} item" href="{{$.Link}}?sort=reversesize&q={{$.Keyword}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_by_size"}}</a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <form class="ui form ignore-dirty" style="max-width: 90%"> | |||
| <div class="ui fluid action input"> | |||
| <input name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." autofocus> | |||
| <button class="ui blue button">{{.i18n.Tr "explore.search"}}</button> | |||
| </div> | |||
| </form> | |||
| @@ -0,0 +1,29 @@ | |||
| <div class="ui right floated secondary filter menu"> | |||
| <!-- Sort --> | |||
| <div class="ui right dropdown type jump item"> | |||
| <span class="text"> | |||
| {{.i18n.Tr "repo.issues.filter_sort"}} | |||
| <i class="dropdown icon"></i> | |||
| </span> | |||
| <div class="menu"> | |||
| <a class="{{if eq .SortType "newest"}}active{{end}} item" href="{{$.Link}}?sort=newest&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.latest"}}</a> | |||
| <a class="{{if eq .SortType "oldest"}}active{{end}} item" href="{{$.Link}}?sort=oldest&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.oldest"}}</a> | |||
| <a class="{{if eq .SortType "alphabetically"}}active{{end}} item" href="{{$.Link}}?sort=alphabetically&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.label.filter_sort.alphabetically"}}</a> | |||
| <a class="{{if eq .SortType "reversealphabetically"}}active{{end}} item" href="{{$.Link}}?sort=reversealphabetically&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.label.filter_sort.reverse_alphabetically"}}</a> | |||
| <a class="{{if eq .SortType "recentupdate"}}active{{end}} item" href="{{$.Link}}?sort=recentupdate&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.recentupdate"}}</a> | |||
| <a class="{{if eq .SortType "leastupdate"}}active{{end}} item" href="{{$.Link}}?sort=leastupdate&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.leastupdate"}}</a> | |||
| <a class="{{if eq .SortType "moststars"}}active{{end}} item" href="{{$.Link}}?sort=moststars&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.moststars"}}</a> | |||
| <a class="{{if eq .SortType "feweststars"}}active{{end}} item" href="{{$.Link}}?sort=feweststars&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.feweststars"}}</a> | |||
| <a class="{{if eq .SortType "mostforks"}}active{{end}} item" href="{{$.Link}}?sort=mostforks&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.mostforks"}}</a> | |||
| <a class="{{if eq .SortType "fewestforks"}}active{{end}} item" href="{{$.Link}}?sort=fewestforks&q={{$.Keyword}}&tab={{$.TabName}}">{{.i18n.Tr "repo.issues.filter_sort.fewestforks"}}</a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <form class="ui form ignore-dirty" style="max-width: 90%"> | |||
| <div class="ui fluid action input"> | |||
| <input name="q" value="{{.Keyword}}" placeholder="{{.i18n.Tr "explore.search"}}..." autofocus> | |||
| <input type="hidden" name="tab" value="{{$.TabName}}"> | |||
| <button class="ui blue button">{{.i18n.Tr "explore.search"}}</button> | |||
| </div> | |||
| </form> | |||
| <div class="ui divider"></div> | |||
| @@ -2,7 +2,7 @@ | |||
| <div class="explore repositories"> | |||
| {{template "explore/navbar" .}} | |||
| <div class="ui container"> | |||
| {{template "explore/search" .}} | |||
| {{template "explore/repo_search" .}} | |||
| {{template "explore/repo_list" .}} | |||
| {{template "base/paginate" .}} | |||
| </div> | |||
| @@ -100,12 +100,12 @@ | |||
| </div> | |||
| {{else if eq .TabName "stars"}} | |||
| <div class="stars"> | |||
| {{template "explore/search" .}} | |||
| {{template "explore/repo_search" .}} | |||
| {{template "explore/repo_list" .}} | |||
| {{template "base/paginate" .}} | |||
| </div> | |||
| {{else}} | |||
| {{template "explore/search" .}} | |||
| {{template "explore/repo_search" .}} | |||
| {{template "explore/repo_list" .}} | |||
| {{template "base/paginate" .}} | |||
| {{end}} | |||