github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/r/demo/boards/render.gno (about)

     1  package boards
     2  
     3  import (
     4  	"strconv"
     5  	"strings"
     6  )
     7  
     8  //----------------------------------------
     9  // Render functions
    10  
    11  func RenderBoard(bid BoardID) string {
    12  	board := getBoard(bid)
    13  	if board == nil {
    14  		return "missing board"
    15  	}
    16  	return board.RenderBoard()
    17  }
    18  
    19  func Render(path string) string {
    20  	if path == "" {
    21  		str := "These are all the boards of this realm:\n\n"
    22  		gBoards.Iterate("", "", func(key string, value interface{}) bool {
    23  			board := value.(*Board)
    24  			str += " * [" + board.url + "](" + board.url + ")\n"
    25  			return false
    26  		})
    27  		return str
    28  	}
    29  	parts := strings.Split(path, "/")
    30  	if len(parts) == 1 {
    31  		// /r/demo/boards:BOARD_NAME
    32  		name := parts[0]
    33  		boardI, exists := gBoardsByName.Get(name)
    34  		if !exists {
    35  			return "board does not exist: " + name
    36  		}
    37  		return boardI.(*Board).RenderBoard()
    38  	} else if len(parts) == 2 {
    39  		// /r/demo/boards:BOARD_NAME/THREAD_ID
    40  		name := parts[0]
    41  		boardI, exists := gBoardsByName.Get(name)
    42  		if !exists {
    43  			return "board does not exist: " + name
    44  		}
    45  		pid, err := strconv.Atoi(parts[1])
    46  		if err != nil {
    47  			return "invalid thread id: " + parts[1]
    48  		}
    49  		board := boardI.(*Board)
    50  		thread := board.GetThread(PostID(pid))
    51  		if thread == nil {
    52  			return "thread does not exist with id: " + parts[1]
    53  		}
    54  		return thread.RenderPost("", 5)
    55  	} else if len(parts) == 3 {
    56  		// /r/demo/boards:BOARD_NAME/THREAD_ID/REPLY_ID
    57  		name := parts[0]
    58  		boardI, exists := gBoardsByName.Get(name)
    59  		if !exists {
    60  			return "board does not exist: " + name
    61  		}
    62  		pid, err := strconv.Atoi(parts[1])
    63  		if err != nil {
    64  			return "invalid thread id: " + parts[1]
    65  		}
    66  		board := boardI.(*Board)
    67  		thread := board.GetThread(PostID(pid))
    68  		if thread == nil {
    69  			return "thread does not exist with id: " + parts[1]
    70  		}
    71  		rid, err := strconv.Atoi(parts[2])
    72  		if err != nil {
    73  			return "invalid reply id: " + parts[2]
    74  		}
    75  		reply := thread.GetReply(PostID(rid))
    76  		if reply == nil {
    77  			return "reply does not exist with id: " + parts[2]
    78  		}
    79  		return reply.RenderInner()
    80  	} else {
    81  		return "unrecognized path " + path
    82  	}
    83  }