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}