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