diff options
Diffstat (limited to 'views/nodes.templ')
-rw-r--r-- | views/nodes.templ | 93 |
1 files changed, 55 insertions, 38 deletions
diff --git a/views/nodes.templ b/views/nodes.templ index c9baf2e..e6a120c 100644 --- a/views/nodes.templ +++ b/views/nodes.templ @@ -4,44 +4,46 @@ import ( "fmt" "gitrepo.ru/neonxp/gorum/models" "gitrepo.ru/neonxp/gorum/utils" + "strconv" ) -templ Node(node *models.Node, nodes []*models.Node, count int) { - @Layout() { - <h1>{ node.Text }</h1> - <table> - <thead> - <tr> - <th>Тема</th> - <th>Дата</th> - <th>Автор</th> - </tr> - </thead> - <tbody> - for _, n := range nodes { - if n.Type == models.TopicType { - @Topic(n) - } - } - if len(nodes) == 0 { +templ Node(node *models.Node, topics []*models.Node, nodes []*models.Node) { + @Layout(node.Parent) { + switch node.Type { + case models.TopicType: + <h1>{ node.Text }</h1> + <div> + <a href={ templ.URL(fmt.Sprintf("/t/%d/new", node.ID)) }>Новая подтема</a> + </div> + case models.PostType: + <h1>Пост</h1> + @Post(node, 0, false) + } + if len(topics) != 0 { + <table> + <thead> <tr> - <td colspan="3"> - <strong>Тем нет</strong> - </td> + <th>Тема</th> + <th>Тем/Ответов</th> + <th>Дата</th> + <th>Автор</th> </tr> - } - </tbody> - </table> + </thead> + <tbody> + for _, n := range topics { + @Topic(n) + } + </tbody> + </table> + } if len(nodes) == 0 { <strong>Постов нет</strong> } for _, n := range nodes { - if n.Type == models.PostType { - @Post(n) - } + @Post(n, level(node), true) } if isAuthorized(ctx) { - @NewNode(node) + @NewPostForm(node) } else { <a href="/login">Войдите</a> чтобы ответить в тему. } @@ -51,7 +53,10 @@ templ Node(node *models.Node, nodes []*models.Node, count int) { templ Topic(n *models.Node) { <tr> <td> - <a href={ templ.URL(fmt.Sprintf("/n/%d", n.ID)) }>{ n.Text }</a> + <a href={ templ.URL(fmt.Sprintf("/t/%d", n.ID)) }>{ n.Text }</a> + </td> + <td> + { strconv.Itoa(len(n.Children)) } </td> <td> { utils.FormatDate(n.CreatedAt) } @@ -62,21 +67,33 @@ templ Topic(n *models.Node) { </tr> } -templ Post(n *models.Node) { - <article id={ fmt.Sprintf("post%d", n.ID) }> +css levelStyle(level int) { + margin-left: { fmt.Sprintf("%dem", level) }; +} + +templ Post(n *models.Node, level int, withFooter bool) { + <article id={ fmt.Sprintf("post%d", n.ID) } class={ levelStyle(level) }> <header class="post-header"> - <span>Пост</span> <span> { n.Author.Username } - в + </span> + <span> { utils.FormatDate(n.CreatedAt) } - <a - href={ templ.URL(fmt.Sprintf("/n/%d#post%d", n.ParentID, n.ID)) } - > - # - </a> </span> </header> @templ.Raw(utils.MarkdownToHTML(n.Text)) + if withFooter { + <footer class="post-header"> + <a href={ templ.URL(fmt.Sprintf("/p/%d/new", n.ID)) }>Ответить</a> + <a href={ templ.URL(fmt.Sprintf("/p/%d", n.ID)) }>Ответов: { strconv.Itoa(len(n.Children)) }</a> + </footer> + } </article> } + +func level(node *models.Node) int { + if node.Type == models.PostType { + return 1 + } + return 0 +} |