guestbook/ui/views/common.templ

86 lines
2.2 KiB
Plaintext

package views
import "git.32bit.cafe/32bitcafe/guestbook/internal/models"
import "strconv"
type CommonData struct {
CurrentYear int
Flash string
IsAuthenticated bool
CSRFToken string
CurrentUser *models.User
IsHtmx bool
}
func shortIdToSlug(shortId uint64) string {
return strconv.FormatUint(shortId, 36)
}
func slugToShortId(slug string) uint64 {
id, _ := strconv.ParseUint(slug, 36, 64)
return id
}
templ commonHeader() {
<header>
<h1><a href="/">webweav.ing</a></h1>
</header>
}
templ topNav(data CommonData) {
<nav>
<div>
if data.IsAuthenticated {
Welcome, { data.CurrentUser.Username }
}
</div>
<div>
if data.IsAuthenticated {
<a href="/guestbooks">All Guestbooks</a> |
<a href="/websites">My Websites</a> |
<a href="/users/settings">Settings</a> |
<form action="/users/logout" method="post">
<input type="hidden" name="csrf_token" value={ data.CSRFToken }>
<button>Logout</button>
</form>
} else {
<a href="/users/register">Create an Account</a> |
<a href="/users/login">Login</a>
}
</div>
</nav>
}
templ commonFooter() {
<footer>
<p>Generated with Templ</p>
<p>A <a href="https://32bit.cafe">32-bit cafe</a> Project</p>
</footer>
}
templ base(title string, data CommonData) {
<!DOCTYPE html>
<html lang="en">
<head>
<title>{ title } - webweav.ing</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/static/css/style.css" rel="stylesheet">
<script src="/static/js/htmx.min.js"></script>
</head>
<body>
@commonHeader()
@topNav(data)
<main>
if data.Flash != "" {
<div class="flash">{ data.Flash }</div>
}
{ children... }
</main>
@commonFooter()
</body>
</html>
}