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

render.gno

2.88 Kb · 102 lines
  1package profile
  2
  3import (
  4	"bytes"
  5	"net/url"
  6
  7	"gno.land/p/nt/mux/v0"
  8	"gno.land/p/nt/ufmt/v0"
  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}