Skip to content

Commit cd1b548

Browse files
authored
Refactor pagination (#33037)
I am sure the simple approach should work, let's try it in 1.24 Follow #29834 and #29841
1 parent 1dbf0d7 commit cd1b548

25 files changed

+33
-151
lines changed

models/user/search.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ type SearchUserOptions struct {
3939
IsTwoFactorEnabled optional.Option[bool]
4040
IsProhibitLogin optional.Option[bool]
4141
IncludeReserved bool
42-
43-
ExtraParamStrings map[string]string
4442
}
4543

4644
func (opts *SearchUserOptions) toSearchQueryBase(ctx context.Context) *xorm.Session {

routers/web/admin/emails.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func Emails(ctx *context.Context) {
9494
ctx.Data["Emails"] = emails
9595

9696
pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
97-
pager.SetDefaultParams(ctx)
97+
pager.AddParamFromRequest(ctx.Req)
9898
ctx.Data["Page"] = pager
9999

100100
ctx.HTML(http.StatusOK, tplEmails)

routers/web/admin/packages.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,7 @@ func Packages(ctx *context.Context) {
7777
ctx.Data["TotalUnreferencedBlobSize"] = totalUnreferencedBlobSize
7878

7979
pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
80-
pager.AddParamString("q", query)
81-
pager.AddParamString("type", packageType)
82-
pager.AddParamString("sort", sort)
80+
pager.AddParamFromRequest(ctx.Req)
8381
ctx.Data["Page"] = pager
8482

8583
ctx.HTML(http.StatusOK, tplPackagesList)

routers/web/admin/repos.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package admin
55

66
import (
7-
"fmt"
87
"net/http"
98
"net/url"
109
"strings"
@@ -84,8 +83,7 @@ func UnadoptedRepos(ctx *context.Context) {
8483

8584
if !doSearch {
8685
pager := context.NewPagination(0, opts.PageSize, opts.Page, 5)
87-
pager.SetDefaultParams(ctx)
88-
pager.AddParamString("search", fmt.Sprint(doSearch))
86+
pager.AddParamFromRequest(ctx.Req)
8987
ctx.Data["Page"] = pager
9088
ctx.HTML(http.StatusOK, tplUnadoptedRepos)
9189
return
@@ -99,8 +97,7 @@ func UnadoptedRepos(ctx *context.Context) {
9997
}
10098
ctx.Data["Dirs"] = repoNames
10199
pager := context.NewPagination(count, opts.PageSize, opts.Page, 5)
102-
pager.SetDefaultParams(ctx)
103-
pager.AddParamString("search", fmt.Sprint(doSearch))
100+
pager.AddParamFromRequest(ctx.Req)
104101
ctx.Data["Page"] = pager
105102
ctx.HTML(http.StatusOK, tplUnadoptedRepos)
106103
}

routers/web/admin/users.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,12 @@ func Users(ctx *context.Context) {
4747
ctx.Data["Title"] = ctx.Tr("admin.users")
4848
ctx.Data["PageIsAdminUsers"] = true
4949

50-
extraParamStrings := map[string]string{}
5150
statusFilterKeys := []string{"is_active", "is_admin", "is_restricted", "is_2fa_enabled", "is_prohibit_login"}
5251
statusFilterMap := map[string]string{}
5352
for _, filterKey := range statusFilterKeys {
5453
paramKey := "status_filter[" + filterKey + "]"
5554
paramVal := ctx.FormString(paramKey)
5655
statusFilterMap[filterKey] = paramVal
57-
if paramVal != "" {
58-
extraParamStrings[paramKey] = paramVal
59-
}
6056
}
6157

6258
sortType := ctx.FormString("sort")
@@ -82,7 +78,6 @@ func Users(ctx *context.Context) {
8278
IsTwoFactorEnabled: util.OptionalBoolParse(statusFilterMap["is_2fa_enabled"]),
8379
IsProhibitLogin: util.OptionalBoolParse(statusFilterMap["is_prohibit_login"]),
8480
IncludeReserved: true, // administrator needs to list all accounts include reserved, bot, remote ones
85-
ExtraParamStrings: extraParamStrings,
8681
}, tplUsers)
8782
}
8883

routers/web/explore/code.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,7 @@ func Code(ctx *context.Context) {
137137
ctx.Data["SearchResultLanguages"] = searchResultLanguages
138138

139139
pager := context.NewPagination(total, setting.UI.RepoSearchPagingNum, page, 5)
140-
pager.SetDefaultParams(ctx)
141-
pager.AddParamString("l", language)
140+
pager.AddParamFromRequest(ctx.Req)
142141
ctx.Data["Page"] = pager
143142

144143
ctx.HTML(http.StatusOK, tplExploreCode)

routers/web/explore/repo.go

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package explore
55

66
import (
7-
"fmt"
87
"net/http"
98

109
"code.gitea.io/gitea/models/db"
@@ -139,25 +138,7 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
139138
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
140139

141140
pager := context.NewPagination(int(count), opts.PageSize, page, 5)
142-
pager.SetDefaultParams(ctx)
143-
pager.AddParamString("topic", fmt.Sprint(topicOnly))
144-
pager.AddParamString("language", language)
145-
pager.AddParamString(relevantReposOnlyParam, fmt.Sprint(opts.OnlyShowRelevant))
146-
if archived.Has() {
147-
pager.AddParamString("archived", fmt.Sprint(archived.Value()))
148-
}
149-
if fork.Has() {
150-
pager.AddParamString("fork", fmt.Sprint(fork.Value()))
151-
}
152-
if mirror.Has() {
153-
pager.AddParamString("mirror", fmt.Sprint(mirror.Value()))
154-
}
155-
if template.Has() {
156-
pager.AddParamString("template", fmt.Sprint(template.Value()))
157-
}
158-
if private.Has() {
159-
pager.AddParamString("private", fmt.Sprint(private.Value()))
160-
}
141+
pager.AddParamFromRequest(ctx.Req)
161142
ctx.Data["Page"] = pager
162143

163144
ctx.HTML(http.StatusOK, opts.TplName)

routers/web/explore/user.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,7 @@ func RenderUserSearch(ctx *context.Context, opts *user_model.SearchUserOptions,
120120
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
121121

122122
pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
123-
pager.SetDefaultParams(ctx)
124-
for paramKey, paramVal := range opts.ExtraParamStrings {
125-
pager.AddParamString(paramKey, paramVal)
126-
}
123+
pager.AddParamFromRequest(ctx.Req)
127124
ctx.Data["Page"] = pager
128125

129126
ctx.HTML(http.StatusOK, tplName)

routers/web/org/home.go

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package org
55

66
import (
7-
"fmt"
87
"net/http"
98
"path"
109
"strings"
@@ -146,23 +145,7 @@ func home(ctx *context.Context, viewRepositories bool) {
146145
ctx.Data["Total"] = count
147146

148147
pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5)
149-
pager.SetDefaultParams(ctx)
150-
pager.AddParamString("language", language)
151-
if archived.Has() {
152-
pager.AddParamString("archived", fmt.Sprint(archived.Value()))
153-
}
154-
if fork.Has() {
155-
pager.AddParamString("fork", fmt.Sprint(fork.Value()))
156-
}
157-
if mirror.Has() {
158-
pager.AddParamString("mirror", fmt.Sprint(mirror.Value()))
159-
}
160-
if template.Has() {
161-
pager.AddParamString("template", fmt.Sprint(template.Value()))
162-
}
163-
if private.Has() {
164-
pager.AddParamString("private", fmt.Sprint(private.Value()))
165-
}
148+
pager.AddParamFromRequest(ctx.Req)
166149
ctx.Data["Page"] = pager
167150

168151
ctx.HTML(http.StatusOK, tplOrgHome)

routers/web/org/projects.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ func Projects(ctx *context.Context) {
120120
}
121121

122122
pager := context.NewPagination(int(total), setting.UI.IssuePagingNum, page, numPages)
123-
pager.AddParamString("state", fmt.Sprint(ctx.Data["State"]))
123+
pager.AddParamFromRequest(ctx.Req)
124124
ctx.Data["Page"] = pager
125125

126126
ctx.Data["CanWriteProjects"] = canWriteProjects(ctx)

routers/web/repo/actions/actions.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package actions
66
import (
77
"bytes"
88
stdCtx "context"
9-
"fmt"
109
"net/http"
1110
"slices"
1211
"strings"
@@ -262,10 +261,7 @@ func List(ctx *context.Context) {
262261
ctx.Data["StatusInfoList"] = actions_model.GetStatusInfoList(ctx)
263262

264263
pager := context.NewPagination(int(total), opts.PageSize, opts.Page, 5)
265-
pager.SetDefaultParams(ctx)
266-
pager.AddParamString("workflow", workflowID)
267-
pager.AddParamString("actor", fmt.Sprint(actorID))
268-
pager.AddParamString("status", fmt.Sprint(status))
264+
pager.AddParamFromRequest(ctx.Req)
269265
ctx.Data["Page"] = pager
270266
ctx.Data["HasWorkflowsOrRuns"] = len(workflows) > 0 || len(runs) > 0
271267

routers/web/repo/branch.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func Branches(ctx *context.Context) {
8787
ctx.Data["CommitStatuses"] = commitStatuses
8888
ctx.Data["DefaultBranchBranch"] = defaultBranch
8989
pager := context.NewPagination(int(branchesCount), pageSize, page, 5)
90-
pager.SetDefaultParams(ctx)
90+
pager.AddParamFromRequest(ctx.Req)
9191
ctx.Data["Page"] = pager
9292
ctx.HTML(http.StatusOK, tplBranch)
9393
}

routers/web/repo/commit.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func Commits(ctx *context.Context) {
101101
ctx.Data["CommitCount"] = commitsCount
102102

103103
pager := context.NewPagination(int(commitsCount), pageSize, page, 5)
104-
pager.SetDefaultParams(ctx)
104+
pager.AddParamFromRequest(ctx.Req)
105105
ctx.Data["Page"] = pager
106106
ctx.HTML(http.StatusOK, tplCommits)
107107
}
@@ -139,7 +139,6 @@ func Graph(ctx *context.Context) {
139139
if err != nil {
140140
log.Warn("GetCommitGraphsCount error for generate graph exclude prs: %t branches: %s in %-v, Will Ignore branches and try again. Underlying Error: %v", hidePRRefs, branches, ctx.Repo.Repository, err)
141141
realBranches = []string{}
142-
branches = []string{}
143142
graphCommitsCount, err = ctx.Repo.GetCommitGraphsCount(ctx, hidePRRefs, realBranches, files)
144143
if err != nil {
145144
ctx.ServerError("GetCommitGraphsCount", err)
@@ -175,14 +174,7 @@ func Graph(ctx *context.Context) {
175174
ctx.Data["CommitCount"] = commitsCount
176175

177176
paginator := context.NewPagination(int(graphCommitsCount), setting.UI.GraphMaxCommitNum, page, 5)
178-
paginator.AddParamString("mode", mode)
179-
paginator.AddParamString("hide-pr-refs", fmt.Sprint(hidePRRefs))
180-
for _, branch := range branches {
181-
paginator.AddParamString("branch", branch)
182-
}
183-
for _, file := range files {
184-
paginator.AddParamString("file", file)
185-
}
177+
paginator.AddParamFromRequest(ctx.Req)
186178
ctx.Data["Page"] = paginator
187179
if ctx.FormBool("div-only") {
188180
ctx.HTML(http.StatusOK, tplGraphDiv)
@@ -262,7 +254,7 @@ func FileHistory(ctx *context.Context) {
262254
ctx.Data["CommitCount"] = commitsCount
263255

264256
pager := context.NewPagination(int(commitsCount), setting.Git.CommitsRangeSize, page, 5)
265-
pager.SetDefaultParams(ctx)
257+
pager.AddParamFromRequest(ctx.Req)
266258
ctx.Data["Page"] = pager
267259
ctx.HTML(http.StatusOK, tplCommits)
268260
}

routers/web/repo/milestone.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package repo
55

66
import (
7-
"fmt"
87
"net/http"
98
"net/url"
109

@@ -93,8 +92,7 @@ func Milestones(ctx *context.Context) {
9392
ctx.Data["IsShowClosed"] = isShowClosed
9493

9594
pager := context.NewPagination(int(total), setting.UI.IssuePagingNum, page, 5)
96-
pager.AddParamString("state", fmt.Sprint(ctx.Data["State"]))
97-
pager.AddParamString("q", keyword)
95+
pager.AddParamFromRequest(ctx.Req)
9896
ctx.Data["Page"] = pager
9997

10098
ctx.HTML(http.StatusOK, tplMilestone)

routers/web/repo/packages.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ func Packages(ctx *context.Context) {
7070
ctx.Data["RepositoryAccessMap"] = map[int64]bool{ctx.Repo.Repository.ID: true} // There is only the current repository
7171

7272
pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5)
73-
pager.AddParamString("q", query)
74-
pager.AddParamString("type", packageType)
73+
pager.AddParamFromRequest(ctx.Req)
7574
ctx.Data["Page"] = pager
7675

7776
ctx.HTML(http.StatusOK, tplPackagesList)

routers/web/repo/projects.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func Projects(ctx *context.Context) {
115115
}
116116

117117
pager := context.NewPagination(total, setting.UI.IssuePagingNum, page, numPages)
118-
pager.AddParamString("state", fmt.Sprint(ctx.Data["State"]))
118+
pager.AddParamFromRequest(ctx.Req)
119119
ctx.Data["Page"] = pager
120120

121121
ctx.Data["CanWriteProjects"] = ctx.Repo.Permission.CanWrite(unit.TypeProjects)

routers/web/repo/release.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ func Releases(ctx *context.Context) {
186186

187187
numReleases := ctx.Data["NumReleases"].(int64)
188188
pager := context.NewPagination(int(numReleases), listOptions.PageSize, listOptions.Page, 5)
189-
pager.SetDefaultParams(ctx)
189+
pager.AddParamFromRequest(ctx.Req)
190190
ctx.Data["Page"] = pager
191191
ctx.HTML(http.StatusOK, tplReleasesList)
192192
}
@@ -240,7 +240,7 @@ func TagsList(ctx *context.Context) {
240240
ctx.Data["TagCount"] = count
241241

242242
pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
243-
pager.SetDefaultParams(ctx)
243+
pager.AddParamFromRequest(ctx.Req)
244244
ctx.Data["Page"] = pager
245245
ctx.Data["PageIsViewCode"] = !ctx.Repo.Repository.UnitEnabled(ctx, unit.TypeReleases)
246246
ctx.HTML(http.StatusOK, tplTagsList)

routers/web/repo/search.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,7 @@ func Search(ctx *context.Context) {
108108
ctx.Data["SearchResultLanguages"] = searchResultLanguages
109109

110110
pager := context.NewPagination(total, setting.UI.RepoSearchPagingNum, page, 5)
111-
pager.SetDefaultParams(ctx)
112-
pager.AddParamString("l", language)
111+
pager.AddParamFromRequest(ctx.Req)
113112
ctx.Data["Page"] = pager
114113

115114
ctx.HTML(http.StatusOK, tplSearch)

routers/web/repo/wiki.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -440,8 +440,7 @@ func renderRevisionPage(ctx *context.Context) (*git.Repository, *git.TreeEntry)
440440
ctx.Data["Commits"] = git_model.ConvertFromGitCommit(ctx, commitsHistory, ctx.Repo.Repository)
441441

442442
pager := context.NewPagination(int(commitsCount), setting.Git.CommitsRangeSize, page, 5)
443-
pager.SetDefaultParams(ctx)
444-
pager.AddParamString("action", "_revision")
443+
pager.AddParamFromRequest(ctx.Req)
445444
ctx.Data["Page"] = pager
446445

447446
return wikiRepo, entry

routers/web/user/code.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,7 @@ func CodeSearch(ctx *context.Context) {
121121
ctx.Data["SearchResultLanguages"] = searchResultLanguages
122122

123123
pager := context.NewPagination(total, setting.UI.RepoSearchPagingNum, page, 5)
124-
pager.SetDefaultParams(ctx)
125-
pager.AddParamString("l", language)
124+
pager.AddParamFromRequest(ctx.Req)
126125
ctx.Data["Page"] = pager
127126

128127
ctx.HTML(http.StatusOK, tplUserCode)

routers/web/user/home.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func Dashboard(ctx *context.Context) {
139139
ctx.Data["Feeds"] = feeds
140140

141141
pager := context.NewPagination(int(count), setting.UI.FeedPagingNum, page, 5)
142-
pager.AddParamString("date", date)
142+
pager.AddParamFromRequest(ctx.Req)
143143
ctx.Data["Page"] = pager
144144

145145
ctx.HTML(http.StatusOK, tplDashboard)
@@ -330,10 +330,7 @@ func Milestones(ctx *context.Context) {
330330
ctx.Data["IsShowClosed"] = isShowClosed
331331

332332
pager := context.NewPagination(pagerCount, setting.UI.IssuePagingNum, page, 5)
333-
pager.AddParamString("q", keyword)
334-
pager.AddParamString("repos", reposQuery)
335-
pager.AddParamString("sort", sortType)
336-
pager.AddParamString("state", fmt.Sprint(ctx.Data["State"]))
333+
pager.AddParamFromRequest(ctx.Req)
337334
ctx.Data["Page"] = pager
338335

339336
ctx.HTML(http.StatusOK, tplMilestones)

0 commit comments

Comments
 (0)