aboutsummaryrefslogblamecommitdiff
path: root/views/nodes.templ
blob: e6a120c378eaf68230b541fa3c515a5a245f1cc1 (plain) (tree)
1
2
3
4
5
6
7
8
9





                                        
                 

 














                                                                                                                              
                                            



                                                                              
                                             







                                                                  



                                                            
                                                   

                                      
                                          








                                                                                                    



                                                                                        









                                                         





                                                                                
                                            

                                                     

                               
                                                                 


                                                        





                                                                                                                                       

                  






                                         
package views

import (
	"fmt"
	"gitrepo.ru/neonxp/gorum/models"
	"gitrepo.ru/neonxp/gorum/utils"
	"strconv"
)

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>
						<th>Тема</th>
						<th>Тем/Ответов</th>
						<th>Дата</th>
						<th>Автор</th>
					</tr>
				</thead>
				<tbody>
					for _, n := range topics {
						@Topic(n)
					}
				</tbody>
			</table>
		}
		if len(nodes) == 0 {
			<strong>Постов нет</strong>
		}
		for _, n := range nodes {
			@Post(n, level(node), true)
		}
		if isAuthorized(ctx) {
			@NewPostForm(node)
		} else {
			<a href="/login">Войдите</a> чтобы ответить в тему.
		}
	}
}

templ Topic(n *models.Node) {
	<tr>
		<td>
			<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) }
		</td>
		<td>
			{ n.Author.Username }
		</td>
	</tr>
}

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>
				{ n.Author.Username }
			</span>
			<span>
				{ utils.FormatDate(n.CreatedAt) }
			</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
}