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"
2024-12-11 09:33:24 +03:00
"net/http"
2019-04-20 07:15:19 +03:00
"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
}
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 )
}
2024-12-11 09:33:24 +03:00
func ( p * Pagination ) AddParamFromRequest ( req * http . Request ) {
for key , values := range req . URL . Query ( ) {
if key == "page" || len ( values ) == 0 {
continue
}
for _ , value := range values {
urlParam := fmt . Sprintf ( "%s=%v" , 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 ) {
2024-03-16 15:07:56 +03:00
if v , ok := ctx . Data [ "SortType" ] . ( string ) ; ok {
p . AddParamString ( "sort" , v )
}
if v , ok := ctx . Data [ "Keyword" ] . ( string ) ; ok {
p . AddParamString ( "q" , v )
}
if v , ok := ctx . Data [ "IsFuzzy" ] . ( bool ) ; ok {
p . AddParamString ( "fuzzy" , fmt . Sprint ( v ) )
}
2022-04-03 12:46:48 +03:00
// do not add any more uncommon params here!
2019-04-20 07:15:19 +03:00
}