templates: repo and log
This commit is contained in:
parent
4eaaf45129
commit
5091695e75
|
@ -45,13 +45,7 @@ func (d *deps) Index(w http.ResponseWriter, r *http.Request) {
|
|||
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 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
files, err := gr.FileTree("")
|
||||
commits, err := gr.Commits()
|
||||
if err != nil {
|
||||
d.Write500(w)
|
||||
log.Println(err)
|
||||
|
@ -109,12 +103,25 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) {
|
|||
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)
|
||||
|
||||
if err := t.ExecuteTemplate(w, "repo", data); err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
d.listFiles(files, data, w)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -283,3 +290,13 @@ func (d *deps) ServeStatic(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
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
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ func (d *deps) listFiles(files []git.NiceTree, data map[string]any, w http.Respo
|
|||
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
|
||||
}
|
||||
|
|
|
@ -6,12 +6,16 @@
|
|||
--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 @@ main, footer {
|
|||
}
|
||||
|
||||
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 @@ a:hover {
|
|||
|
||||
.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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<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>
|
||||
|
|
|
@ -9,13 +9,17 @@
|
|||
<body>
|
||||
{{ template "nav" . }}
|
||||
<main>
|
||||
{{ $repo := .name }}
|
||||
{{ range .commits }}
|
||||
<p><a href="/{{ $repo }}/commit/{{ .Hash.String }}">{{ slice .Hash.String 0 8 }}<a>
|
||||
— {{ .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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -1,50 +1,34 @@
|
|||
{{ define "repo" }}
|
||||
<html>
|
||||
<title>{{ .name }}
|
||||
{{ if .parent }}
|
||||
— {{ .parent }}
|
||||
{{ end }}
|
||||
</title>
|
||||
{{ template "head" . }}
|
||||
|
||||
<header>
|
||||
<h1>{{ .meta.Title }}</h1>
|
||||
<h2>{{ .meta.Description }}</h2>
|
||||
<h2>
|
||||
<a href="/">all repos</a>
|
||||
— {{ .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>
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
{{ define "tree" }}
|
||||
<html>
|
||||
<title>{{ .name }}
|
||||
{{ if .parent }}
|
||||
— {{ .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 }}
|
Loading…
Reference in New Issue