diff --git a/routers/web/admin/repos.go b/routers/web/admin/repos.go index 5504037df04..0815879bb3e 100644 --- a/routers/web/admin/repos.go +++ b/routers/web/admin/repos.go @@ -4,6 +4,7 @@ package admin import ( + "fmt" "net/http" "net/url" "strings" @@ -84,7 +85,7 @@ func UnadoptedRepos(ctx *context.Context) { if !doSearch { pager := context.NewPagination(0, opts.PageSize, opts.Page, 5) pager.SetDefaultParams(ctx) - pager.AddParamIfExist("search", ctx.Data["search"]) + pager.AddParamString("search", fmt.Sprint(doSearch)) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplUnadoptedRepos) return @@ -98,7 +99,7 @@ func UnadoptedRepos(ctx *context.Context) { ctx.Data["Dirs"] = repoNames pager := context.NewPagination(count, opts.PageSize, opts.Page, 5) pager.SetDefaultParams(ctx) - pager.AddParamIfExist("search", ctx.Data["search"]) + pager.AddParamString("search", fmt.Sprint(doSearch)) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplUnadoptedRepos) } diff --git a/routers/web/explore/code.go b/routers/web/explore/code.go index c90174f9c21..ecd7c33e016 100644 --- a/routers/web/explore/code.go +++ b/routers/web/explore/code.go @@ -137,7 +137,7 @@ func Code(ctx *context.Context) { pager := context.NewPagination(total, setting.UI.RepoSearchPagingNum, page, 5) pager.SetDefaultParams(ctx) - pager.AddParamIfExist("l", ctx.Data["Language"]) + pager.AddParamString("l", language) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplExploreCode) diff --git a/routers/web/explore/repo.go b/routers/web/explore/repo.go index 2cc22c50cf1..66477a255cc 100644 --- a/routers/web/explore/repo.go +++ b/routers/web/explore/repo.go @@ -169,8 +169,8 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) { pager := context.NewPagination(int(count), opts.PageSize, page, 5) pager.SetDefaultParams(ctx) - pager.AddParamIfExist("topic", ctx.Data["TopicOnly"]) - pager.AddParamIfExist("language", ctx.Data["Language"]) + pager.AddParamString("topic", fmt.Sprint(topicOnly)) + pager.AddParamString("language", language) pager.AddParamString(relevantReposOnlyParam, fmt.Sprint(opts.OnlyShowRelevant)) ctx.Data["Page"] = pager diff --git a/routers/web/org/home.go b/routers/web/org/home.go index 947721dc417..846b1de18ab 100644 --- a/routers/web/org/home.go +++ b/routers/web/org/home.go @@ -154,7 +154,7 @@ func Home(ctx *context.Context) { pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5) pager.SetDefaultParams(ctx) - pager.AddParamIfExist("language", ctx.Data["Language"]) + pager.AddParamString("language", language) ctx.Data["Page"] = pager ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0 diff --git a/routers/web/org/projects.go b/routers/web/org/projects.go index 094d14d1943..928676a52b5 100644 --- a/routers/web/org/projects.go +++ b/routers/web/org/projects.go @@ -120,7 +120,7 @@ func Projects(ctx *context.Context) { } pager := context.NewPagination(int(total), setting.UI.IssuePagingNum, page, numPages) - pager.AddParamIfExist("state", ctx.Data["State"]) + pager.AddParamString("state", fmt.Sprint(ctx.Data["State"])) ctx.Data["Page"] = pager ctx.Data["CanWriteProjects"] = canWriteProjects(ctx) diff --git a/routers/web/repo/commit.go b/routers/web/repo/commit.go index 21fafd49019..d66de782f4d 100644 --- a/routers/web/repo/commit.go +++ b/routers/web/repo/commit.go @@ -163,8 +163,8 @@ func Graph(ctx *context.Context) { ctx.Data["CommitCount"] = commitsCount paginator := context.NewPagination(int(graphCommitsCount), setting.UI.GraphMaxCommitNum, page, 5) - paginator.AddParamIfExist("mode", ctx.Data["Mode"]) - paginator.AddParamIfExist("hide-pr-refs", ctx.Data["HidePRRefs"]) + paginator.AddParamString("mode", mode) + paginator.AddParamString("hide-pr-refs", fmt.Sprint(hidePRRefs)) for _, branch := range branches { paginator.AddParamString("branch", branch) } diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 69e09371b3d..a0a500f0b23 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -472,16 +472,16 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption opt } ctx.Data["ShowArchivedLabels"] = archived - pager.AddParamIfExist("q", ctx.Data["Keyword"]) - pager.AddParamIfExist("type", ctx.Data["ViewType"]) - pager.AddParamIfExist("sort", ctx.Data["SortType"]) - pager.AddParamIfExist("state", ctx.Data["State"]) - pager.AddParamIfExist("labels", ctx.Data["SelectLabels"]) - pager.AddParamIfExist("milestone", ctx.Data["MilestoneID"]) - pager.AddParamIfExist("project", ctx.Data["ProjectID"]) - pager.AddParamIfExist("assignee", ctx.Data["AssigneeID"]) - pager.AddParamIfExist("poster", ctx.Data["PosterID"]) - pager.AddParamIfExist("archived", ctx.Data["ShowArchivedLabels"]) + pager.AddParamString("q", keyword) + pager.AddParamString("type", viewType) + pager.AddParamString("sort", sortType) + pager.AddParamString("state", fmt.Sprint(ctx.Data["State"])) + pager.AddParamString("labels", fmt.Sprint(selectLabels)) + pager.AddParamString("milestone", fmt.Sprint(milestoneID)) + pager.AddParamString("project", fmt.Sprint(projectID)) + pager.AddParamString("assignee", fmt.Sprint(assigneeID)) + pager.AddParamString("poster", fmt.Sprint(posterID)) + pager.AddParamString("archived", fmt.Sprint(archived)) ctx.Data["Page"] = pager } diff --git a/routers/web/repo/milestone.go b/routers/web/repo/milestone.go index 2f7c2cb187f..95a4fe60cc1 100644 --- a/routers/web/repo/milestone.go +++ b/routers/web/repo/milestone.go @@ -106,8 +106,8 @@ func Milestones(ctx *context.Context) { ctx.Data["IsShowClosed"] = isShowClosed pager := context.NewPagination(int(total), setting.UI.IssuePagingNum, page, 5) - pager.AddParamIfExist("state", ctx.Data["State"]) - pager.AddParamIfExist("q", ctx.Data["Keyword"]) + pager.AddParamString("state", fmt.Sprint(ctx.Data["State"])) + pager.AddParamString("q", keyword) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplMilestone) diff --git a/routers/web/repo/packages.go b/routers/web/repo/packages.go index 41fc38dedb6..57e578da373 100644 --- a/routers/web/repo/packages.go +++ b/routers/web/repo/packages.go @@ -70,8 +70,8 @@ func Packages(ctx *context.Context) { ctx.Data["RepositoryAccessMap"] = map[int64]bool{ctx.Repo.Repository.ID: true} // There is only the current repository pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5) - pager.AddParamIfExist("q", ctx.Data["Query"]) - pager.AddParamIfExist("type", ctx.Data["PackageType"]) + pager.AddParamString("q", query) + pager.AddParamString("type", packageType) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplPackagesList) diff --git a/routers/web/repo/projects.go b/routers/web/repo/projects.go index 39f1b62ff76..2cba5c0970b 100644 --- a/routers/web/repo/projects.go +++ b/routers/web/repo/projects.go @@ -118,7 +118,7 @@ func Projects(ctx *context.Context) { } pager := context.NewPagination(total, setting.UI.IssuePagingNum, page, numPages) - pager.AddParamIfExist("state", ctx.Data["State"]) + pager.AddParamString("state", fmt.Sprint(ctx.Data["State"])) ctx.Data["Page"] = pager ctx.Data["CanWriteProjects"] = ctx.Repo.Permission.CanWrite(unit.TypeProjects) diff --git a/routers/web/repo/search.go b/routers/web/repo/search.go index cf8666bea56..0f377a97bb7 100644 --- a/routers/web/repo/search.go +++ b/routers/web/repo/search.go @@ -68,7 +68,7 @@ func Search(ctx *context.Context) { pager := context.NewPagination(total, setting.UI.RepoSearchPagingNum, page, 5) pager.SetDefaultParams(ctx) - pager.AddParamIfExist("l", ctx.Data["Language"]) + pager.AddParamString("l", language) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplSearch) diff --git a/routers/web/user/code.go b/routers/web/user/code.go index 7ce3e121929..785c37b1243 100644 --- a/routers/web/user/code.go +++ b/routers/web/user/code.go @@ -122,7 +122,7 @@ func CodeSearch(ctx *context.Context) { pager := context.NewPagination(total, setting.UI.RepoSearchPagingNum, page, 5) pager.SetDefaultParams(ctx) - pager.AddParamIfExist("l", ctx.Data["Language"]) + pager.AddParamString("l", language) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplUserCode) diff --git a/routers/web/user/home.go b/routers/web/user/home.go index dddd03e21f0..465de500a08 100644 --- a/routers/web/user/home.go +++ b/routers/web/user/home.go @@ -133,7 +133,7 @@ func Dashboard(ctx *context.Context) { ctx.Data["Feeds"] = feeds pager := context.NewPagination(int(count), setting.UI.FeedPagingNum, page, 5) - pager.AddParamIfExist("date", ctx.Data["Date"]) + pager.AddParamString("date", date) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplDashboard) @@ -329,10 +329,10 @@ func Milestones(ctx *context.Context) { ctx.Data["IsShowClosed"] = isShowClosed pager := context.NewPagination(pagerCount, setting.UI.IssuePagingNum, page, 5) - pager.AddParamIfExist("q", ctx.Data["Keyword"]) - pager.AddParamIfExist("repos", ctx.Data["RepoIDs"]) - pager.AddParamIfExist("sort", ctx.Data["SortType"]) - pager.AddParamIfExist("state", ctx.Data["State"]) + pager.AddParamString("q", keyword) + pager.AddParamString("repos", reposQuery) + pager.AddParamString("sort", sortType) + pager.AddParamString("state", fmt.Sprint(ctx.Data["State"])) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplMilestones) @@ -632,13 +632,11 @@ func buildIssueOverview(ctx *context.Context, unitType unit.Type) { } pager := context.NewPagination(shownIssues, setting.UI.IssuePagingNum, page, 5) - pager.AddParamIfExist("q", ctx.Data["Keyword"]) - pager.AddParamIfExist("type", ctx.Data["ViewType"]) - pager.AddParamIfExist("sort", ctx.Data["SortType"]) - pager.AddParamIfExist("state", ctx.Data["State"]) - pager.AddParamIfExist("labels", ctx.Data["SelectLabels"]) - pager.AddParamIfExist("milestone", ctx.Data["MilestoneID"]) - pager.AddParamIfExist("assignee", ctx.Data["AssigneeID"]) + pager.AddParamString("q", keyword) + pager.AddParamString("type", viewType) + pager.AddParamString("sort", sortType) + pager.AddParamString("state", fmt.Sprint(ctx.Data["State"])) + pager.AddParamString("labels", selectedLabels) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplIssues) diff --git a/routers/web/user/notification.go b/routers/web/user/notification.go index 81afeae0439..438462371bc 100644 --- a/routers/web/user/notification.go +++ b/routers/web/user/notification.go @@ -344,8 +344,8 @@ func NotificationSubscriptions(ctx *context.Context) { ctx.Redirect(fmt.Sprintf("/notifications/subscriptions?page=%d", pager.Paginater.Current())) return } - pager.AddParamIfExist("sort", ctx.Data["SortType"]) - pager.AddParamIfExist("state", ctx.Data["State"]) + pager.AddParamString("sort", sortType) + pager.AddParamString("state", state) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplNotificationSubscriptions) diff --git a/routers/web/user/package.go b/routers/web/user/package.go index 911ca12bf07..9af49406c48 100644 --- a/routers/web/user/package.go +++ b/routers/web/user/package.go @@ -125,8 +125,8 @@ func ListPackages(ctx *context.Context) { } pager := context.NewPagination(int(total), setting.UI.PackagesPagingNum, page, 5) - pager.AddParamIfExist("q", ctx.Data["Query"]) - pager.AddParamIfExist("type", ctx.Data["PackageType"]) + pager.AddParamString("q", query) + pager.AddParamString("type", packageType) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplPackagesList) diff --git a/routers/web/user/profile.go b/routers/web/user/profile.go index f9df511f600..f0749e10216 100644 --- a/routers/web/user/profile.go +++ b/routers/web/user/profile.go @@ -324,12 +324,14 @@ func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileDb pager := context.NewPagination(total, pagingNum, page, 5) pager.SetDefaultParams(ctx) - pager.AddParamIfExist("tab", ctx.Data["TabName"]) + pager.AddParamString("tab", tab) if tab != "followers" && tab != "following" && tab != "activity" && tab != "projects" { - pager.AddParamIfExist("language", ctx.Data["Language"]) + pager.AddParamString("language", language) } if tab == "activity" { - pager.AddParamIfExist("date", ctx.Data["Date"]) + if ctx.Data["Date"] != nil { + pager.AddParamString("date", fmt.Sprint(ctx.Data["Date"])) + } } ctx.Data["Page"] = pager } diff --git a/services/context/pagination.go b/services/context/pagination.go index 11d37283c96..fb2ef699ce4 100644 --- a/services/context/pagination.go +++ b/services/context/pagination.go @@ -26,16 +26,6 @@ func NewPagination(total, pagingNum, current, numPages int) *Pagination { return p } -// AddParamIfExist adds a value to the query parameters if the value is not nil -func (p *Pagination) AddParamIfExist(key string, val any) { - if val == nil { - return - } - paramData := fmt.Sprint(val) - urlParam := fmt.Sprintf("%s=%v", url.QueryEscape(key), url.QueryEscape(paramData)) - p.urlParams = append(p.urlParams, urlParam) -} - // AddParamString adds a string parameter directly func (p *Pagination) AddParamString(key, value string) { urlParam := fmt.Sprintf("%s=%v", url.QueryEscape(key), url.QueryEscape(value)) @@ -49,8 +39,14 @@ func (p *Pagination) GetParams() template.URL { // SetDefaultParams sets common pagination params that are often used func (p *Pagination) SetDefaultParams(ctx *Context) { - p.AddParamIfExist("sort", ctx.Data["SortType"]) - p.AddParamIfExist("q", ctx.Data["Keyword"]) + if v, ok := ctx.Data["SortType"].(string); ok { + p.AddParamString("sort", v) + } + if v, ok := ctx.Data["Keyword"].(string); ok { + p.AddParamString("q", v) + } + if v, ok := ctx.Data["IsFuzzy"].(bool); ok { + p.AddParamString("fuzzy", fmt.Sprint(v)) + } // do not add any more uncommon params here! - p.AddParamIfExist("fuzzy", ctx.Data["IsFuzzy"]) }