all repos — elgit @ 5091695e75b2db30b8926d8aa17164c84031bc77

fork of legit: 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 }}