mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 05:25:15 +01:00 
			
		
		
		
	
							parent
							
								
									40dc458bb6
								
							
						
					
					
						commit
						fcbac38d6f
					
				@ -19,8 +19,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
						"gopkg.in/macaron.v1"
 | 
				
			||||||
	macaron "gopkg.in/macaron.v1"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// APIContext is a specific macaron context for API service
 | 
					// 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.
 | 
					// SetLinkHeader sets pagination link header by given total number and page size.
 | 
				
			||||||
func (ctx *APIContext) SetLinkHeader(total, pageSize int) {
 | 
					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)
 | 
						links := make([]string, 0, 4)
 | 
				
			||||||
	if page.HasNext() {
 | 
						if paginater.HasNext() {
 | 
				
			||||||
		links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"next\"", setting.AppURL, ctx.Req.URL.Path[1:], page.Next()))
 | 
							links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"next\"", setting.AppURL, ctx.Req.URL.Path[1:], paginater.Next()))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !page.IsLast() {
 | 
						if !paginater.IsLast() {
 | 
				
			||||||
		links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"last\"", setting.AppURL, ctx.Req.URL.Path[1:], page.TotalPages()))
 | 
							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:]))
 | 
							links = append(links, fmt.Sprintf("<%s%s?page=1>; rel=\"first\"", setting.AppURL, ctx.Req.URL.Path[1:]))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if page.HasPrevious() {
 | 
						if paginater.HasPrevious() {
 | 
				
			||||||
		links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"prev\"", setting.AppURL, ctx.Req.URL.Path[1:], page.Previous()))
 | 
							links = append(links, fmt.Sprintf("<%s%s?page=%d>; rel=\"prev\"", setting.AppURL, ctx.Req.URL.Path[1:], paginater.Previous()))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(links) > 0 {
 | 
						if len(links) > 0 {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										50
									
								
								modules/context/pagination.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								modules/context/pagination.go
									
									
									
									
									
										Normal file
									
								
							@ -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")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,18 +1,18 @@
 | 
				
			|||||||
// Copyright 2014 The Gogs Authors. All rights reserved.
 | 
					// 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
 | 
					// Use of this source code is governed by a MIT-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package admin
 | 
					package admin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"github.com/Unknwon/com"
 | 
					 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/Unknwon/com"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@ -30,7 +30,6 @@ func Notices(ctx *context.Context) {
 | 
				
			|||||||
	if page <= 1 {
 | 
						if page <= 1 {
 | 
				
			||||||
		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)
 | 
						notices, err := models.Notices(page, setting.UI.Admin.NoticePagingNum)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -40,6 +39,9 @@ func Notices(ctx *context.Context) {
 | 
				
			|||||||
	ctx.Data["Notices"] = notices
 | 
						ctx.Data["Notices"] = notices
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Total"] = total
 | 
						ctx.Data["Total"] = total
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.Data["Page"] = context.NewPagination(int(total), setting.UI.Admin.NoticePagingNum, page, 5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.HTML(200, tplNotices)
 | 
						ctx.HTML(200, tplNotices)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -17,8 +17,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/user"
 | 
						"code.gitea.io/gitea/routers/user"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@ -151,10 +149,13 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Data["Keyword"] = keyword
 | 
						ctx.Data["Keyword"] = keyword
 | 
				
			||||||
	ctx.Data["Total"] = count
 | 
						ctx.Data["Total"] = count
 | 
				
			||||||
	ctx.Data["Page"] = paginater.New(int(count), opts.PageSize, page, 5)
 | 
					 | 
				
			||||||
	ctx.Data["Repos"] = repos
 | 
						ctx.Data["Repos"] = repos
 | 
				
			||||||
	ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
 | 
						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)
 | 
						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["Keyword"] = opts.Keyword
 | 
				
			||||||
	ctx.Data["Total"] = count
 | 
						ctx.Data["Total"] = count
 | 
				
			||||||
	ctx.Data["Page"] = paginater.New(int(count), opts.PageSize, opts.Page, 5)
 | 
					 | 
				
			||||||
	ctx.Data["Users"] = users
 | 
						ctx.Data["Users"] = users
 | 
				
			||||||
	ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail
 | 
						ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail
 | 
				
			||||||
	ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
 | 
						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)
 | 
						ctx.HTML(200, tplName)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -364,11 +368,14 @@ func ExploreCode(ctx *context.Context) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Keyword"] = keyword
 | 
						ctx.Data["Keyword"] = keyword
 | 
				
			||||||
	pager := paginater.New(total, setting.UI.RepoSearchPagingNum, page, 5)
 | 
					 | 
				
			||||||
	ctx.Data["Page"] = pager
 | 
					 | 
				
			||||||
	ctx.Data["SearchResults"] = searchResults
 | 
						ctx.Data["SearchResults"] = searchResults
 | 
				
			||||||
	ctx.Data["RequireHighlightJS"] = true
 | 
						ctx.Data["RequireHighlightJS"] = true
 | 
				
			||||||
	ctx.Data["PageIsViewCode"] = 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)
 | 
						ctx.HTML(200, tplExploreCode)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
// Copyright 2014 The Gogs Authors. All rights reserved.
 | 
					// 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
 | 
					// Use of this source code is governed by a MIT-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// 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/git"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@ -55,7 +54,6 @@ func Commits(ctx *context.Context) {
 | 
				
			|||||||
	if page <= 1 {
 | 
						if page <= 1 {
 | 
				
			||||||
		page = 1
 | 
							page = 1
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Data["Page"] = paginater.New(int(commitsCount), git.CommitsRangeSize, page, 5)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Both `git log branchName` and `git log commitId` work.
 | 
						// Both `git log branchName` and `git log commitId` work.
 | 
				
			||||||
	commits, err := ctx.Repo.Commit.CommitsByRange(page)
 | 
						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["Reponame"] = ctx.Repo.Repository.Name
 | 
				
			||||||
	ctx.Data["CommitCount"] = commitsCount
 | 
						ctx.Data["CommitCount"] = commitsCount
 | 
				
			||||||
	ctx.Data["Branch"] = ctx.Repo.BranchName
 | 
						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)
 | 
						ctx.HTML(200, tplCommits)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -160,7 +163,6 @@ func FileHistory(ctx *context.Context) {
 | 
				
			|||||||
	if page <= 1 {
 | 
						if page <= 1 {
 | 
				
			||||||
		page = 1
 | 
							page = 1
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Data["Page"] = paginater.New(int(commitsCount), git.CommitsRangeSize, page, 5)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange(branchName, fileName, page)
 | 
						commits, err := ctx.Repo.GitRepo.CommitsByFileAndRange(branchName, fileName, page)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -177,6 +179,11 @@ func FileHistory(ctx *context.Context) {
 | 
				
			|||||||
	ctx.Data["FileName"] = fileName
 | 
						ctx.Data["FileName"] = fileName
 | 
				
			||||||
	ctx.Data["CommitCount"] = commitsCount
 | 
						ctx.Data["CommitCount"] = commitsCount
 | 
				
			||||||
	ctx.Data["Branch"] = branchName
 | 
						ctx.Data["Branch"] = branchName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pager := context.NewPagination(int(commitsCount), git.CommitsRangeSize, page, 5)
 | 
				
			||||||
 | 
						pager.SetDefaultParams(ctx)
 | 
				
			||||||
 | 
						ctx.Data["Page"] = pager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.HTML(200, tplCommits)
 | 
						ctx.HTML(200, tplCommits)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -27,7 +27,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/Unknwon/com"
 | 
						"github.com/Unknwon/com"
 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@ -186,8 +185,7 @@ func issues(ctx *context.Context, milestoneID int64, isPullOption util.OptionalB
 | 
				
			|||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		total = int(issueStats.ClosedCount)
 | 
							total = int(issueStats.ClosedCount)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	pager := paginater.New(total, setting.UI.IssuePagingNum, page, 5)
 | 
						pager := context.NewPagination(total, setting.UI.IssuePagingNum, page, 5)
 | 
				
			||||||
	ctx.Data["Page"] = pager
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var issues []*models.Issue
 | 
						var issues []*models.Issue
 | 
				
			||||||
	if forceEmpty {
 | 
						if forceEmpty {
 | 
				
			||||||
@ -199,7 +197,7 @@ func issues(ctx *context.Context, milestoneID int64, isPullOption util.OptionalB
 | 
				
			|||||||
			PosterID:    posterID,
 | 
								PosterID:    posterID,
 | 
				
			||||||
			MentionedID: mentionedID,
 | 
								MentionedID: mentionedID,
 | 
				
			||||||
			MilestoneID: milestoneID,
 | 
								MilestoneID: milestoneID,
 | 
				
			||||||
			Page:        pager.Current(),
 | 
								Page:        pager.Paginater.Current(),
 | 
				
			||||||
			PageSize:    setting.UI.IssuePagingNum,
 | 
								PageSize:    setting.UI.IssuePagingNum,
 | 
				
			||||||
			IsClosed:    util.OptionalBoolOf(isShowClosed),
 | 
								IsClosed:    util.OptionalBoolOf(isShowClosed),
 | 
				
			||||||
			IsPull:      isPullOption,
 | 
								IsPull:      isPullOption,
 | 
				
			||||||
@ -268,6 +266,15 @@ func issues(ctx *context.Context, milestoneID int64, isPullOption util.OptionalB
 | 
				
			|||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		ctx.Data["State"] = "open"
 | 
							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
 | 
					// Issues render issues page
 | 
				
			||||||
 | 
				
			|||||||
@ -14,7 +14,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/markup/markdown"
 | 
						"code.gitea.io/gitea/modules/markup/markdown"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@ -51,7 +50,6 @@ func Milestones(ctx *context.Context) {
 | 
				
			|||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		total = int(closedCount)
 | 
							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)
 | 
						miles, err := models.GetMilestones(ctx.Repo.Repository.ID, page, isShowClosed, sortType)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@ -77,6 +75,11 @@ func Milestones(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ctx.Data["SortType"] = sortType
 | 
						ctx.Data["SortType"] = sortType
 | 
				
			||||||
	ctx.Data["IsShowClosed"] = isShowClosed
 | 
						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)
 | 
						ctx.HTML(200, tplMilestone)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -15,8 +15,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/markup/markdown"
 | 
						"code.gitea.io/gitea/modules/markup/markdown"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@ -120,9 +118,12 @@ func Releases(ctx *context.Context) {
 | 
				
			|||||||
		r.Note = markdown.RenderString(r.Note, ctx.Repo.RepoLink, ctx.Repo.Repository.ComposeMetas())
 | 
							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
 | 
						ctx.Data["Releases"] = releases
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pager := context.NewPagination(int(count), limit, page, 5)
 | 
				
			||||||
 | 
						pager.SetDefaultParams(ctx)
 | 
				
			||||||
 | 
						ctx.Data["Page"] = pager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.HTML(200, tplReleases)
 | 
						ctx.HTML(200, tplReleases)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -12,8 +12,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/search"
 | 
						"code.gitea.io/gitea/modules/search"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tplSearch base.TplName = "repo/search"
 | 
					const tplSearch base.TplName = "repo/search"
 | 
				
			||||||
@ -36,12 +34,15 @@ func Search(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Data["Keyword"] = keyword
 | 
						ctx.Data["Keyword"] = keyword
 | 
				
			||||||
	pager := paginater.New(total, setting.UI.RepoSearchPagingNum, page, 5)
 | 
					 | 
				
			||||||
	ctx.Data["Page"] = pager
 | 
					 | 
				
			||||||
	ctx.Data["SourcePath"] = setting.AppSubURL + "/" +
 | 
						ctx.Data["SourcePath"] = setting.AppSubURL + "/" +
 | 
				
			||||||
		path.Join(ctx.Repo.Repository.Owner.Name, ctx.Repo.Repository.Name, "src", "branch", ctx.Repo.Repository.DefaultBranch)
 | 
							path.Join(ctx.Repo.Repository.Owner.Name, ctx.Repo.Repository.Name, "src", "branch", ctx.Repo.Repository.DefaultBranch)
 | 
				
			||||||
	ctx.Data["SearchResults"] = searchResults
 | 
						ctx.Data["SearchResults"] = searchResults
 | 
				
			||||||
	ctx.Data["RequireHighlightJS"] = true
 | 
						ctx.Data["RequireHighlightJS"] = true
 | 
				
			||||||
	ctx.Data["PageIsViewCode"] = 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)
 | 
						ctx.HTML(200, tplSearch)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/markup"
 | 
						"code.gitea.io/gitea/modules/markup"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/templates"
 | 
						"code.gitea.io/gitea/modules/templates"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@ -462,10 +460,10 @@ func RenderUserCards(ctx *context.Context, total int, getter func(page int) ([]*
 | 
				
			|||||||
	if page <= 0 {
 | 
						if page <= 0 {
 | 
				
			||||||
		page = 1
 | 
							page = 1
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	pager := paginater.New(total, models.ItemsPerPage, page, 5)
 | 
						pager := context.NewPagination(total, models.ItemsPerPage, page, 5)
 | 
				
			||||||
	ctx.Data["Page"] = pager
 | 
						ctx.Data["Page"] = pager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	items, err := getter(pager.Current())
 | 
						items, err := getter(pager.Paginater.Current())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.ServerError("getter", err)
 | 
							ctx.ServerError("getter", err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@ -480,6 +478,7 @@ func Watchers(ctx *context.Context) {
 | 
				
			|||||||
	ctx.Data["Title"] = ctx.Tr("repo.watchers")
 | 
						ctx.Data["Title"] = ctx.Tr("repo.watchers")
 | 
				
			||||||
	ctx.Data["CardsTitle"] = ctx.Tr("repo.watchers")
 | 
						ctx.Data["CardsTitle"] = ctx.Tr("repo.watchers")
 | 
				
			||||||
	ctx.Data["PageIsWatchers"] = true
 | 
						ctx.Data["PageIsWatchers"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	RenderUserCards(ctx, ctx.Repo.Repository.NumWatches, ctx.Repo.Repository.GetWatchers, tplWatchers)
 | 
						RenderUserCards(ctx, ctx.Repo.Repository.NumWatches, ctx.Repo.Repository.GetWatchers, tplWatchers)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -18,7 +18,6 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/Unknwon/com"
 | 
						"github.com/Unknwon/com"
 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
	"github.com/keybase/go-crypto/openpgp"
 | 
						"github.com/keybase/go-crypto/openpgp"
 | 
				
			||||||
	"github.com/keybase/go-crypto/openpgp/armor"
 | 
						"github.com/keybase/go-crypto/openpgp/armor"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -354,7 +353,6 @@ func Issues(ctx *context.Context) {
 | 
				
			|||||||
	ctx.Data["CommitStatus"] = commitStatus
 | 
						ctx.Data["CommitStatus"] = commitStatus
 | 
				
			||||||
	ctx.Data["Repos"] = showRepos
 | 
						ctx.Data["Repos"] = showRepos
 | 
				
			||||||
	ctx.Data["Counts"] = counts
 | 
						ctx.Data["Counts"] = counts
 | 
				
			||||||
	ctx.Data["Page"] = paginater.New(total, setting.UI.IssuePagingNum, page, 5)
 | 
					 | 
				
			||||||
	ctx.Data["IssueStats"] = issueStats
 | 
						ctx.Data["IssueStats"] = issueStats
 | 
				
			||||||
	ctx.Data["ViewType"] = viewType
 | 
						ctx.Data["ViewType"] = viewType
 | 
				
			||||||
	ctx.Data["SortType"] = sortType
 | 
						ctx.Data["SortType"] = sortType
 | 
				
			||||||
@ -367,6 +365,16 @@ func Issues(ctx *context.Context) {
 | 
				
			|||||||
		ctx.Data["State"] = "open"
 | 
							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)
 | 
						ctx.HTML(200, tplIssues)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -534,10 +542,13 @@ func showOrgProfile(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Repos"] = repos
 | 
						ctx.Data["Repos"] = repos
 | 
				
			||||||
	ctx.Data["Total"] = count
 | 
						ctx.Data["Total"] = count
 | 
				
			||||||
	ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5)
 | 
					 | 
				
			||||||
	ctx.Data["Members"] = org.Members
 | 
						ctx.Data["Members"] = org.Members
 | 
				
			||||||
	ctx.Data["Teams"] = org.Teams
 | 
						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)
 | 
						ctx.HTML(200, tplOrgHome)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
					package user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
@ -6,8 +10,6 @@ import (
 | 
				
			|||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
@ -80,7 +82,11 @@ func Notifications(c *context.Context) {
 | 
				
			|||||||
	c.Data["Keyword"] = keyword
 | 
						c.Data["Keyword"] = keyword
 | 
				
			||||||
	c.Data["Status"] = status
 | 
						c.Data["Status"] = status
 | 
				
			||||||
	c.Data["Notifications"] = notifications
 | 
						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)
 | 
						c.HTML(200, tplNotification)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -10,8 +10,6 @@ import (
 | 
				
			|||||||
	"path"
 | 
						"path"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/Unknwon/paginater"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/models"
 | 
						"code.gitea.io/gitea/models"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
@ -127,6 +125,7 @@ func Profile(ctx *context.Context) {
 | 
				
			|||||||
	var (
 | 
						var (
 | 
				
			||||||
		repos   []*models.Repository
 | 
							repos   []*models.Repository
 | 
				
			||||||
		count   int64
 | 
							count   int64
 | 
				
			||||||
 | 
							total   int
 | 
				
			||||||
		orderBy models.SearchOrderBy
 | 
							orderBy models.SearchOrderBy
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -201,18 +200,14 @@ func Profile(ctx *context.Context) {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ctx.Data["Repos"] = repos
 | 
							total = int(count)
 | 
				
			||||||
		ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5)
 | 
					 | 
				
			||||||
		ctx.Data["Total"] = count
 | 
					 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		if len(keyword) == 0 {
 | 
							if len(keyword) == 0 {
 | 
				
			||||||
			var total int
 | 
					 | 
				
			||||||
			repos, err = models.GetUserRepositories(ctxUser.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String())
 | 
								repos, err = models.GetUserRepositories(ctxUser.ID, showPrivate, page, setting.UI.User.RepoPagingNum, orderBy.String())
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				ctx.ServerError("GetRepositories", err)
 | 
									ctx.ServerError("GetRepositories", err)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			ctx.Data["Repos"] = repos
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if showPrivate {
 | 
								if showPrivate {
 | 
				
			||||||
				total = ctxUser.NumRepos
 | 
									total = ctxUser.NumRepos
 | 
				
			||||||
@ -224,9 +219,6 @@ func Profile(ctx *context.Context) {
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
				total = int(count)
 | 
									total = int(count)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			ctx.Data["Page"] = paginater.New(total, setting.UI.User.RepoPagingNum, page, 5)
 | 
					 | 
				
			||||||
			ctx.Data["Total"] = total
 | 
					 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
 | 
								repos, count, err = models.SearchRepositoryByName(&models.SearchRepoOptions{
 | 
				
			||||||
				Keyword:     keyword,
 | 
									Keyword:     keyword,
 | 
				
			||||||
@ -244,11 +236,15 @@ func Profile(ctx *context.Context) {
 | 
				
			|||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			ctx.Data["Repos"] = repos
 | 
								total = int(count)
 | 
				
			||||||
			ctx.Data["Page"] = paginater.New(int(count), setting.UI.User.RepoPagingNum, page, 5)
 | 
					 | 
				
			||||||
			ctx.Data["Total"] = 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)
 | 
						ctx.Data["ShowUserEmail"] = len(ctxUser.Email) > 0 && ctx.IsSigned && (!ctxUser.KeepEmailPrivate || ctxUser.ID == ctx.User.ID)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -66,29 +66,7 @@
 | 
				
			|||||||
			</table>
 | 
								</table>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		{{with .Page}}
 | 
							{{ template "base/paginate" . }}
 | 
				
			||||||
			{{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}}
 | 
					 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -44,7 +44,7 @@
 | 
				
			|||||||
							<td>{{.NumIssues}}</td>
 | 
												<td>{{.NumIssues}}</td>
 | 
				
			||||||
							<td>{{SizeFmt .Size}}</td>
 | 
												<td>{{SizeFmt .Size}}</td>
 | 
				
			||||||
							<td><span title="{{.CreatedUnix.FormatLong}}">{{.CreatedUnix.FormatShort}}</span></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>
 | 
											</tr>
 | 
				
			||||||
					{{end}}
 | 
										{{end}}
 | 
				
			||||||
				</tbody>
 | 
									</tbody>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,22 +1,23 @@
 | 
				
			|||||||
{{with .Page}}
 | 
					{{$paginationLink := .Page.GetParams}}
 | 
				
			||||||
 | 
					{{with .Page.Paginater}}
 | 
				
			||||||
	{{if gt .TotalPages 1}}
 | 
						{{if gt .TotalPages 1}}
 | 
				
			||||||
		<div class="center page buttons">
 | 
							<div class="center page buttons">
 | 
				
			||||||
			<div class="ui borderless pagination menu">
 | 
								<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 .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}}?sort={{$.SortType}}&page={{.Previous}}&q={{$.Keyword}}&tab={{$.TabName}}"{{end}}>
 | 
									<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>
 | 
										<i class="left arrow icon"></i><span class="navigation_label"> {{$.i18n.Tr "repo.issues.previous"}}</span>
 | 
				
			||||||
				</a>
 | 
									</a>
 | 
				
			||||||
				{{range .Pages}}
 | 
									{{range .Pages}}
 | 
				
			||||||
					{{if eq .Num -1}}
 | 
										{{if eq .Num -1}}
 | 
				
			||||||
						<a class="disabled item">...</a>
 | 
											<a class="disabled item">...</a>
 | 
				
			||||||
					{{else}}
 | 
										{{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}}
 | 
				
			||||||
				{{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>
 | 
										<span class="navigation_label">{{$.i18n.Tr "repo.issues.next"}} </span><i class="icon right arrow"></i>
 | 
				
			||||||
				</a>
 | 
									</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>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	{{end}}
 | 
						{{end}}
 | 
				
			||||||
 | 
				
			|||||||
@ -258,27 +258,7 @@
 | 
				
			|||||||
				</li>
 | 
									</li>
 | 
				
			||||||
			{{end}}
 | 
								{{end}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			{{with .Page}}
 | 
								{{template "base/paginate" .}}
 | 
				
			||||||
				{{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}}
 | 
					 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
				
			|||||||
@ -228,27 +228,7 @@
 | 
				
			|||||||
				</li>
 | 
									</li>
 | 
				
			||||||
			{{end}}
 | 
								{{end}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			{{with .Page}}
 | 
								{{template "base/paginate" .}}
 | 
				
			||||||
				{{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}}
 | 
					 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
				
			|||||||
@ -86,27 +86,7 @@
 | 
				
			|||||||
				</li>
 | 
									</li>
 | 
				
			||||||
			{{end}}
 | 
								{{end}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			{{with .Page}}
 | 
								{{template "base/paginate" .}}
 | 
				
			||||||
				{{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}}
 | 
					 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
				
			|||||||
@ -23,25 +23,5 @@
 | 
				
			|||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
	</ul>
 | 
						</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{{with .Page}}
 | 
						{{ template "base/paginate" . }}
 | 
				
			||||||
		{{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}}
 | 
					 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
				
			|||||||
@ -113,27 +113,7 @@
 | 
				
			|||||||
						</li>
 | 
											</li>
 | 
				
			||||||
					{{end}}
 | 
										{{end}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					{{with .Page}}
 | 
										{{template "base/paginate" .}}
 | 
				
			||||||
						{{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}}
 | 
					 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user