Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}