Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

v0 source pure

Package pageable implements a flexible pagination system that can be used with any data structure that implements the...

Readme View source

gno.land/p/moul/pageable/v0

TODO: describe this package.


Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.

Dependency graph:

gno.land/p/moul/pageable/v0 dependency graph

⚠️ Disclaimer: provided as-is, without warranty; not security-audited. Full disclaimer: DISCLAIMER.

Overview

Package pageable implements a flexible pagination system that can be used with any data structure that implements the Pageable interface. It provides functionality for:

  • Paginating through collections of items
  • Configurable page sizes
  • Forward and reverse iteration
  • URL query parameter parsing
  • Markdown-based pagination UI

This package is currently used by:

  • gno.land/p/nt/avl/pager: implementation for AVL trees.
  • gno.land/p/moul/ulist/pager: implementation for ulist

Functions 1

func NewPager

1func NewPager(source Pageable, defaultPageSize int, reversed bool) *Pager
source

NewPager creates a new Pager with default values

Types 4

type Item

struct
1type Item struct {
2	Index interface{}
3	Value interface{}
4}
source

Item represents a generic item in the page

type Page

struct
 1type Page struct {
 2	Items      []Item
 3	PageNumber int
 4	PageSize   int
 5	TotalItems int
 6	TotalPages int
 7	HasPrev    bool
 8	HasNext    bool
 9	Pager      *Pager
10}
source

Page represents a single page of results

Methods on Page

func Picker

method on Page
1func (p *Page) Picker() string
source

Picker generates the Markdown UI for the page picker using default query string format

func PickerWithPath

method on Page
1func (p *Page) PickerWithPath(path string) string
source

PickerWithPath generates the Markdown UI for the page picker with optional path If path is provided, it preserves existing query parameters (except page)

type Pageable

interface
 1type Pageable interface {
 2	// Size returns the total number of items
 3	Size() int
 4
 5	// IterateByOffset performs iteration starting from offset for count elements.
 6	// The callback receives an index and a value, returns true to stop iteration.
 7	//
 8	// For reverse iteration, the implementation should handle the direction internally
 9	// by adjusting how it interprets the offset and count parameters. For example:
10	// - In forward mode: offset 0, count 5 would return items [0,1,2,3,4]
11	// - In reverse mode: offset 0, count -5 would return items [4,3,2,1,0]
12	//
13	// This approach allows the interface to remain simple while supporting
14	// bidirectional iteration through the implementation layer.
15	IterateByOffset(offset int, count int, cb func(index interface{}, value interface{}) bool) bool
16}
source

Pageable defines the minimal interface required for pagination. This interface is intentionally lightweight, requiring only two methods. While some data structures (like AVL trees) might have separate methods for forward and reverse iteration, this interface consolidates both directions into a single IterateByOffset method. It's the responsibility of the implementing wrapper to handle the direction logic internally based on the offset and count parameters.

type Pager

struct
1type Pager struct {
2	Source          Pageable
3	PageQueryParam  string
4	SizeQueryParam  string
5	DefaultPageSize int
6	Reversed        bool
7}
source

Pager provides pagination functionality for any Pageable source

Methods on Pager

func GetPage

method on Pager
1func (p *Pager) GetPage(pageNumber int) *Page
source

GetPage retrieves a page of results from the AVL tree.

func GetPageByPath

method on Pager
1func (p *Pager) GetPageByPath(rawURL string) (*Page, error)
source

GetPageByPath retrieves a page of results based on the query parameters in the URL path.

func GetPageWithSize

method on Pager
1func (p *Pager) GetPageWithSize(pageNumber, pageSize int) *Page
source

func ParseQuery

method on Pager
1func (p *Pager) ParseQuery(rawURL string) (int, int, error)
source

Imports 4

Source Files 3