switch to gomponents
1 file changed, 54 insertions(+), 30 deletions(-)
changed files
M routes/template.go → routes/template.go
@@ -2,45 +2,63 @@ package routes import ( "bytes" - "html/template" "io" "log" "net/http" - "path/filepath" "strings" "github.com/alecthomas/chroma/v2/formatters/html" "github.com/alecthomas/chroma/v2/lexers" "github.com/alecthomas/chroma/v2/styles" "go.alanpearce.eu/elgit/git" + "go.alanpearce.eu/elgit/templates" ) func (d *deps) Write404(w http.ResponseWriter) { - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - w.WriteHeader(404) - if err := t.ExecuteTemplate(w, "404", nil); err != nil { + w.WriteHeader(http.StatusNotFound) + data := templates.PageData{ + Meta: d.c.Meta, + } + if err := templates.NotFound(data).Render(w); err != nil { log.Printf("404 template: %s", err) } } func (d *deps) Write500(w http.ResponseWriter) { - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - w.WriteHeader(500) - if err := t.ExecuteTemplate(w, "500", nil); err != nil { + w.WriteHeader(http.StatusInternalServerError) + data := templates.PageData{ + Meta: d.c.Meta, + } + if err := templates.ServerError(data).Render(w); err != nil { log.Printf("500 template: %s", err) } } func (d *deps) listFiles(files []git.NiceTree, data map[string]any, w http.ResponseWriter) { - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) + pageData := templates.PageData{ + Meta: d.c.Meta, + DisplayName: getDisplayName(data["name"].(string)), + Name: data["name"].(string), + Ref: data["ref"].(string), + Description: data["desc"].(string), + Parent: "", + } + + if parent, ok := data["parent"]; ok && parent != nil { + pageData.Parent = parent.(string) + } - data["files"] = files - data["meta"] = d.c.Meta + readme := "" + if readmeContent, ok := data["readme"]; ok && readmeContent != nil { + readme = readmeContent.(string) + } - if err := t.ExecuteTemplate(w, "tree", data); err != nil { + dotdot := "" + if dotdotPath, ok := data["dotdot"]; ok && dotdotPath != nil { + dotdot = dotdotPath.(string) + } + + if err := templates.Tree(pageData, files, readme, dotdot).Render(w); err != nil { log.Println(err) return }@@ -77,9 +95,6 @@ name, content string, data map[string]any, w http.ResponseWriter, ) { - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - lexer := lexers.Get(name) if lexer == nil { lexer = lexers.Get(".txt")@@ -108,20 +123,23 @@ d.Write500(w) return } - data["content"] = template.HTML(code.String()) - data["meta"] = d.c.Meta - data["chroma"] = true + pageData := templates.PageData{ + Meta: d.c.Meta, + DisplayName: getDisplayName(data["name"].(string)), + Content: code.String(), + Name: data["name"].(string), + Ref: data["ref"].(string), + Description: data["desc"].(string), + Path: data["path"].(string), + } - if err := t.ExecuteTemplate(w, "file", data); err != nil { + if err := templates.File(pageData, true).Render(w); err != nil { log.Println(err) return } } func (d *deps) showFile(content string, data map[string]any, w http.ResponseWriter) { - tpath := filepath.Join(d.c.Dirs.Templates, "*") - t := template.Must(template.ParseGlob(tpath)) - lc, err := countLines(strings.NewReader(content)) if err != nil { // Non-fatal, we'll just skip showing line numbers in the template.@@ -135,12 +153,18 @@ lines[i] = i + 1 } } - data["linecount"] = lines - data["content"] = content - data["meta"] = d.c.Meta - data["chroma"] = false + pageData := templates.PageData{ + Meta: d.c.Meta, + DisplayName: getDisplayName(data["name"].(string)), + LineCount: lines, + Content: content, + Name: data["name"].(string), + Ref: data["ref"].(string), + Description: data["desc"].(string), + Path: data["path"].(string), + } - if err := t.ExecuteTemplate(w, "file", data); err != nil { + if err := templates.File(pageData, false).Render(w); err != nil { log.Println(err) return }