mirror of
https://github.com/go-gitea/gitea
synced 2024-12-25 06:55:00 +01:00
Included tag search capabilities (#32045)
Resolves #31998 The first screenshot shows the tag page without any filter being applied: ![image](https://github.com/user-attachments/assets/eac0e51c-9e48-42b2-bb1c-a25896ca40cb) The second one, shows the page when the given filter returns no tag: ![image](https://github.com/user-attachments/assets/98df191e-1a7b-4947-b0ef-4987a0293c3e) The last one shows a single tag being filtered: ![image](https://github.com/user-attachments/assets/79c7e05e-8c86-4f06-b17e-15818b7b9291) Signed-off-by: Bruno Sofiato <bruno.sofiato@gmail.com>
This commit is contained in:
parent
f528df944b
commit
7dde3e6489
4 changed files with 34 additions and 8 deletions
|
@ -234,6 +234,7 @@ type FindReleasesOptions struct {
|
||||||
IsDraft optional.Option[bool]
|
IsDraft optional.Option[bool]
|
||||||
TagNames []string
|
TagNames []string
|
||||||
HasSha1 optional.Option[bool] // useful to find draft releases which are created with existing tags
|
HasSha1 optional.Option[bool] // useful to find draft releases which are created with existing tags
|
||||||
|
NamePattern optional.Option[string]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (opts FindReleasesOptions) ToConds() builder.Cond {
|
func (opts FindReleasesOptions) ToConds() builder.Cond {
|
||||||
|
@ -261,6 +262,11 @@ func (opts FindReleasesOptions) ToConds() builder.Cond {
|
||||||
cond = cond.And(builder.Eq{"sha1": ""})
|
cond = cond.And(builder.Eq{"sha1": ""})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if opts.NamePattern.Has() && opts.NamePattern.Value() != "" {
|
||||||
|
cond = cond.And(builder.Like{"lower_tag_name", strings.ToLower(opts.NamePattern.Value())})
|
||||||
|
}
|
||||||
|
|
||||||
return cond
|
return cond
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -178,6 +178,8 @@ code_search_by_git_grep = Current code search results are provided by "git grep"
|
||||||
package_kind = Search packages...
|
package_kind = Search packages...
|
||||||
project_kind = Search projects...
|
project_kind = Search projects...
|
||||||
branch_kind = Search branches...
|
branch_kind = Search branches...
|
||||||
|
tag_kind = Search tags...
|
||||||
|
tag_tooltip = Search for matching tags. Use '%' to match any sequence of numbers.
|
||||||
commit_kind = Search commits...
|
commit_kind = Search commits...
|
||||||
runner_kind = Search runners...
|
runner_kind = Search runners...
|
||||||
no_results = No matching results found.
|
no_results = No matching results found.
|
||||||
|
|
|
@ -214,6 +214,8 @@ func TagsList(ctx *context.Context) {
|
||||||
ctx.Data["HideBranchesInDropdown"] = true
|
ctx.Data["HideBranchesInDropdown"] = true
|
||||||
ctx.Data["CanCreateRelease"] = ctx.Repo.CanWrite(unit.TypeReleases) && !ctx.Repo.Repository.IsArchived
|
ctx.Data["CanCreateRelease"] = ctx.Repo.CanWrite(unit.TypeReleases) && !ctx.Repo.Repository.IsArchived
|
||||||
|
|
||||||
|
namePattern := ctx.FormTrim("q")
|
||||||
|
|
||||||
listOptions := db.ListOptions{
|
listOptions := db.ListOptions{
|
||||||
Page: ctx.FormInt("page"),
|
Page: ctx.FormInt("page"),
|
||||||
PageSize: ctx.FormInt("limit"),
|
PageSize: ctx.FormInt("limit"),
|
||||||
|
@ -233,6 +235,7 @@ func TagsList(ctx *context.Context) {
|
||||||
IncludeTags: true,
|
IncludeTags: true,
|
||||||
HasSha1: optional.Some(true),
|
HasSha1: optional.Some(true),
|
||||||
RepoID: ctx.Repo.Repository.ID,
|
RepoID: ctx.Repo.Repository.ID,
|
||||||
|
NamePattern: optional.Some(namePattern),
|
||||||
}
|
}
|
||||||
|
|
||||||
releases, err := db.Find[repo_model.Release](ctx, opts)
|
releases, err := db.Find[repo_model.Release](ctx, opts)
|
||||||
|
@ -241,14 +244,21 @@ func TagsList(ctx *context.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Data["Releases"] = releases
|
count, err := db.Count[repo_model.Release](ctx, opts)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("GetReleasesByRepoID", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
numTags := ctx.Data["NumTags"].(int64)
|
ctx.Data["Keyword"] = namePattern
|
||||||
pager := context.NewPagination(int(numTags), opts.PageSize, opts.Page, 5)
|
ctx.Data["Releases"] = releases
|
||||||
|
ctx.Data["TagCount"] = count
|
||||||
|
|
||||||
|
pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
|
||||||
pager.SetDefaultParams(ctx)
|
pager.SetDefaultParams(ctx)
|
||||||
ctx.Data["Page"] = pager
|
ctx.Data["Page"] = pager
|
||||||
|
|
||||||
ctx.Data["PageIsViewCode"] = !ctx.Repo.Repository.UnitEnabled(ctx, unit.TypeReleases)
|
ctx.Data["PageIsViewCode"] = !ctx.Repo.Repository.UnitEnabled(ctx, unit.TypeReleases)
|
||||||
|
|
||||||
ctx.HTML(http.StatusOK, tplTagsList)
|
ctx.HTML(http.StatusOK, tplTagsList)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,14 +4,19 @@
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
{{template "base/alert" .}}
|
{{template "base/alert" .}}
|
||||||
{{template "repo/release_tag_header" .}}
|
{{template "repo/release_tag_header" .}}
|
||||||
{{if .Releases}}
|
|
||||||
<h4 class="ui top attached header">
|
<h4 class="ui top attached header">
|
||||||
<div class="five wide column tw-flex tw-items-center">
|
<div class="five wide column tw-flex tw-items-center">
|
||||||
{{svg "octicon-tag" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.release.tags"}}
|
{{.TagCount}} {{ctx.Locale.Tr "repo.release.tags"}}
|
||||||
</div>
|
</div>
|
||||||
</h4>
|
</h4>
|
||||||
{{$canReadReleases := $.Permission.CanRead ctx.Consts.RepoUnitTypeReleases}}
|
{{$canReadReleases := $.Permission.CanRead ctx.Consts.RepoUnitTypeReleases}}
|
||||||
|
<div class="ui attached segment">
|
||||||
|
<form class="ignore-dirty" method="get">
|
||||||
|
{{template "shared/search/combo" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.tag_kind") "Tooltip" (ctx.Locale.Tr "search.tag_tooltip")}}
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
<div class="ui attached table segment">
|
<div class="ui attached table segment">
|
||||||
|
{{if .Releases}}
|
||||||
<table class="ui very basic striped fixed table single line" id="tags-table">
|
<table class="ui very basic striped fixed table single line" id="tags-table">
|
||||||
<tbody class="tag-list">
|
<tbody class="tag-list">
|
||||||
{{range $idx, $release := .Releases}}
|
{{range $idx, $release := .Releases}}
|
||||||
|
@ -57,9 +62,12 @@
|
||||||
{{end}}
|
{{end}}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
{{else}}
|
||||||
|
{{if .NumTags}}
|
||||||
|
<p class="tw-p-4">{{ctx.Locale.Tr "no_results_found"}}</p>
|
||||||
|
{{end}}
|
||||||
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{template "base/paginate" .}}
|
{{template "base/paginate" .}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue