diff options
-rw-r--r-- | routes/template.go | 35 | ||||
-rw-r--r-- | templates/file.html | 5 | ||||
-rw-r--r-- | templates/head.html | 1 | ||||
-rw-r--r-- | templates/nav.html | 1 |
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 }} |