templates/page.go (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | package templates import ( "fmt" "strings" "go.alanpearce.eu/elgit/config" "go.alanpearce.eu/elgit/git" g "go.alanpearce.eu/gomponents" c "go.alanpearce.eu/gomponents/components" . "go.alanpearce.eu/gomponents/html" ) type PageData struct { Meta config.Meta DisplayName string Name string Ref string Readme string Description string Path string Parent string Files any Diff []git.Diff Stat git.Stat Commit *git.Commit Commits []*git.Commit LineCount []int Content string Branches any Log bool Servername string Gomod bool } func RenderHead(data PageData) []g.Node { var title string metaTitle := data.Meta.Title switch { case data.Parent != "": title = fmt.Sprintf("%s — %s (%s): %s/", metaTitle, data.Name, data.Ref, data.Parent) case data.Path != "": title = fmt.Sprintf("%s — %s (%s): %s", metaTitle, data.Name, data.Ref, data.Path) case data.Files != nil: title = fmt.Sprintf("%s — %s (%s)", metaTitle, data.Name, data.Ref) case data.Commit != nil: title = fmt.Sprintf("%s — %s: %s", metaTitle, data.Name, data.Commit.This) case data.Branches != nil: title = fmt.Sprintf("%s — %s: refs", metaTitle, data.Name) case data.Commits != nil: if data.Log { title = fmt.Sprintf("%s — %s: log", metaTitle, data.Name) } else { title = fmt.Sprintf("%s — %s", metaTitle, data.Name) } default: title = metaTitle } return []g.Node{ Link(Rel("stylesheet"), Href("/static/style.css"), Type("text/css")), Link(Rel("icon"), Type("image/png"), g.Attr("sizes", "32x32"), Href("/static/elgit.png")), TitleEl(g.Text(title)), g.If(data.Servername != "" && data.Gomod, Meta( Name("go-import"), Content(fmt.Sprintf("%s/%s git https://%[1]s/%[2]s", data.Servername, data.Name)), ), ), } } func RenderNav(data PageData) g.Node { return Nav(Ul( g.If(data.Name != "", NavItem(joinPaths(data.Name), "summary")), g.If(data.Name != "", NavItem(joinPaths(data.Name, "refs", ""), "refs")), g.If(data.Ref != "", NavItem(joinPaths(data.Name, "tree", data.Ref, ""), "tree")), g.If(data.Ref != "", NavItem(joinPaths(data.Name, "log", data.Ref), "log")), )) } func NavItem(href string, text string) g.Node { return Li(A(Href(href), g.Text(text))) } func RepoHeader(data PageData) g.Node { return Header( H2( A(Href("/"), g.Text("all repos")), g.Textf(" — %s", data.DisplayName), g.If(data.Ref != "", Span(Class("ref"), g.Textf(" @ %s", data.Ref))), ), H3(Class("desc"), g.Text(data.Description)), ) } func Page(data PageData, body []g.Node) g.Node { return c.HTML5(c.HTML5Props{ Language: "en", Head: RenderHead(data), Body: body, }) } func joinPaths(paths ...string) string { return "/" + strings.Join(paths, "/") } |