1package profile23import (4 "bytes"5 "net/url"67 "gno.land/p/nt/mux/v0"8 "gno.land/p/nt/ufmt/v0"9)1011const (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)1920func homeHandler(res *mux.ResponseWriter, req *mux.Request) {21 var b bytes.Buffer2223 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 }2829 for field := range intFields {30 link := ufmt.Sprintf(SetIntFieldURL, field)31 b.WriteString(ufmt.Sprintf("- [Set %s](%s)\n", field, link))32 }3334 for field := range boolFields {35 link := ufmt.Sprintf(SetBoolFieldURL, field)36 b.WriteString(ufmt.Sprintf("- [Set %s Field](%s)\n", field, link))37 }3839 b.WriteString("\n---\n\n")4041 res.Write(b.String())42}4344func profileHandler(res *mux.ResponseWriter, req *mux.Request) {45 var b bytes.Buffer46 addr := req.GetVar("addr")4748 b.WriteString(ufmt.Sprintf("# Profile %s\n", addr))4950 address_XXX := address(addr)5152 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 }5758 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 }6364 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 }6970 res.Write(b.String())71}7273func fieldHandler(res *mux.ResponseWriter, req *mux.Request) {74 var b bytes.Buffer75 addr := req.GetVar("addr")76 field := req.GetVar("field")7778 b.WriteString(ufmt.Sprintf("# Field %s for %s\n", field, addr))7980 address_XXX := address(addr)81 value := "n/a"82 var editLink string8384 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 }9495 b.WriteString(ufmt.Sprintf("- %s: %s [Edit](%s)\n", field, value, editLink))9697 res.Write(b.String())98}99100func Render(path string) string {101 return router.Render(path)102}103GetBoolField(addr string, field string, def bool) bool
GetIntField(addr string, field string, def int) int
GetStringField(addr string, field string, def string) string
Render(path string) string
SetBoolField(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, field string, value bool) bool
SetIntField(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, field string, value int) bool
SetStringField(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, field string, value string) bool
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.