package boards
import (
"std"
"strconv"
"strings"
"gno.land/r/users"
)
//----------------------------------------
// private utility methods
// XXX ensure these cannot be called from public.
func getBoard(bid BoardID) *Board {
bidkey := boardIDKey(bid)
board_, exists := gBoards.Get(bidkey)
if !exists {
return nil
}
board := board_.(*Board)
return board
}
func incGetBoardID() BoardID {
gBoardsCtr++
return BoardID(gBoardsCtr)
}
func padLeft(str string, length int) string {
if len(str) >= length {
return str
} else {
return strings.Repeat(" ", length-len(str)) + str
}
}
func padZero(u64 uint64, length int) string {
str := strconv.Itoa(int(u64))
if len(str) >= length {
return str
} else {
return strings.Repeat("0", length-len(str)) + str
}
}
func boardIDKey(bid BoardID) string {
return padZero(uint64(bid), 10)
}
func postIDKey(pid PostID) string {
return padZero(uint64(pid), 10)
}
func indentBody(indent string, body string) string {
lines := strings.Split(body, "\n")
res := ""
for i, line := range lines {
if i > 0 {
res += "\n"
}
res += indent + line
}
return res
}
// NOTE: length must be greater than 3.
func summaryOf(str string, length int) string {
lines := strings.SplitN(str, "\n", 2)
line := lines[0]
if len(line) > length {
line = line[:(length-3)] + "..."
} else if len(lines) > 1 {
// len(line) <= 80
line = line + "..."
}
return line
}
func displayAddressMD(addr std.Address) string {
user := users.GetUserByAddress(addr)
if user == nil {
return "[" + addr.String() + "](/r/users:" + addr.String() + ")"
} else {
return "[@" + user.Name() + "](/r/users:" + user.Name() + ")"
}
}
func usernameOf(addr std.Address) string {
user := users.GetUserByAddress(addr)
if user == nil {
return ""
} else {
return user.Name()
}
}