render.gno
2.88 Kb ยท 102 lines
1package profile
2
3import (
4 "bytes"
5 "net/url"
6
7 "gno.land/p/nt/mux"
8 "gno.land/p/nt/ufmt"
9)
10
11const (
12 BaseURL = "/r/demo/profile"
13 SetStringFieldURL = BaseURL + "$help&func=SetStringField&field=%s"
14 SetIntFieldURL = BaseURL + "$help&func=SetIntField&field=%s"
15 SetBoolFieldURL = BaseURL + "$help&func=SetBoolField&field=%s"
16 ViewAllFieldsURL = BaseURL + ":u/%s"
17 ViewFieldURL = BaseURL + ":f/%s/%s"
18)
19
20func homeHandler(res *mux.ResponseWriter, req *mux.Request) {
21 var b bytes.Buffer
22
23 b.WriteString("## Setters\n")
24 for field := range stringFields {
25 link := ufmt.Sprintf(SetStringFieldURL, field)
26 b.WriteString(ufmt.Sprintf("- [Set %s](%s)\n", field, link))
27 }
28
29 for field := range intFields {
30 link := ufmt.Sprintf(SetIntFieldURL, field)
31 b.WriteString(ufmt.Sprintf("- [Set %s](%s)\n", field, link))
32 }
33
34 for field := range boolFields {
35 link := ufmt.Sprintf(SetBoolFieldURL, field)
36 b.WriteString(ufmt.Sprintf("- [Set %s Field](%s)\n", field, link))
37 }
38
39 b.WriteString("\n---\n\n")
40
41 res.Write(b.String())
42}
43
44func profileHandler(res *mux.ResponseWriter, req *mux.Request) {
45 var b bytes.Buffer
46 addr := req.GetVar("addr")
47
48 b.WriteString(ufmt.Sprintf("# Profile %s\n", addr))
49
50 address_XXX := address(addr)
51
52 for field := range stringFields {
53 value := GetStringField(address_XXX, field, "n/a")
54 link := ufmt.Sprintf(SetStringFieldURL, field)
55 b.WriteString(ufmt.Sprintf("- %s: %s [Edit](%s)\n", field, value, link))
56 }
57
58 for field := range intFields {
59 value := GetIntField(address_XXX, field, 0)
60 link := ufmt.Sprintf(SetIntFieldURL, field)
61 b.WriteString(ufmt.Sprintf("- %s: %d [Edit](%s)\n", field, value, link))
62 }
63
64 for field := range boolFields {
65 value := GetBoolField(address_XXX, field, false)
66 link := ufmt.Sprintf(SetBoolFieldURL, field)
67 b.WriteString(ufmt.Sprintf("- %s: %t [Edit](%s)\n", field, value, link))
68 }
69
70 res.Write(b.String())
71}
72
73func fieldHandler(res *mux.ResponseWriter, req *mux.Request) {
74 var b bytes.Buffer
75 addr := req.GetVar("addr")
76 field := req.GetVar("field")
77
78 b.WriteString(ufmt.Sprintf("# Field %s for %s\n", field, addr))
79
80 address_XXX := address(addr)
81 value := "n/a"
82 var editLink string
83
84 if _, ok := stringFields[field]; ok {
85 value = ufmt.Sprintf("%s", GetStringField(address_XXX, field, "n/a"))
86 editLink = ufmt.Sprintf(SetStringFieldURL+"&addr=%s&value=%s", field, addr, url.QueryEscape(value))
87 } else if _, ok := intFields[field]; ok {
88 value = ufmt.Sprintf("%d", GetIntField(address_XXX, field, 0))
89 editLink = ufmt.Sprintf(SetIntFieldURL+"&addr=%s&value=%s", field, addr, value)
90 } else if _, ok := boolFields[field]; ok {
91 value = ufmt.Sprintf("%t", GetBoolField(address_XXX, field, false))
92 editLink = ufmt.Sprintf(SetBoolFieldURL+"&addr=%s&value=%s", field, addr, value)
93 }
94
95 b.WriteString(ufmt.Sprintf("- %s: %s [Edit](%s)\n", field, value, editLink))
96
97 res.Write(b.String())
98}
99
100func Render(path string) string {
101 return router.Render(path)
102}