all repos — legit @ 5091695e75b2db30b8926d8aa17164c84031bc77

web frontend for git, written in go

templates: repo and log
Anirudh Oppiliappan x@icyphox.sh
Sat, 17 Dec 2022 21:33:04 +0530
commit

5091695e75b2db30b8926d8aa17164c84031bc77

parent

4eaaf451295ce9b541769d1322543f2d982ef5b0

M routes/routes.goroutes/routes.go

@@ -45,13 +45,7 @@ log.Println(err)

return } - var desc string - db, err := os.ReadFile(filepath.Join(path, "description")) - if err == nil { - desc = string(db) - } else { - desc = "" - } + desc := getDescription(path) infos = append(infos, info{ Name: dir.Name(),

@@ -83,7 +77,7 @@ d.Write404(w)

return } - files, err := gr.FileTree("") + commits, err := gr.Commits() if err != nil { d.Write500(w) log.Println(err)

@@ -109,12 +103,25 @@ log.Println(err)

return } + tpath := filepath.Join(d.c.Dirs.Templates, "*") + t := template.Must(template.ParseGlob(tpath)) + + if len(commits) >= 5 { + commits = commits[:5] + } + data := make(map[string]any) data["name"] = name data["ref"] = mainBranch data["readme"] = readmeContent + data["commits"] = commits + data["desc"] = getDescription(path) - d.listFiles(files, data, w) + if err := t.ExecuteTemplate(w, "repo", data); err != nil { + log.Println(err) + return + } + return }

@@ -283,3 +290,13 @@ f = filepath.Clean(filepath.Join(d.c.Dirs.Static, f))

http.ServeFile(w, r, f) } + +func getDescription(path string) (desc string) { + db, err := os.ReadFile(filepath.Join(path, "description")) + if err == nil { + desc = string(db) + } else { + desc = "" + } + return +}
M routes/template.goroutes/template.go

@@ -37,7 +37,7 @@

data["files"] = files data["meta"] = d.c.Meta - if err := t.ExecuteTemplate(w, "repo", data); err != nil { + if err := t.ExecuteTemplate(w, "tree", data); err != nil { log.Println(err) return }
M static/style.cssstatic/style.css

@@ -6,12 +6,16 @@ --medium-gray: #ddd;

--gray: #6a6a6a; --dark: #444; --darker: #222; + + --sans-font: "InterVar", -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", sans-serif; + --display-font: "InterDisplay", -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", sans-serif; + --mono-font: monospace; } html { background: var(--light); -webkit-text-size-adjust: none; - font-family: "InterVar", -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", sans-serif; + font-family: var(--sans-font); } ::selection {

@@ -38,7 +42,7 @@ line-height: 160%;

} main h1, h2, h3, .small-heading { - font-family: "InterDisplay", -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", sans-serif; + font-family: var(--display-font); font-weight: 500; }

@@ -94,19 +98,65 @@ }

