package main import ( "bytes" "io" "mime" "path" "strings" "util" ) var ( tmplPage = util.NewTemplate("got/page.html.got") tmplViewTree = util.NewTemplate("got/view_tree.got") tmplViewBlob = util.NewTemplate("got/view_blob.got") tmplModified = util.NewTemplate("got/modified.got") tmplDeleted = util.NewTemplate("got/deleted.got") ) func renderPage(w io.Writer, title, head, body string) error { return tmplPage.Execute(w, map[string]string{ "title": title, "head": head, "body": body, }) } func renderViewTree(w io.Writer, upath string, tree GitTree) error { // Pre-processing files := make(GitTree) for name, file := range tree { if !strings.HasPrefix(name, upath) { continue } name = strings.TrimPrefix(name, upath) if len(name) == 0 || strings.Contains(name, "/") { continue } files[name] = file } // Component Render var buf bytes.Buffer err := tmplViewTree.Execute(&buf, map[string]interface{}{ "path": upath, "files": files, }) if err != nil { return err } // Page render return renderPage(w, upath, "", buf.String()) } func renderViewBlob(w io.Writer, upath string, file GitFile) error { // Pre-processing content, err := file.Cat() if err != nil { return err } // Component render var buf bytes.Buffer err = tmplViewBlob.Execute(&buf, map[string]string{ "path": upath, "ctype": mime.TypeByExtension(path.Ext(upath)), "content": string(content), }) if err != nil { return err } // Page render return renderPage(w, upath, "", buf.String()) } func renderModified(w io.Writer, upath string) error { // TODO return nil } func renderDeleted(w io.Writer, upath string) error { // TODO return nil }