Settings gear in topbar linking to placeholder /settings page (#36)
CI / test (push) Successful in 20s
CI / docker (push) Skipped

- layout.html: inline SVG gear icon top-right, styled as .iconbtn.gear pill
- new settings.html template reusing standard layout with under-construction card
- register GET /settings route in main.go
This commit is contained in:
2026-09-08 21:27:02 -05:00
parent efa8c7145c
commit 5b7198fb3c
6 changed files with 26 additions and 0 deletions
+1
View File
@@ -367,6 +367,7 @@ func (a *apiServer) routes() http.Handler {
r.Get("/", http.RedirectHandler("/history", http.StatusFound).ServeHTTP) r.Get("/", http.RedirectHandler("/history", http.StatusFound).ServeHTTP)
r.Get("/new", a.handleNewPage) r.Get("/new", a.handleNewPage)
r.Get("/history", a.handleHistoryPage) r.Get("/history", a.handleHistoryPage)
r.Get("/settings", a.handleSettingsPage)
r.Handle("/static/*", staticHandler()) r.Handle("/static/*", staticHandler())
r.Get("/unlock/{id}", a.handlePasteView) r.Get("/unlock/{id}", a.handlePasteView)
r.Post("/unlock/{id}", a.handlePasteView) r.Post("/unlock/{id}", a.handlePasteView)
BIN
View File
Binary file not shown.
+4
View File
@@ -66,6 +66,10 @@ func (a *apiServer) handleHistoryPage(w http.ResponseWriter, r *http.Request) {
renderPage(w, "history.html", map[string]any{"Page": "history"}) renderPage(w, "history.html", map[string]any{"Page": "history"})
} }
func (a *apiServer) handleSettingsPage(w http.ResponseWriter, r *http.Request) {
renderPage(w, "settings.html", map[string]any{"Page": "settings"})
}
func agoString(ts int64) string { func agoString(ts int64) string {
s := time.Now().Unix() - ts s := time.Now().Unix() - ts
switch { switch {
+5
View File
@@ -128,6 +128,11 @@ body {
.stats-v { color: var(--fg); word-break: break-all; } .stats-v { color: var(--fg); word-break: break-all; }
.meta-bar .spacer { flex: 1; } .meta-bar .spacer { flex: 1; }
.iconbtn { border: 1px solid var(--border); background: var(--surface-2); color: var(--muted-fg); border-radius: var(--radius); padding: 5px 12px; font: inherit; font-size: 21.6px; cursor: pointer; text-decoration: none; } .iconbtn { border: 1px solid var(--border); background: var(--surface-2); color: var(--muted-fg); border-radius: var(--radius); padding: 5px 12px; font: inherit; font-size: 21.6px; cursor: pointer; text-decoration: none; }
.iconbtn.gear { display: inline-flex; align-items: center; padding: 5px 9px; }
.iconbtn.gear svg { width: 22px; height: 22px; }
.settings-head { padding: 12px 18px; border-bottom: 1px solid var(--border); }
.settings-head h1 { font-size: 29.2px; font-weight: 600; margin: 0; }
.settings-body { padding: 16px 18px; color: var(--muted-fg); font-size: 21.6px; }
.iconbtn:hover { color: var(--fg); border-color: var(--muted); } .iconbtn:hover { color: var(--fg); border-color: var(--muted); }
.iconbtn.danger:hover { color: #ff8fa3; border-color: #ff8fa3; } .iconbtn.danger:hover { color: #ff8fa3; border-color: #ff8fa3; }
.code-head { .code-head {
+3
View File
@@ -13,5 +13,8 @@
<a href="https://git.archfox.org/poslop/palette" target="_blank" rel="noopener">Git</a> <a href="https://git.archfox.org/poslop/palette" target="_blank" rel="noopener">Git</a>
</nav> </nav>
<div class="spacer"></div> <div class="spacer"></div>
<a class="iconbtn gear" href="/settings" title="Settings" aria-label="Settings">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
</a>
</div> </div>
{{end}} {{end}}
+13
View File
@@ -0,0 +1,13 @@
{{template "head" .}}
{{template "topbar" .}}
<div class="page">
<div class="float">
<div class="settings-head">
<h1>Settings</h1>
</div>
<div class="settings-body">
<p>Settings are under construction.</p>
</div>
</div>
</div>
{{template "foot" .}}