2019-04-20 07:15:19 +03:00
// 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"
2022-04-03 12:46:48 +03:00
"code.gitea.io/gitea/modules/paginator"
2019-04-20 07:15:19 +03:00
)
2022-04-03 12:46:48 +03:00
// Pagination provides a pagination via paginator.Paginator and additional configurations for the link params used in rendering
2019-04-20 07:15:19 +03:00
type Pagination struct {
2022-04-03 12:46:48 +03:00
Paginater * paginator . Paginator
2019-04-20 07:15:19 +03:00
urlParams [ ] string
}
// NewPagination creates a new instance of the Pagination struct
2021-12-20 07:41:31 +03:00
func NewPagination ( total , page , issueNum , numPages int ) * Pagination {
2019-04-20 07:15:19 +03:00
p := & Pagination { }
2022-04-03 12:46:48 +03:00
p . Paginater = paginator . New ( total , page , issueNum , numPages )
2019-04-20 07:15:19 +03:00
return p
}
// AddParam adds a value from context identified by ctxKey as link param under a given paramKey
2021-12-20 07:41:31 +03:00
func ( p * Pagination ) AddParam ( ctx * Context , paramKey , ctxKey string ) {
2019-04-20 07:15:19 +03:00
_ , 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 )
}
2020-11-08 20:21:54 +03:00
// AddParamString adds a string parameter directly
2021-12-20 07:41:31 +03:00
func ( p * Pagination ) AddParamString ( key , value string ) {
2020-11-08 20:21:54 +03:00
urlParam := fmt . Sprintf ( "%s=%v" , url . QueryEscape ( key ) , url . QueryEscape ( value ) )
p . urlParams = append ( p . urlParams , urlParam )
}
2019-04-20 07:15:19 +03:00
// GetParams returns the configured URL params
func ( p * Pagination ) GetParams ( ) template . URL {
2019-06-12 22:41:28 +03:00
return template . URL ( strings . Join ( p . urlParams , "&" ) )
2019-04-20 07:15:19 +03:00
}
// 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" )
2022-04-03 12:46:48 +03:00
// do not add any more uncommon params here!
2021-01-27 13:00:35 +03:00
p . AddParam ( ctx , "t" , "queryType" )
2019-04-20 07:15:19 +03:00
}