misc.gno

1.92 Kb ยท 96 lines
 1package groups
 2
 3import (
 4	"std"
 5	"strconv"
 6	"strings"
 7
 8	"gno.land/r/demo/users"
 9)
10
11//----------------------------------------
12// private utility methods
13// XXX ensure these cannot be called from public.
14
15func getGroup(gid GroupID) *Group {
16	gidkey := groupIDKey(gid)
17	group_, exists := gGroups.Get(gidkey)
18	if !exists {
19		panic("group id (" + gid.String() + ") does not exists")
20	}
21	group := group_.(*Group)
22	return group
23}
24
25func incGetGroupID() GroupID {
26	gGroupsCtr++
27	return GroupID(gGroupsCtr)
28}
29
30func padLeft(str string, length int) string {
31	if len(str) >= length {
32		return str
33	}
34	return strings.Repeat(" ", length-len(str)) + str
35}
36
37func padZero(u64 uint64, length int) string {
38	str := strconv.Itoa(int(u64))
39	if len(str) >= length {
40		return str
41	}
42	return strings.Repeat("0", length-len(str)) + str
43}
44
45func groupIDKey(gid GroupID) string {
46	return padZero(uint64(gid), 10)
47}
48
49func memberIDKey(mid MemberID) string {
50	return padZero(uint64(mid), 10)
51}
52
53func indentBody(indent string, body string) string {
54	lines := strings.Split(body, "\n")
55	res := ""
56	for i, line := range lines {
57		if i > 0 {
58			res += "\n"
59		}
60		res += indent + line
61	}
62	return res
63}
64
65// NOTE: length must be greater than 3.
66func summaryOf(str string, length int) string {
67	lines := strings.SplitN(str, "\n", 2)
68	line := lines[0]
69	if len(line) > length {
70		line = line[:(length-3)] + "..."
71	} else if len(lines) > 1 {
72		// len(line) <= 80
73		line = line + "..."
74	}
75	return line
76}
77
78func displayAddressMD(addr std.Address) string {
79	user := users.GetUserByAddress(addr)
80	if user == nil {
81		return "[" + addr.String() + "](/r/demo/users:" + addr.String() + ")"
82	}
83	return "[@" + user.Name + "](/r/demo/users:" + user.Name + ")"
84}
85
86func usernameOf(addr std.Address) string {
87	user := users.GetUserByAddress(addr)
88	if user == nil {
89		panic("user not found")
90	}
91	return user.Name
92}
93
94func isValidPermission(perm Permission) bool {
95	return perm == EditPermission || perm == DeletePermission
96}