summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMario Lubenka <mario.lubenka@googlemail.com>2019-04-20 06:15:19 +0200
committertechknowlogick <matti@mdranta.net>2019-04-20 00:15:19 -0400
commitfcbac38d6fd8c91be0da5e7f37e7bc69b071253a (patch)
treecdf7c901df75d0d2f26567d1090ed0e3c1af138d
parent40dc458bb69f9827e804e2fe51c9f42caf3d3ddc (diff)
downloadgitea-fcbac38d6fd8c91be0da5e7f37e7bc69b071253a.tar.gz
gitea-fcbac38d6fd8c91be0da5e7f37e7bc69b071253a.zip
Unifies pagination template usage (#6531) (#6533)
-rw-r--r--modules/context/api.go20
-rw-r--r--modules/context/pagination.go50
-rw-r--r--routers/admin/notice.go10
-rw-r--r--routers/home.go19
-rw-r--r--routers/repo/commit.go15
-rw-r--r--routers/repo/issue.go15
-rw-r--r--routers/repo/milestone.go7
-rw-r--r--routers/repo/release.go9
-rw-r--r--routers/repo/search.go9
-rw-r--r--routers/repo/view.go7
-rw-r--r--routers/user/home.go17
-rw-r--r--routers/user/notification.go12
-rw-r--r--routers/user/profile.go22
-rw-r--r--templates/admin/notice.tmpl24
-rw-r--r--templates/admin/repo/list.tmpl2
-rw-r--r--templates/base/paginate.tmpl13
-rw-r--r--templates/repo/issue/list.tmpl22
-rw-r--r--templates/repo/issue/milestone_issues.tmpl22
-rw-r--r--templates/repo/issue/milestones.tmpl22
-rw-r--r--templates/repo/user_cards.tmpl22
-rw-r--r--templates/user/dashboard/issues.tmpl22
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"}}&nbsp;<i class="icon right arrow"></i>
- </a>
- <a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}}&nbsp;<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">&nbsp;{{$.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">&nbsp;{{$.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">&nbsp;{{$.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"}}&nbsp;</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"}}&nbsp;</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"}}&nbsp;</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"}}&nbsp;<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"}}&nbsp;<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"}}&nbsp;<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>