avl_pager.gno

1.01 Kb ยท 40 lines
 1package avl_pager
 2
 3import (
 4	"strconv"
 5
 6	"gno.land/p/demo/avl"
 7	"gno.land/p/demo/avl/pager"
 8)
 9
10// Tree instance for 100 items
11var tree *avl.Tree
12
13// Initialize a tree with 100 items.
14func init() {
15	tree = avl.NewTree()
16	for i := 1; i <= 100; i++ {
17		key := "Item" + strconv.Itoa(i)
18		tree.Set(key, "Value of "+key)
19	}
20}
21
22// Render paginated content based on the given URL path.
23// URL format: `...?page=<page>&size=<size>` (default is page 1 and size 10).
24func Render(path string) string {
25	p := pager.NewPager(tree, 10, false) // Default page size is 10
26	page := p.MustGetPageByPath(path)
27
28	// Header and pagination info
29	result := "# Paginated Items\n"
30	result += "Page " + strconv.Itoa(page.PageNumber) + " of " + strconv.Itoa(page.TotalPages) + "\n\n"
31	result += page.Picker(path) + "\n\n"
32
33	// Display items on the current page
34	for _, item := range page.Items {
35		result += "- " + item.Key + ": " + item.Value.(string) + "\n"
36	}
37
38	result += "\n" + page.Picker(path) // Repeat page picker for ease of navigation
39	return result
40}