summaryrefslogtreecommitdiff
path: root/vrsite/templates/layout.tmpl
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-07-24 11:39:36 -0300
committerGabriel Schneider <[email protected]>2026-07-30 15:18:55 -0300
commitcb05c363045bf0e7af5858f6d7bc26f026fa9d70 (patch)
treec3e89426ff044ffe339dd3a77e7f3b7115cba636 /vrsite/templates/layout.tmpl
downloadnotevi-cb05c363045bf0e7af5858f6d7bc26f026fa9d70.tar.gz
notevi-cb05c363045bf0e7af5858f6d7bc26f026fa9d70.zip
Diffstat (limited to 'vrsite/templates/layout.tmpl')
-rw-r--r--vrsite/templates/layout.tmpl71
1 files changed, 71 insertions, 0 deletions
diff --git a/vrsite/templates/layout.tmpl b/vrsite/templates/layout.tmpl
new file mode 100644
index 0000000..c3fe250
--- /dev/null
+++ b/vrsite/templates/layout.tmpl
@@ -0,0 +1,71 @@
+<!doctype html>
+<html lang="en"{{if .Live}} data-live="1"{{end}}>
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>{{.Title}}</title>
+<script>
+{const d = document.documentElement, t = localStorage.getItem("vrsite-theme");
+ if (t && t !== "system") d.dataset.theme = t;
+ d.dataset.mode = localStorage.getItem("vrsite-mode") || "trace";}
+</script>
+<link rel="stylesheet" href="{{.Href "asset" "style.css"}}">
+{{if .Live}}<script src="{{.Href "asset" "htmx.min.js"}}"></script>{{end}}
+<script src="{{.Href "asset" "app.js"}}" defer></script>
+</head>
+<body{{if eq .Kind "file"}} class="with-aside"{{end}} data-kind="{{.Kind}}">
+
+<nav aria-label="repository files" id="nav" data-root="{{.Root}}" data-current="{{.Current}}" data-tree="{{.Href "tree"}}">
+ <header>
+ <a class="brand" href="{{.Href ""}}">{{.Site.Title}}</a>
+ <div class="modes" role="group" aria-label="focus">
+ <button type="button" class="mode" data-mode="trace" title="reading coverage (t)">trace</button>
+ <button type="button" class="mode" data-mode="notes" title="notes and comments (t)">notes</button>
+ </div>
+ </header>
+ {{if and .Live .Rev}}
+ <p class="meta atrev">browsing <a href="{{.Href "change" .ChangeID}}"><code>{{short .ChangeID}}</code></a> · <a href="/">back to @</a></p>
+ {{end}}
+ {{if .Live}}
+ <div id="activity" class="activity" hx-get="/activity?compact=1" hx-trigger="load, every 3s" hx-swap="innerHTML"></div>
+ {{end}}
+ <input id="filefind" class="find" type="search" placeholder="find file…" aria-label="find file" autocomplete="off" spellcheck="false">
+ <div id="tree"><p class="meta hint">loading tree…</p></div>
+ <footer>
+ <span>
+ <a href="{{.Href "notes"}}">notes ({{len .Site.Notes}})</a> ·
+ <a href="{{.Href "files"}}">files</a>{{if .Live}} ·
+ <a href="{{.Href "jj"}}">jj</a>{{end}}
+ </span>
+ <select id="themesel" aria-label="color scheme">
+ <option value="system">system</option>
+ <option value="dark">dark</option>
+ <option value="light">light</option>
+ </select>
+ </footer>
+</nav>
+
+<main>
+{{if .Err}}<p class="err">{{.Err}}</p>{{end}}
+{{if eq .Kind "file"}}{{template "page-file" .}}
+{{else if eq .Kind "notes"}}{{template "page-notes" .}}
+{{else if eq .Kind "files"}}{{template "page-files" .}}
+{{else if eq .Kind "jj"}}{{template "page-jj" .}}
+{{else if eq .Kind "change"}}{{template "page-change" .}}
+{{else}}{{template "page-index" .}}{{end}}
+</main>
+
+{{if eq .Kind "file"}}
+<aside aria-label="notes" class="notes-only">
+ <header class="asidehead">
+ <b>Notes (<span id="notecount">{{len .File.Notes}}</span>)</b>
+ {{if .Live}}<span class="meta">click a line to attach</span>{{end}}
+ </header>
+ {{if .Live}}{{template "noteform" .}}{{end}}
+ <div id="notelist">{{range .File.Notes}}{{template "note" (dict "N" . "P" $)}}{{end}}</div>
+ {{if not .File.Notes}}<p class="meta hint">no notes on this file yet</p>{{end}}
+</aside>
+{{end}}
+
+</body>
+</html>