diff options
author | Mario Lubenka <mario.lubenka@googlemail.com> | 2019-04-20 06:15:19 +0200 |
---|---|---|
committer | techknowlogick <matti@mdranta.net> | 2019-04-20 00:15:19 -0400 |
commit | fcbac38d6fd8c91be0da5e7f37e7bc69b071253a (patch) | |
tree | cdf7c901df75d0d2f26567d1090ed0e3c1af138d | |
parent | 40dc458bb69f9827e804e2fe51c9f42caf3d3ddc (diff) | |
download | gitea-fcbac38d6fd8c91be0da5e7f37e7bc69b071253a.tar.gz gitea-fcbac38d6fd8c91be0da5e7f37e7bc69b071253a.zip |
Unifies pagination template usage (#6531) (#6533)
-rw-r--r-- | modules/context/api.go | 20 | ||||
-rw-r--r-- | modules/context/pagination.go | 50 | ||||
-rw-r--r-- | routers/admin/notice.go | 10 | ||||
-rw-r--r-- | routers/home.go | 19 | ||||
-rw-r--r-- | routers/repo/commit.go | 15 | ||||
-rw-r--r-- | routers/repo/issue.go | 15 | ||||
-rw-r--r-- | routers/repo/milestone.go | 7 | ||||
-rw-r--r-- | routers/repo/release.go | 9 | ||||
-rw-r--r-- | routers/repo/search.go | 9 | ||||
-rw-r--r-- | routers/repo/view.go | 7 | ||||
-rw-r--r-- | routers/user/home.go | 17 | ||||
-rw-r--r-- | routers/user/notification.go | 12 | ||||
-rw-r--r-- | routers/user/profile.go | 22 | ||||
-rw-r--r-- | templates/admin/notice.tmpl | 24 | ||||
-rw-r--r-- | templates/admin/repo/list.tmpl | 2 | ||||
-rw-r--r-- | templates/base/paginate.tmpl | 13 | ||||
-rw-r--r-- | templates/repo/issue/list.tmpl | 22 | ||||
-rw-r--r-- | templates/repo/issue/milestone_issues.tmpl | 22 | ||||
-rw-r--r-- | templates/repo/issue/milestones.tmpl | 22 | ||||
-rw-r--r-- | templates/repo/user_cards.tmpl | 22 | ||||
-rw-r--r-- | templates/user/dashboard/issues.tmpl | 22 |
21 files changed, 165 insertions, 196 deletions
diff --git a/modules/context/api.go b/modules/context/api.go index cbabfe40e1..61f6514759 100644 --- a/modules/context/api.go +++ b/modules/context/api.go @@ -19,8 +19,7 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" - "github.com/Unknwon/paginater" - macaron "gopkg.in/macaron.v1" + "gopkg.in/macaron.v1" ) // APIContext is a specific macaron context for API service @@ -83,19 +82,20 @@ func (ctx *APIContext) Error(status int, title string, obj interface{}) { // SetLinkHeader sets pagination link header by given total number and page size. func (ctx *APIContext) SetLinkHeader(total, pageSize int) { - page := paginater.New(total, pageSize, ctx.QueryInt("page"), 0) + page := NewPagination(total, pageSize, ctx.QueryInt("page"), 0) + paginater := page.Paginater links := make([]string, 0, 4) - if page.HasNext() { - links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"next\"", setting.AppURL, ctx.Req.URL.Path[1:], page.Next())) + if paginater.HasNext() { + links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"next\"", setting.AppURL, ctx.Req.URL.Path[1:], paginater.Next())) } - if !page.IsLast() { - links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"last\"", setting.AppURL, ctx.Req.URL.Path[1:], page.TotalPages())) + if !paginater.IsLast() { + links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"last\"", setting.AppURL, ctx.Req.URL.Path[1:], paginater.TotalPages())) } - if !page.IsFirst() { + if !paginater.IsFirst() { links = append(links, fmt.Sprintf("<%s%s?page=1>; rel=\"first\"", setting.AppURL, ctx.Req.URL.Path[1:])) } - if page.HasPrevious() { - links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"prev\"", setting.AppURL, ctx.Req.URL.Path[1:], page.Previous())) + if paginater.HasPrevious() { + links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"prev\"", setting.AppURL, ctx.Req.URL.Path[1:], paginater.Previous())) } if len(links) > 0 { diff --git a/modules/context/pagination.go b/modules/context/pagination.go new file mode 100644 index 0000000000..4795f650fb --- /dev/null +++ b/modules/context/pagination.go @@ -0,0 +1,50 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package context + +import ( + "fmt" + "html/template" + "net/url" + "strings" + + "github.com/Unknwon/paginater" +) + +// Pagination provides a pagination via Paginater and additional configurations for the link params used in rendering +type Pagination struct { + Paginater *paginater.Paginater + urlParams []string +} + +// NewPagination creates a new instance of the Pagination struct +func NewPagination(total int, page int, issueNum int, numPages int) *Pagination { + p := &Pagination{} + p.Paginater = paginater.New(total, page, issueNum, numPages) + return p +} + +// AddParam adds a value from context identified by ctxKey as link param under a given paramKey +func (p *Pagination) AddParam(ctx *Context, paramKey string, ctxKey string) { + _, exists := ctx.Data[ctxKey] + if !exists { + return + } + paramData := fmt.Sprintf("%v", ctx.Data[ctxKey]) // cast interface{} to string + urlParam := fmt.Sprintf("%s=%v", url.QueryEscape(paramKey), url.QueryEscape(paramData)) + p.urlParams = append(p.urlParams, urlParam) +} + +// GetParams returns the configured URL params +func (p *Pagination) GetParams() template.URL { + return template.URL(strings.Join(p.urlParams[:], "&")) +} + +// SetDefaultParams sets common pagination params that are often used +func (p *Pagination) SetDefaultParams(ctx *Context) { + p.AddParam(ctx, "sort", "SortType") + p.AddParam(ctx, "q", "Keyword") + p.AddParam(ctx, "tab", "TabName") +} diff --git a/routers/admin/notice.go b/routers/admin/notice.go index 5892d88e58..d2c067c143 100644 --- a/routers/admin/notice.go +++ b/routers/admin/notice.go @@ -1,18 +1,18 @@ // Copyright 2014 The Gogs Authors. All rights reserved. +// Copyright 2019 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package admin import ( - "github.com/Unknwon/com" - "github.com/Unknwon/paginater" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" + + "github.com/Unknwon/com" ) const ( @@ -30,7 +30,6 @@ func Notices(ctx *context.Context) { if page <= 1 { page = 1 } - ctx.Data["Page"] = paginater.New(int(total), setting.UI.Admin.NoticePagingNum, page, 5) notices, err := models.Notices(page, setting.UI.Admin.NoticePagingNum) if err != nil { @@ -40,6 +39,9 @@ func Notices(ctx *context.Context) { ctx.Data["Notices"] = notices ctx.Data["Total"] = total + + ctx.Data["Page"] = context.NewPagination(int(total), setting.UI.Admin.NoticePagingNum, page, 5) + ctx.HTML(200, tplNotices) } diff --git a/routers/home.go b/routers/home.go index a9c4774867..dbe27bd425 100644 --- a/routers/home.go +++ b/routers/home.go @@ -17,8 +17,6 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/routers/user" - - "github.com/Unknwon/paginater" ) const ( @@ -151,10 +149,13 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) { } ctx.Data["Keyword"] = keyword ctx.Data["Total"] = count - ctx.Data["Page"] = paginater.New(int(count), opts.PageSize, page, 5) ctx.Data["Repos"] = repos ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled + pager := context.NewPagination(int(count), opts.PageSize, page, 5) + pager.SetDefaultParams(ctx) + ctx.Data["Page"] = pager + ctx.HTML(200, opts.TplName) } @@ -222,11 +223,14 @@ func RenderUserSearch(ctx *context.Context, opts *models.SearchUserOptions, tplN } ctx.Data["Keyword"] = opts.Keyword ctx.Data["Total"] = count - ctx.Data["Page"] = paginater.New(int(count), opts.PageSize, opts.Page, 5) ctx.Data["Users"] = users ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled + pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5) + pager.SetDefaultParams(ctx) + ctx.Data["Page"] = pager + ctx.HTML(200, tplName) } @@ -364,11 +368,14 @@ func ExploreCode(ctx *context.Context) { } ctx.Data["Keyword"] = keyword - pager := paginater.New(total, setting.UI.RepoSearchPagingNum, page, 5) - ctx.Data["Page"] = pager ctx.Data["SearchResults"] = searchResults ctx.Data["RequireHighlightJS"] = true ctx.Data["PageIsViewCode"] = true + + pager := context.NewPagination(total, setting.UI.RepoSearchPagingNum, page, 5) + pager.SetDefaultParams(ctx) + ctx.Data["Page"] = pager + ctx.HTML(200, tplExploreCode) } diff --git a/routers/repo/commit.go b/routers/repo/commit.go index 9263bcac7f..2978eda6c0 100644 --- a/routers/repo/commit.go +++ b/routers/repo/commit.go @@ -1,4 +1,5 @@ // Copyright 2014 The Gogs Authors. All rights reserved. +// Copyright 2019 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. @@ -14,8 +15,6 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" - - "github.com/Unknwon/paginater" ) const ( @@ -55,7 +54,6 @@ func Commits(ctx *context.Context) { if page <= 1 { page = 1 } - ctx.Data["Page"] = paginater.New(int(commitsCount), git.CommitsRangeSize, page, 5) // Both `git log branchName` and `git log commitId` work. commits, err := ctx.Repo.Commit.CommitsByRange(page) @@ -72,6 +70,11 @@ func Commits(ctx *context.Context) { ctx.Data["Reponame"] = ctx.Repo.Repository.Name ctx.Data["CommitCount"] = commitsCount ctx.Data["Branch"] = ctx.Repo.BranchName + + pager := context.NewPagination(int(commitsCount), git.CommitsRangeSize, page, 5) + pager.SetDefaultParams(ctx) + ctx.Data["Page"] = pager + ctx.HTML(200, tplCommits) } @@ -160,7 +163,6 @@ func FileHistory(ctx *context.Context) { if page <= 1 { page = 1 } - ctx.Data["Page"] = paginater.New(int(commitsCount), git.CommitsRangeSize, page, 5) commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange(branchName, fileName, page) if err != nil { @@ -177,6 +179,11 @@ func FileHistory(ctx *context.Context) { ctx.Data["FileName"] = fileName ctx.Data["CommitCount"] = commitsCount ctx.Data["Branch"] = branchName + + pager := context.NewPagination(int(commitsCount), git.CommitsRangeSize, page, 5) + pager.SetDefaultParams(ctx) + ctx.Data["Page"] = pager + ctx.HTML(200, tplCommits) } diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 7d235d84ef..c818ac4840 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -27,7 +27,6 @@ import ( "code.gitea.io/gitea/modules/util" "github.com/Unknwon/com" - "github.com/Unknwon/paginater" ) const ( @@ -186,8 +185,7 @@ func issues(ctx *context.Context, milestoneID int64, isPullOption util.OptionalB } else { total = int(issueStats.ClosedCount) } - pager := paginater.New(total, setting.UI.IssuePagingNum, page, 5) - ctx.Data["Page"] = pager + pager := context.NewPagination(total, setting.UI.IssuePagingNum, page, 5) var issues []*models.Issue if forceEmpty { @@ -199,7 +197,7 @@ func issues(ctx *context.Context, milestoneID int64, isPullOption util.OptionalB PosterID: posterID, MentionedID: mentionedID, MilestoneID: milestoneID, - Page: pager.Current(), + Page: pager.Paginater.Current(), PageSize: setting.UI.IssuePagingNum, IsClosed: util.OptionalBoolOf(isShowClosed), IsPull: isPullOption, @@ -268,6 +266,15 @@ func issues(ctx *context.Context, milestoneID int64, isPullOption util.OptionalB } else { ctx.Data["State"] = "open" } + + pager.AddParam(ctx, "q", "Keyword") + pager.AddParam(ctx, "type", "ViewType") + pager.AddParam(ctx, "sort", "SortType") + pager.AddParam(ctx, "state", "State") + pager.AddParam(ctx, "labels", "SelectLabels") + pager.AddParam(ctx, "milestone", "MilestoneID") + pager.AddParam(ctx, "assignee", "AssigneeID") + ctx.Data["Page"] = pager } // Issues render issues page diff --git a/routers/repo/milestone.go b/routers/repo/milestone.go index 632c792c43..644f7e043b 100644 --- a/routers/repo/milestone.go +++ b/routers/repo/milestone.go @@ -14,7 +14,6 @@ import ( "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" - "github.com/Unknwon/paginater" ) const ( @@ -51,7 +50,6 @@ func Milestones(ctx *context.Context) { } else { total = int(closedCount) } - ctx.Data["Page"] = paginater.New(total, setting.UI.IssuePagingNum, page, 5) miles, err := models.GetMilestones(ctx.Repo.Repository.ID, page, isShowClosed, sortType) if err != nil { @@ -77,6 +75,11 @@ func Milestones(ctx *context.Context) { ctx.Data["SortType"] = sortType ctx.Data["IsShowClosed"] = isShowClosed + + pager := context.NewPagination(total, setting.UI.IssuePagingNum, page, 5) + pager.AddParam(ctx, "state", "State") + ctx.Data["Page"] = pager + ctx.HTML(200, tplMilestone) } diff --git a/routers/repo/release.go b/routers/repo/release.go index 38e8da1401..fdef533f10 100644 --- a/routers/repo/release.go +++ b/routers/repo/release.go @@ -15,8 +15,6 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup/markdown" "code.gitea.io/gitea/modules/setting" - - "github.com/Unknwon/paginater" ) const ( @@ -120,9 +118,12 @@ func Releases(ctx *context.Context) { r.Note = markdown.RenderString(r.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas()) } - pager := paginater.New(int(count), limit, page, 5) - ctx.Data["Page"] = pager ctx.Data["Releases"] = releases + + pager := context.NewPagination(int(count), limit, page, 5) + pager.SetDefaultParams(ctx) + ctx.Data["Page"] = pager + ctx.HTML(200, tplReleases) } diff --git a/routers/repo/search.go b/routers/repo/search.go index 95715c30c6..de16eda83d 100644 --- a/routers/repo/search.go +++ b/routers/repo/search.go @@ -12,8 +12,6 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/search" "code.gitea.io/gitea/modules/setting" - - "github.com/Unknwon/paginater" ) const tplSearch base.TplName = "repo/search" @@ -36,12 +34,15 @@ func Search(ctx *context.Context) { return } ctx.Data["Keyword"] = keyword - pager := paginater.New(total, setting.UI.RepoSearchPagingNum, page, 5) - ctx.Data["Page"] = pager ctx.Data["SourcePath"] = setting.AppSubURL + "/" + path.Join(ctx.Repo.Repository.Owner.Name, ctx.Repo.Repository.Name, "src", "branch", ctx.Repo.Repository.DefaultBranch) ctx.Data["SearchResults"] = searchResults ctx.Data["RequireHighlightJS"] = true ctx.Data["PageIsViewCode"] = true + + pager := context.NewPagination(total, setting.UI.RepoSearchPagingNum, page, 5) + pager.SetDefaultParams(ctx) + ctx.Data["Page"] = pager + ctx.HTML(200, tplSearch) } diff --git a/routers/repo/view.go b/routers/repo/view.go index d20f94dfba..fa1e2d0747 100644 --- a/routers/repo/view.go +++ b/routers/repo/view.go @@ -24,8 +24,6 @@ import ( "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/templates" - - "github.com/Unknwon/paginater" ) const ( @@ -462,10 +460,10 @@ func RenderUserCards(ctx *context.Context, total int, getter func(page int) ([]* if page <= 0 { page = 1 } - pager := paginater.New(total, models.ItemsPerPage, page, 5) + pager := context.NewPagination(total, models.ItemsPerPage, page, 5) ctx.Data["Page"] = pager - items, err := getter(pager.Current()) + items, err := getter(pager.Paginater.Current()) if err != nil { ctx.ServerError("getter", err) return @@ -480,6 +478,7 @@ func Watchers(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("repo.watchers") ctx.Data["CardsTitle"] = ctx.Tr("repo.watchers") ctx.Data["PageIsWatchers"] = true + RenderUserCards(ctx, ctx.Repo.Repository.NumWatches, ctx.Repo.Repository.GetWatchers, tplWatchers) } diff --git a/routers/user/home.go b/routers/user/home.go index 8eedeb70bd..79377ac500 100644 --- a/routers/user/home.go +++ b/routers/user/home.go @@ -18,7 +18,6 @@ import ( "code.gitea.io/gitea/modules/util" "github.com/Unknwon/com" - "github.com/Unknwon/paginater" "github.com/keybase/go-crypto/openpgp" "github.com/keybase/go-crypto/openpgp/armor" ) @@ -354,7 +353,6 @@ func Issues(ctx *context.Context) { ctx.Data["CommitStatus"] = commitStatus ctx.Data["Repos"] = showRepos ctx.Data["Counts"] = counts - ctx.Data["Page"] = paginater.New(total, setting.UI.IssuePagingNum, page, 5) ctx.Data["IssueStats"] = issueStats ctx.Data["ViewType"] = viewType ctx.Data["SortType"] = sortType @@ -367,6 +365,16 @@ func Issues(ctx *context.Context) { ctx.Data["State"] = "open" } + pager := context.NewPagination(total, setting.UI.IssuePagingNum, page, 5) + pager.AddParam(ctx, "type", "ViewType") + pager.AddParam(ctx, "repo", "RepoID") + pager.AddParam(ctx, "sort", "SortType") + pager.AddParam(ctx, "state", "State") + pager.AddParam(ctx, "labels", "SelectLabels") + pager.AddParam(ctx, "milestone", "MilestoneID") + pager.AddParam(ctx, "assignee", "AssigneeID") + ctx.Data["Page"] = pager + ctx.HTML(200, tplIssues) } @@ -534,10 +542,13 @@ func showOrgProfile(ctx *context.Context) { ctx.Data["Repos"] = repos ctx.Data["Total"] = count - ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5) ctx.Data["Members"] = org.Members ctx.Data["Teams"] = org.Teams + pager := context.NewPagination(int(count), setting.UI.User.RepoPagingNum, page, 5) + pager.SetDefaultParams(ctx) + ctx.Data["Page"] = pager + ctx.HTML(200, tplOrgHome) } diff --git a/routers/user/notification.go b/routers/user/notification.go index 32cacdd2c4..8c23d76fa9 100644 --- a/routers/user/notification.go +++ b/routers/user/notification.go @@ -1,3 +1,7 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + package user import ( @@ -6,8 +10,6 @@ import ( "strconv" "strings" - "github.com/Unknwon/paginater" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" @@ -80,7 +82,11 @@ func Notifications(c *context.Context) { c.Data["Keyword"] = keyword c.Data["Status"] = status c.Data["Notifications"] = notifications - c.Data["Page"] = paginater.New(int(total), perPage, page, 5) + + pager := context.NewPagination(int(total), perPage, page, 5) + pager.SetDefaultParams(c) + c.Data["Page"] = pager + c.HTML(200, tplNotification) } diff --git a/routers/user/profile.go b/routers/user/profile.go index 675c1dc3f4..a7dab18c7a 100644 --- a/routers/user/profile.go +++ b/routers/user/profile.go @@ -10,8 +10,6 @@ import ( "path" "strings" - "github.com/Unknwon/paginater" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" @@ -127,6 +125,7 @@ func Profile(ctx *context.Context) { var ( repos []*models.Repository count int64 + total int orderBy models.SearchOrderBy ) @@ -201,18 +200,14 @@ func Profile(ctx *context.Context) { } } - ctx.Data["Repos"] = repos - ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5) - ctx.Data["Total"] = count + total = int(count) default: if len(keyword) == 0 { - var total int repos, err = models.GetUserRepositories(ctxUser.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String()) if err != nil { ctx.ServerError("GetRepositories", err) return } - ctx.Data["Repos"] = repos if showPrivate { total = ctxUser.NumRepos @@ -224,9 +219,6 @@ func Profile(ctx *context.Context) { } total = int(count) } - - ctx.Data["Page"] = paginater.New(total, setting.UI.User.RepoPagingNum, page, 5) - ctx.Data["Total"] = total } else { repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{ Keyword: keyword, @@ -244,11 +236,15 @@ func Profile(ctx *context.Context) { return } - ctx.Data["Repos"] = repos - ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5) - ctx.Data["Total"] = count + total = int(count) } } + ctx.Data["Repos"] = repos + ctx.Data["Total"] = total + + pager := context.NewPagination(total, setting.UI.User.RepoPagingNum, page, 5) + pager.SetDefaultParams(ctx) + ctx.Data["Page"] = pager ctx.Data["ShowUserEmail"] = len(ctxUser.Email) > 0 && ctx.IsSigned && (!ctxUser.KeepEmailPrivate || ctxUser.ID == ctx.User.ID) diff --git a/templates/admin/notice.tmpl b/templates/admin/notice.tmpl index b1d886be42..972771b431 100644 --- a/templates/admin/notice.tmpl +++ b/templates/admin/notice.tmpl @@ -66,29 +66,7 @@ </table> </div> - {{with .Page}} - {{if gt .TotalPages 1}} - <div class="center page buttons"> - <div class="ui borderless pagination menu"> - <a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a> - <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}> - <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}} - </a> - {{range .Pages}} - {{if eq .Num -1}} - <a class="disabled item">...</a> - {{else}} - <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a> - {{end}} - {{end}} - <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}> - {{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i> - </a> - <a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}} <i class="angle double right icon"></i></a> - </div> - </div> - {{end}} - {{end}} + {{ template "base/paginate" . }} </div> </div> diff --git a/templates/admin/repo/list.tmpl b/templates/admin/repo/list.tmpl index 423de6a3d8..793d9c620e 100644 --- a/templates/admin/repo/list.tmpl +++ b/templates/admin/repo/list.tmpl @@ -44,7 +44,7 @@ <td>{{.NumIssues}}</td> <td>{{SizeFmt .Size}}</td> <td><span title="{{.CreatedUnix.FormatLong}}">{{.CreatedUnix.FormatShort}}</span></td> - <td><a class="delete-button" href="" data-url="{{$.Link}}/delete?page={{$.Page.Current}}&sort={{$.SortType}}" data-id="{{.ID}}" data-name="{{.Name}}"><i class="trash icon text red"></i></a></td> + <td><a class="delete-button" href="" data-url="{{$.Link}}/delete?page={{$.Page.Paginater.Current}}&sort={{$.SortType}}" data-id="{{.ID}}" data-name="{{.Name}}"><i class="trash icon text red"></i></a></td> </tr> {{end}} </tbody> diff --git a/templates/base/paginate.tmpl b/templates/base/paginate.tmpl index 4445a019d6..da07fd2ba1 100644 --- a/templates/base/paginate.tmpl +++ b/templates/base/paginate.tmpl @@ -1,22 +1,23 @@ -{{with .Page}} +{{$paginationLink := .Page.GetParams}} +{{with .Page.Paginater}} {{if gt .TotalPages 1}} <div class="center page buttons"> <div class="ui borderless pagination menu"> - <a class="{{if .IsFirst}}disabled{{end}} item navigation" {{if not .IsFirst}}href="{{$.Link}}?sort={{$.SortType}}&q={{$.Keyword}}&tab={{$.TabName}}"{{end}}><i class="angle double left icon"></i><span class="navigation_label"> {{$.i18n.Tr "admin.first_page"}}</span></a> - <a class="{{if not .HasPrevious}}disabled{{end}} item navigation" {{if .HasPrevious}}href="{{$.Link}}?sort={{$.SortType}}&page={{.Previous}}&q={{$.Keyword}}&tab={{$.TabName}}"{{end}}> + <a class="{{if .IsFirst}}disabled{{end}} item navigation" {{if not .IsFirst}}href="{{$.Link}}{{if $paginationLink}}?{{$paginationLink}}{{end}}"{{end}}><i class="angle double left icon"></i><span class="navigation_label"> {{$.i18n.Tr "admin.first_page"}}</span></a> + <a class="{{if not .HasPrevious}}disabled{{end}} item navigation" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}{{if $paginationLink}}&{{$paginationLink}}{{end}}"{{end}}> <i class="left arrow icon"></i><span class="navigation_label"> {{$.i18n.Tr "repo.issues.previous"}}</span> </a> {{range .Pages}} {{if eq .Num -1}} <a class="disabled item">...</a> {{else}} - <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?sort={{$.SortType}}&page={{.Num}}&q={{$.Keyword}}&tab={{$.TabName}}"{{end}}>{{.Num}}</a> + <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}{{if $paginationLink}}&{{$paginationLink}}{{end}}"{{end}}>{{.Num}}</a> {{end}} {{end}} - <a class="{{if not .HasNext}}disabled{{end}} item navigation" {{if .HasNext}}href="{{$.Link}}?sort={{$.SortType}}&page={{.Next}}&q={{$.Keyword}}&tab={{$.TabName}}"{{end}}> + <a class="{{if not .HasNext}}disabled{{end}} item navigation" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}{{if $paginationLink}}&{{$paginationLink}}{{end}}"{{end}}> <span class="navigation_label">{{$.i18n.Tr "repo.issues.next"}} </span><i class="icon right arrow"></i> </a> - <a class="{{if .IsLast}}disabled{{end}} item navigation" {{if not .IsLast}}href="{{$.Link}}?sort={{$.SortType}}&page={{.TotalPages}}&q={{$.Keyword}}&tab={{$.TabName}}"{{end}}><span class="navigation_label">{{$.i18n.Tr "admin.last_page"}} </span><i class="angle double right icon"></i></a> + <a class="{{if .IsLast}}disabled{{end}} item navigation" {{if not .IsLast}}href="{{$.Link}}?page={{.TotalPages}}{{if $paginationLink}}&{{$paginationLink}}{{end}}"{{end}}><span class="navigation_label">{{$.i18n.Tr "admin.last_page"}} </span><i class="angle double right icon"></i></a> </div> </div> {{end}} diff --git a/templates/repo/issue/list.tmpl b/templates/repo/issue/list.tmpl index e3b14881df..aa408aceee 100644 --- a/templates/repo/issue/list.tmpl +++ b/templates/repo/issue/list.tmpl @@ -258,27 +258,7 @@ </li> {{end}} - {{with .Page}} - {{if gt .TotalPages 1}} - <div class="center page buttons"> - <div class="ui borderless pagination menu"> - <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}&page={{.Previous}}"{{end}}> - <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}} - </a> - {{range .Pages}} - {{if eq .Num -1}} - <a class="disabled item">...</a> - {{else}} - <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}&page={{.Num}}"{{end}}>{{.Num}}</a> - {{end}} - {{end}} - <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}&page={{.Next}}"{{end}}> - {{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i> - </a> - </div> - </div> - {{end}} - {{end}} + {{template "base/paginate" .}} </div> </div> </div> diff --git a/templates/repo/issue/milestone_issues.tmpl b/templates/repo/issue/milestone_issues.tmpl index c81f6adf8b..44df0dd625 100644 --- a/templates/repo/issue/milestone_issues.tmpl +++ b/templates/repo/issue/milestone_issues.tmpl @@ -228,27 +228,7 @@ </li> {{end}} - {{with .Page}} - {{if gt .TotalPages 1}} - <div class="center page buttons"> - <div class="ui borderless pagination menu"> - <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&assignee={{$.AssigneeID}}&page={{.Previous}}"{{end}}> - <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}} - </a> - {{range .Pages}} - {{if eq .Num -1}} - <a class="disabled item">...</a> - {{else}} - <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&assignee={{$.AssigneeID}}&page={{.Num}}"{{end}}>{{.Num}}</a> - {{end}} - {{end}} - <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?q={{$.Keyword}}&type={{$.ViewType}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&assignee={{$.AssigneeID}}&page={{.Next}}"{{end}}> - {{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i> - </a> - </div> - </div> - {{end}} - {{end}} + {{template "base/paginate" .}} </div> </div> </div> diff --git a/templates/repo/issue/milestones.tmpl b/templates/repo/issue/milestones.tmpl index 1ed7ce94ed..ef5eece770 100644 --- a/templates/repo/issue/milestones.tmpl +++ b/templates/repo/issue/milestones.tmpl @@ -86,27 +86,7 @@ </li> {{end}} - {{with .Page}} - {{if gt .TotalPages 1}} - <div class="center page buttons"> - <div class="ui borderless pagination menu"> - <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?state={{$.State}}&page={{.Previous}}"{{end}}> - <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}} - </a> - {{range .Pages}} - {{if eq .Num -1}} - <a class="disabled item">...</a> - {{else}} - <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?state={{$.State}}&page={{.Num}}"{{end}}>{{.Num}}</a> - {{end}} - {{end}} - <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?state={{$.State}}&page={{.Next}}"{{end}}> - {{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i> - </a> - </div> - </div> - {{end}} - {{end}} + {{template "base/paginate" .}} </div> </div> </div> diff --git a/templates/repo/user_cards.tmpl b/templates/repo/user_cards.tmpl index 2d212dafae..3677bab635 100644 --- a/templates/repo/user_cards.tmpl +++ b/templates/repo/user_cards.tmpl @@ -23,25 +23,5 @@ {{end}} </ul> - {{with .Page}} - {{if gt .TotalPages 1}} - <div class="center page buttons"> - <div class="ui borderless pagination menu"> - <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}> - <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}} - </a> - {{range .Pages}} - {{if eq .Num -1}} - <a class="disabled item">...</a> - {{else}} - <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a> - {{end}} - {{end}} - <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}> - {{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i> - </a> - </div> - </div> - {{end}} - {{end}} + {{ template "base/paginate" . }} </div> diff --git a/templates/user/dashboard/issues.tmpl b/templates/user/dashboard/issues.tmpl index 0caa9a60dd..3273319098 100644 --- a/templates/user/dashboard/issues.tmpl +++ b/templates/user/dashboard/issues.tmpl @@ -113,27 +113,7 @@ </li> {{end}} - {{with .Page}} - {{if gt .TotalPages 1}} - <div class="center page buttons"> - <div class="ui borderless pagination menu"> - <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?type={{$.ViewType}}&repo={{$.RepoID}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}&page={{.Previous}}"{{end}}> - <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}} - </a> - {{range .Pages}} - {{if eq .Num -1}} - <a class="disabled item">...</a> - {{else}} - <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?type={{$.ViewType}}&repo={{$.RepoID}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}&page={{.Num}}"{{end}}>{{.Num}}</a> - {{end}} - {{end}} - <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?type={{$.ViewType}}&repo={{$.RepoID}}&sort={{$.SortType}}&state={{$.State}}&labels={{$.SelectLabels}}&milestone={{$.MilestoneID}}&assignee={{$.AssigneeID}}&page={{.Next}}"{{end}}> - {{$.i18n.Tr "repo.issues.next"}} <i class="icon right arrow"></i> - </a> - </div> - </div> - {{end}} - {{end}} + {{template "base/paginate" .}} </div> </div> </div> |