diff options
| author | gramanas <grm@eyesin.space> | 2026-09-12 11:24:17 +0300 |
|---|---|---|
| committer | gramanas <grm@eyesin.space> | 2026-09-12 11:24:17 +0300 |
| commit | 3eb04b1a2bdf9e53231fe862cfd76327371a9741 (patch) | |
| tree | b38b2d82a47233fd8e0bb18c59e4a8f3dd2412d7 /internal/web/templates/layouts/blog.html | |
| download | blogspace-3eb04b1a2bdf9e53231fe862cfd76327371a9741.tar.gz blogspace-3eb04b1a2bdf9e53231fe862cfd76327371a9741.tar.bz2 blogspace-3eb04b1a2bdf9e53231fe862cfd76327371a9741.zip | |
Initial multi-tenant blog host
Go + Postgres application serving a management dashboard on the base
domain and one public blog per subdomain. Markdown posts organised in
pages, form-based theme customisation, image uploads stored in Postgres,
JWT cookie sessions with CSRF, superadmin user management, RSS feeds.
Docker/compose deployment and a Makefile-driven dev environment with
seed data.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Sd8UPWrvyYCLj97JexNw3A
Diffstat (limited to 'internal/web/templates/layouts/blog.html')
| -rw-r--r-- | internal/web/templates/layouts/blog.html | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/internal/web/templates/layouts/blog.html b/internal/web/templates/layouts/blog.html new file mode 100644 index 0000000..7e3128e --- /dev/null +++ b/internal/web/templates/layouts/blog.html @@ -0,0 +1,38 @@ +{{define "layout"}}<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, initial-scale=1"> +<title>{{block "title" .}}{{.Blog.Title}}{{end}}</title> +<link rel="alternate" type="application/rss+xml" title="{{.Blog.Title}}" href="/feed.xml"> +<link rel="stylesheet" href="/static/blog.css"> +<style>{{css .Data.css}}</style> +</head> +<body class="nav-{{.Data.theme.NavPosition}}"> +{{if eq .Data.theme.NavPosition "top-bar"}}{{template "blognav" .}}{{end}} +<div class="site-header"> + {{if .Data.theme.HeaderImage}}<div class="header-image"><a href="/"><img src="/media/{{.Data.theme.HeaderImage}}" alt=""></a></div>{{end}} + {{if .Data.theme.HeaderShowTitle}}<div class="wrap header-text"> + <h1 class="site-title"><a href="/">{{.Blog.Title}}</a></h1> + {{if .Blog.Tagline}}<p class="tagline">{{.Blog.Tagline}}</p>{{end}} + </div>{{end}} +</div> +{{if eq .Data.theme.NavPosition "below-header"}}{{template "blognav" .}}{{end}} +<div class="wrap body-wrap"> + {{if eq .Data.theme.NavPosition "left-sidebar"}}{{template "blognav" .}}{{end}} + <div class="content"> + {{template "content" .}} + </div> +</div> +<div class="site-footer"> + <div class="wrap footer-inner"> + {{if .Data.theme.FooterText}}<p>{{.Data.theme.FooterText}}</p>{{end}} + <p class="small"><a href="/feed.xml">RSS</a> · {{.Blog.Title}}</p> + </div> +</div> +</body> +</html>{{end}} + +{{define "blognav"}}<div class="site-nav"><div class="wrap nav-inner"> +{{range .Data.nav}}<a href="{{if .IsHome}}/{{else}}/{{.Slug}}{{end}}"{{if and $.Data.page (eq $.Data.page.ID .ID)}} class="active"{{end}}>{{.Title}}</a> +{{end}}</div></div>{{end}} |
