34 lines
666 B
Go
34 lines
666 B
Go
|
package form
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type Cursor struct {
|
||
|
PerPage int
|
||
|
Pagination bool
|
||
|
Name string
|
||
|
Val string
|
||
|
Colspan int
|
||
|
}
|
||
|
|
||
|
func (cursor *Cursor) FillValue(r *http.Request) {
|
||
|
cursor.Val = strings.TrimSpace(r.FormValue(cursor.Name))
|
||
|
cursor.Pagination = cursor.Val != ""
|
||
|
}
|
||
|
|
||
|
func (cursor *Cursor) Params() []string {
|
||
|
return strings.Split(cursor.Val, ";")
|
||
|
}
|
||
|
|
||
|
func BuildCursor[K interface{}](cursor *Cursor, elems []K, build func(K) []string) []K {
|
||
|
if len(elems) <= cursor.PerPage {
|
||
|
cursor.Val = ""
|
||
|
return elems
|
||
|
}
|
||
|
elems = elems[:cursor.PerPage]
|
||
|
cursor.Val = strings.Join(build(elems[cursor.PerPage-1]), ";")
|
||
|
return elems
|
||
|
}
|