summaryrefslogtreecommitdiff
path: root/src/edit/views.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/edit/views.go')
-rw-r--r--src/edit/views.go66
1 files changed, 62 insertions, 4 deletions
diff --git a/src/edit/views.go b/src/edit/views.go
index 90b6f1b..74d8006 100644
--- a/src/edit/views.go
+++ b/src/edit/views.go
@@ -2,16 +2,74 @@ package main
import (
"io"
+ "mime"
+ "util"
+ "bytes"
+ "path"
+ "strings"
)
+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 {
- // TODO
- return nil
+ // 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 {
- // TODO
- return nil
+ // 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 {