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