templates/commit.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 109 110 111 | package templates
import (
"fmt"
"github.com/bluekeyes/go-gitdiff/gitdiff"
"go.alanpearce.eu/elgit/git"
g "go.alanpearce.eu/gomponents"
. "go.alanpearce.eu/gomponents/html"
)
// Commit renders a commit diff page
func Commit(data PageData, diff *git.NiceDiff) g.Node {
return Page(data, []g.Node{
RepoHeader(data),
RenderNav(data),
Main(
Section(Class("commit"),
Pre(g.Text(diff.Commit.Message)),
Div(Class("commit-info"),
g.Text(diff.Commit.Author.Name+" "),
A(Href(fmt.Sprintf("mailto:%s", diff.Commit.Author.Email)),
Class("commit-email"),
g.Text(diff.Commit.Author.Email)),
Div(g.Text(diff.Commit.Author.When.Format("Mon, 02 Jan 2006 15:04:05 -0700"))),
),
Div(
Strong(g.Text("commit")),
P(A(Href(fmt.Sprintf("/%s/commit/%s", data.Name, diff.Commit.This)),
Class("commit-hash"),
g.Text(diff.Commit.This))),
),
g.If(diff.Commit.Parent != "",
Div(
Strong(g.Text("parent")),
P(A(Href(fmt.Sprintf("/%s/commit/%s", data.Name, diff.Commit.Parent)),
Class("commit-hash"),
g.Text(diff.Commit.Parent))),
),
),
Div(Class("diff-stat"),
Div(g.Textf("%d files changed, %d insertions(+), %d deletions(-)",
diff.Stat.FilesChanged, diff.Stat.Insertions, diff.Stat.Deletions)),
Div(
Br(),
Strong(g.Text("jump to")),
Ul(g.Map(diff.Diff, func(d git.Diff) g.Node {
return Li(A(Href("#"+d.Name.New), g.Text(d.Name.New)))
})),
),
),
),
Section(
g.Map(diff.Diff, func(d git.Diff) g.Node {
return Div(ID(d.Name.New),
Div(Class("diff"),
g.If(d.IsNew,
Span(Class("diff-type"), g.Text("A")),
g.If(d.IsDelete,
Span(Class("diff-type"), g.Text("D")),
Span(Class("diff-type"), g.Text("M")),
),
),
g.Text(" "),
g.If(d.Name.Old != "",
g.Group{
A(Href(fmt.Sprintf("/%s/blob/%s/%s", data.Name, diff.Commit.Parent, d.Name.Old)),
g.Text(d.Name.Old)),
g.If(d.Name.New != "",
g.Group{
g.Text(" → "),
A(
Href(
fmt.Sprintf("/%s/blob/%s/%s", data.Name, diff.Commit.This, d.Name.New),
),
g.Text(d.Name.New),
),
},
),
},
A(Href(fmt.Sprintf("/%s/blob/%s/%s", data.Name, diff.Commit.This, d.Name.New)),
g.Text(d.Name.New)),
),
g.If(d.IsBinary,
P(g.Text("Not showing binary file.")),
Pre(
g.Group(g.Map(d.TextFragments, func(tf git.TextFragment) g.Node {
return g.Group(
[]g.Node{
Span(g.Attr("style", "display: block"), g.Text(tf.Header)),
g.Map(tf.Lines, func(line gitdiff.Line) g.Node {
switch line.Op.String() {
case "+":
return Span(Class("diff-add"), g.Text(line.String()))
case "-":
return Span(Class("diff-del"), g.Text(line.String()))
default:
return Span(Class("diff-noop"), g.Text(line.String()))
}
}),
})
})),
),
),
),
)
})...,
),
),
})
}
|