2019-04-20 07:15:19 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2019-04-20 07:15:19 +03:00
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
}
2023-03-14 08:11:38 +03:00
// NewPagination creates a new instance of the Pagination struct.
// "pagingNum" is "page size" or "limit", "current" is "page"
func NewPagination ( total , pagingNum , current , numPages int ) * Pagination {
2019-04-20 07:15:19 +03:00
p := & Pagination { }
2023-03-14 08:11:38 +03:00
p . Paginater = paginator . New ( total , pagingNum , current , 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
}
2023-07-04 21:36:08 +03:00
paramData := fmt . Sprintf ( "%v" , ctx . Data [ ctxKey ] ) // cast any to string
2019-04-20 07:15:19 +03:00
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" )
2022-04-03 12:46:48 +03:00
// do not add any more uncommon params here!
2024-03-15 02:24:59 +03:00
p . AddParam ( ctx , "fuzzy" , "IsFuzzy" )
2019-04-20 07:15:19 +03:00
}