summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Anirudh Oppiliappan <x@icyphox.sh>2022-12-13 11:50:39 +0530
committerLibravatar Anirudh Oppiliappan <x@icyphox.sh>2022-12-13 11:50:39 +0530
commitd879c2dfb088cb7911e322694c101fb0bdf7c0c0 (patch)
tree919c5b8b9d2ce3aafccef0c19eb6e91e5f3b53f1
parenteda8b58d9f2e85f1bae92ce3b70f279b89031046 (diff)
downloadlegit-d879c2dfb088cb7911e322694c101fb0bdf7c0c0.tar.gz
legit-d879c2dfb088cb7911e322694c101fb0bdf7c0c0.tar.bz2
legit-d879c2dfb088cb7911e322694c101fb0bdf7c0c0.zip
template: line numbers for file view
Diffstat (limited to '')
-rw-r--r--routes/template.go35
-rw-r--r--templates/file.html5
-rw-r--r--templates/head.html1
-rw-r--r--templates/nav.html1
4 files changed, 41 insertions, 1 deletions
diff --git a/routes/template.go b/routes/template.go
index bc1dd37..3d1e1cf 100644
--- a/routes/template.go
+++ b/routes/template.go
@@ -1,10 +1,13 @@
package routes
import (
+ "bytes"
"html/template"
+ "io"
"log"
"net/http"
"path/filepath"
+ "strings"
"icyphox.sh/legit/git"
)
@@ -40,12 +43,42 @@ func (d *deps) listFiles(files []git.NiceTree, data map[string]any, w http.Respo
}
}
+func countLines(r io.Reader) (int, error) {
+ buf := make([]byte, 32*1024)
+ count := 0
+ nl := []byte{'\n'}
+
+ for {
+ c, err := r.Read(buf)
+ count += bytes.Count(buf[:c], nl)
+
+ switch {
+ case err == io.EOF:
+ return count, nil
+ case err != nil:
+ return 0, err
+ }
+ }
+}
+
func (d *deps) showFile(content string, data map[string]any, w http.ResponseWriter) {
tpath := filepath.Join(d.c.Template.Dir, "*")
t := template.Must(template.ParseGlob(tpath))
- // TODO: Process content here.
+ lc, err := countLines(strings.NewReader(content))
+ if err != nil {
+ // Non-fatal, we'll just skip showing line numbers in the template.
+ log.Printf("counting lines: %s", err)
+ }
+
+ lines := make([]int, lc)
+ if lc > 0 {
+ for i := range lines {
+ lines[i] = i + 1
+ }
+ }
+ data["linecount"] = lines
data["content"] = content
data["meta"] = d.c.Meta
diff --git a/templates/file.html b/templates/file.html
index ed6073f..ed658e3 100644
--- a/templates/file.html
+++ b/templates/file.html
@@ -9,6 +9,11 @@
<body>
{{ template "nav" . }}
<main>
+ <pre>
+{{ range .linecount }}
+<a id="#L{{ . }}" href="#{{ . }}">{{ . }}</a>
+{{- end -}}
+ </pre>
<pre>
{{ .content }}
</pre>
diff --git a/templates/head.html b/templates/head.html
index 3739342..a128b6b 100644
--- a/templates/head.html
+++ b/templates/head.html
@@ -2,6 +2,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/static/style.css" type="text/css">
<!-- other meta tags here -->
</head>
{{ end }}
diff --git a/templates/nav.html b/templates/nav.html
index a8fa84a..973eae2 100644
--- a/templates/nav.html
+++ b/templates/nav.html
@@ -9,6 +9,7 @@
<li><a href="/{{ .name }}/tree/{{ .ref }}/">tree</a>
<li><a href="/{{ .name }}/log/{{ .ref }}">log</a>
{{ end }}
+ <li><a href="/{{ .name }}/refs">refs</a>
</ul>
</nav>
{{ end }}