mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:56:10 +01:00 
			
		
		
		
	
				
					committed by
					
						 techknowlogick
						techknowlogick
					
				
			
			
				
	
			
			
			
						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> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user