template: line numbers for file view
This commit is contained in:
parent
eda8b58d9f
commit
d879c2dfb0
4 changed files with 41 additions and 1 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -9,6 +9,11 @@
|
|||
<body>
|
||||
{{ template "nav" . }}
|
||||
<main>
|
||||
<pre>
|
||||
{{ range .linecount }}
|
||||
<a id="#L{{ . }}" href="#{{ . }}">{{ . }}</a>
|
||||
{{- end -}}
|
||||
</pre>
|
||||
<pre>
|
||||
{{ .content }}
|
||||
</pre>
|
||||
|
|
|
@ -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 }}
|
||||
|
|
|
@ -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 }}
|
||||
|
|
Loading…
Reference in a new issue