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



                 
             



                                            
                                   






                                                                                                                                    
                                                                             







                                                                          
















                                                                                                                                                                   















                                                                                                                                              
                                                                                                                 











                                                                    
package views

import (
	"context"
	"fmt"
	"gitrepo.ru/neonxp/gorum/contextlib"
	"gitrepo.ru/neonxp/gorum/models"
)

templ Layout(parent *models.Node) {
	<!DOCTYPE html>
	<html lang="ru">
		<head>
			<meta charset="utf-8"/>
			<meta name="viewport" content="width=device-width, initial-scale=1"/>
			<meta name="color-scheme" content="light dark"/>
			<link rel="stylesheet" href={ "/assets/css/pico." + ctx.Value(contextlib.ThemeKey).(string) + ".min.css" }/>
			<link rel="stylesheet" href="/assets/css/style.css"/>
			<title>Gorum</title>
		</head>
		<body>
			<nav class="container-fluid">
				<ul>
					<li>
						<strong>Gorum BBS</strong>
					</li>
					if parent != nil {
						<li>
							<a href="/">Список тем</a>
						</li>
						<li>
							switch parent.Type {
								case models.PostType:
									<a href={ templ.URL(fmt.Sprintf("/p/%d", parent.ID)) }>На уровень выше</a>
								case models.TopicType:
									<a href={ templ.URL(fmt.Sprintf("/t/%d", parent.ID)) }>К предыдущей теме</a>
							}
						</li>
					} else {
						<li>
							<a href="/">Список тем</a>
						</li>
					}
				</ul>
				<ul>
					if isAuthorized(ctx) {
						// <li><a href="/topic/new">Новая тема</a></li>
						<li>{ getUser(ctx).Username }</li>
						<li><form action="/logout" method="POST"><input type="submit" value="Выход"/></form></li>
					} else {
						<li><a href="/login">Вход</a></li>
						<li><a href="/register">Регистрация</a></li>
					}
				</ul>
			</nav>
			<main class="container">
				{ children... }
			</main>
			<footer class="container-fluid">
				<small>Работает на <a href="https://neonxp.ru/gorum">Gorum</a>.</small>
			</footer>
		</body>
	</html>
}

func isAuthorized(ctx context.Context) bool {
	_, authorized := ctx.Value(contextlib.UserKey).(models.User)
	return authorized
}
func getUser(ctx context.Context) models.User {
	return ctx.Value(contextlib.UserKey).(models.User)
}