render.gno

2.86 Kb ยท 103 lines
  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}