.index { display: grid; - grid-template-columns: 6em 1fr 7em; + grid-template-columns: 6em 1fr minmax(0, 7em); grid-row-gap: 0.5em; + min-width: 0; } .index-headings { display: grid; - grid-template-columns: 6em 1fr 7em; + grid-template-columns: 6em 1fr minmax(0, 7em); padding-bottom: 1.2em; padding-top: 1.2em; + min-width: 0; } -@media (max-width: 385px) { +.desc { + color: var(--gray); + font-style: italic; +} + +.tree { + display: grid; + grid-template-columns: 8em minmax(0, 1fr); + grid-row-gap: 0.5em; + grid-column-gap: 1em; + min-width: 0; +} + +.log { + display: grid; + grid-template-columns: 20rem minmax(0, 1fr); + grid-row-gap: 0.8em; + grid-column-gap: 8rem; + margin-bottom: 2em; + padding-bottom: 1em; + border-bottom: 1.5px solid var(--medium-gray); +} + +.log pre { + white-space: pre-wrap; +} + +.mode { + font-family: var(--mono-font); +} + +.readme pre { + white-space: pre-wrap; +} + +@media (max-width: 600px) { .index { grid-row-gap: 0.8em; + } + + .log { + grid-template-columns: 1fr; + grid-row-gap: 0em; + } + + .commit-info:not(:last-child) { + padding-bottom: 1.5rem; } }
M templates/index.htmltemplates/index.html

@@ -16,7 +16,7 @@ </div>

<div class="index"> {{ range .info }} <div><a href="/{{ .Name }}">{{ .Name }}</a></div> - <div>{{ .Desc }}</div> + <div class="desc">{{ .Desc }}</div> <div>{{ .Idle }}</div> {{ end }} </div>
M templates/log.htmltemplates/log.html

@@ -9,13 +9,17 @@ </header>

<body> {{ template "nav" . }} <main> - {{ $repo := .name }} - {{ range .commits }} - <p><a href="/{{ $repo }}/commit/{{ .Hash.String }}">{{ slice .Hash.String 0 8 }}<a> - &mdash; {{ .Author.Name }} - <span title="{{ .Author.When }}">{{ .Author.When.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}</span></p> - <p><pre>{{ .Message }}</pre></p> - {{ end }} + {{ $repo := .repo }} + <div class="log"> + {{ range .commits }} + <div> + <div><a href="/{{ $repo }}/commit/{{ .Hash.String }}">{{ slice .Hash.String 0 8 }}</a></div> + <div>{{ .Author.When.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}</div> + <pre>{{ .Message }}</pre> + </div> + <div class="commit-info">{{ .Author.Name }} <span style="color: var(--gray);">{{ .Author.Email }}</span></div> + {{ end }} + </div> </main> </body> </html>
M templates/nav.htmltemplates/nav.html

@@ -1,9 +1,8 @@

{{ define "nav" }} <nav> <ul> - <li><a href="/">all repos</a> {{ if .name }} - <li><a href="/{{ .name }}">{{ .name }}</a> + <li><a href="/{{ .name }}">summary</a> <li><a href="/{{ .name }}/refs">refs</a> {{ if .ref }} <li><a href="/{{ .name }}/tree/{{ .ref }}/">tree</a>
M templates/repo.htmltemplates/repo.html

@@ -1,50 +1,34 @@

{{ define "repo" }} <html> + <title>{{ .name }} + {{ if .parent }} + &mdash; {{ .parent }} + {{ end }} + </title> {{ template "head" . }} <header> - <h1>{{ .meta.Title }}</h1> - <h2>{{ .meta.Description }}</h2> + <h2> + <a href="/">all repos</a> + &mdash; {{ .name }} + </h2> + <h3 class="desc">{{ .desc }}</h3> </header> <body> {{ template "nav" . }} <main> {{ $repo := .name }} - {{ $ref := .ref }} - {{ $parent := .parent }} - - <table> - <tr> - <td></td> - <td><a href="../">..</a> - </tr> - {{ range .files }} - {{ if .IsFile }} - <tr> - <td><code>{{ .Mode }}</code></td> - <td> - {{ if $parent }} - <a href="/{{ $repo }}/blob/{{ $ref }}/{{ $parent }}/{{ .Name }}">{{ .Name }}</a> - {{ else }} - <a href="/{{ $repo }}/blob/{{ $ref }}/{{ .Name }}">{{ .Name }}</a> - {{ end }} - </td> - </tr> - {{ else }} - <tr> - <td><code>{{ .Mode }}</code></td> - <td> - {{ if $parent }} - <a href="/{{ $repo }}/tree/{{ $ref }}/{{ $parent }}/{{ .Name }}">{{ .Name }}/</a> - {{ else }} - <a href="/{{ $repo }}/tree/{{ $ref }}/{{ .Name }}">{{ .Name }}/</a> - {{ end }} - </td> - </tr> + <div class="log"> + {{ range .commits }} + <div> + <div><a href="/{{ $repo }}/commit/{{ .Hash.String }}">{{ slice .Hash.String 0 8 }}</a></div> + <div>{{ .Author.When.Format "Mon, 02 Jan 2006 15:04:05 -0700" }}</div> + <pre>{{ .Message }}</pre> + </div> + <div class="commit-info">{{ .Author.Name }} <span style="color: var(--gray);">{{ .Author.Email }}</span></div> {{ end }} - {{ end }} - </table> - <article> + </div> + <article class="readme"> <pre> {{- if .readme }}{{ .readme }}{{- end -}} </pre>
A templates/tree.html

@@ -0,0 +1,53 @@

+{{ define "tree" }} +<html> + <title>{{ .name }} + {{ if .parent }} + &mdash; {{ .parent }} + {{ end }} + </title> +{{ template "head" . }} + + <header> + <h1>{{ .meta.Title }}</h1> + <h2>{{ .meta.Description }}</h2> + </header> + <body> + {{ template "nav" . }} + <main> + {{ $repo := .name }} + {{ $ref := .ref }} + {{ $parent := .parent }} + + <div class="tree"> + {{ if $parent }} + <div></div> + <div><a href="../">..</a></div> + {{ end }} + {{ range .files }} + <div class="mode">{{ .Mode }}</div> + <div> + {{ if .IsFile }} + {{ if $parent }} + <a href="/{{ $repo }}/blob/{{ $ref }}/{{ $parent }}/{{ .Name }}">{{ .Name }}</a> + {{ else }} + <a href="/{{ $repo }}/blob/{{ $ref }}/{{ .Name }}">{{ .Name }}</a> + {{ end }} + {{ else }} + {{ if $parent }} + <a href="/{{ $repo }}/tree/{{ $ref }}/{{ $parent }}/{{ .Name }}">{{ .Name }}/</a> + {{ else }} + <a href="/{{ $repo }}/tree/{{ $ref }}/{{ .Name }}">{{ .Name }}/</a> + {{ end }} + {{ end }} + </div> + {{ end }} + </div> + <article> + <pre> + {{- if .readme }}{{ .readme }}{{- end -}} + </pre> + </article> + </main> + </body> +</html> +{{ end }}