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

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

render.gno

1.62 Kb · 64 lines
 1package lotto
 2
 3import (
 4	"net/url"
 5	"strconv"
 6)
 7
 8func Render(path string) string {
 9	output := `# AKKADIA Lotto
10
11Look up owners and their quantities for a number.
12
13<gno-form path="number">
14  <gno-input name="number" placeholder="Enter a number" />
15</gno-form>
16
17`
18	u, err := url.Parse(path)
19	if err != nil {
20		return output + "Invalid URL\n"
21	}
22	query, err := url.ParseQuery(u.RawQuery)
23	if err != nil {
24		return output + "Invalid query\n"
25	}
26	switch u.Path {
27	case "":
28		return output
29	case "number":
30		raw := query.Get("number")
31		if raw == "" {
32			return output + "Number is required\n"
33		}
34		number, err := strconv.ParseUint(raw, 10, 64)
35		if err != nil {
36			return output + "Invalid number\n"
37		}
38		afterOwner := query.Get("afterOwner")
39		if afterOwner != "" && !address(afterOwner).IsValid() {
40			return output + "Invalid cursor address\n"
41		}
42		numberStr := strconv.FormatUint(number, 10)
43		page := ListOwnersByNumber(number, afterOwner, 20)
44		output += "## Number " + numberStr + "\n\n"
45		output += "[Home](./lotto:)\n\n"
46		if afterOwner != "" {
47			output += "[First page](./lotto:number?number=" + numberStr + ")\n\n"
48		}
49		if len(page) == 0 {
50			return output + "No owners on this page.\n"
51		}
52		output += "| Owner | Count |\n| --- | ---: |\n"
53		for _, item := range page {
54			// Owners are validated addresses and counts are formatted integers.
55			output += "| " + item["owner"] + " | " + item["count"] + " |\n"
56		}
57		if page[0]["nextOwner"] != "" {
58			output += "\n[Next](./lotto:number?number=" + numberStr + "&afterOwner=" + url.QueryEscape(page[0]["nextOwner"]) + ")\n"
59		}
60		return output
61	default:
62		return output + "Page not found\n"
63	}
64}