mirror of
https://gitee.com/gitea/gitea.git
synced 2024-12-26 15:52:57 +08:00
Merge pull request #2112 from nanoant/patch/better-git-message-display
Render commit msg as header + verbatim description
This commit is contained in:
commit
abb02889f2
@ -183,15 +183,27 @@ func ReplaceLeft(s, old, new string) string {
|
||||
}
|
||||
|
||||
// RenderCommitMessage renders commit message with XSS-safe and special links.
|
||||
func RenderCommitMessage(msg, urlPrefix string, metas map[string]string) template.HTML {
|
||||
func RenderCommitMessage(full bool, msg, urlPrefix string, metas map[string]string) template.HTML {
|
||||
cleanMsg := template.HTMLEscapeString(msg)
|
||||
fullMessage := string(base.RenderIssueIndexPattern([]byte(cleanMsg), urlPrefix, metas))
|
||||
msgLines := strings.Split(strings.TrimSpace(fullMessage), "\n")
|
||||
for i := range msgLines {
|
||||
msgLines[i] = ReplaceLeft(msgLines[i], " ", " ")
|
||||
numLines := len(msgLines)
|
||||
if numLines == 0 {
|
||||
return template.HTML("")
|
||||
} else if !full {
|
||||
return template.HTML(msgLines[0])
|
||||
} else if numLines == 1 || (numLines >= 2 && len(msgLines[1]) == 0) {
|
||||
// First line is a header, standalone or followed by empty line
|
||||
header := fmt.Sprintf("<h3>%s</h3>", msgLines[0])
|
||||
if numLines >= 2 {
|
||||
fullMessage = header + fmt.Sprintf("\n<pre>%s</pre>", strings.Join(msgLines[2:], "\n"))
|
||||
} else {
|
||||
fullMessage = header
|
||||
}
|
||||
} else {
|
||||
// Non-standard git message, there is no header line
|
||||
fullMessage = fmt.Sprintf("<h4>%s</h4>", strings.Join(msgLines, "<br>"))
|
||||
}
|
||||
|
||||
fullMessage = strings.Join(msgLines, "<br>")
|
||||
return template.HTML(fullMessage)
|
||||
}
|
||||
|
||||
|
@ -895,13 +895,22 @@ pre.raw {
|
||||
.ui .warning.segment {
|
||||
border-color: #F0C36D;
|
||||
}
|
||||
.ui .info.header {
|
||||
background-color: #d9edf7 !important;
|
||||
border-color: #85c5e5;
|
||||
}
|
||||
.ui .info.segment {
|
||||
border-color: #85c5e5;
|
||||
}
|
||||
.ui .info.segment.top {
|
||||
background-color: #d9edf7 !important;
|
||||
}
|
||||
.ui .info.segment.top h3,
|
||||
.ui .info.segment.top h4 {
|
||||
margin-top: 0;
|
||||
}
|
||||
.ui .info.segment.top h3:last-child {
|
||||
margin-top: 4px;
|
||||
}
|
||||
.ui .info.segment.top > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.ui .normal.header {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
@ -196,12 +196,20 @@ pre {
|
||||
}
|
||||
}
|
||||
.info {
|
||||
&.header {
|
||||
background-color: #d9edf7 !important;
|
||||
border-color: #85c5e5;
|
||||
}
|
||||
&.segment {
|
||||
border-color: #85c5e5;
|
||||
border-color: #85c5e5;
|
||||
&.top {
|
||||
background-color: #d9edf7 !important;
|
||||
h3, h4 {
|
||||
margin-top: 0;
|
||||
}
|
||||
h3:last-child {
|
||||
margin-top: 4px;
|
||||
}
|
||||
> :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
||||
</td>
|
||||
<td class="message collapsing">
|
||||
<a rel="nofollow" class="ui sha label" href="{{AppSubUrl}}/{{$.Username}}/{{$.Reponame}}/commit/{{.ID}}">{{ShortSha .ID.String}}</a>
|
||||
{{RenderCommitMessage .Summary $.RepoLink $.Repository.ComposeMetas}}
|
||||
{{RenderCommitMessage false .Summary $.RepoLink $.Repository.ComposeMetas}}
|
||||
</td>
|
||||
<td class="grey text right aligned">{{TimeSince .Author.When $.Lang}}</td>
|
||||
</tr>
|
||||
|
@ -5,14 +5,12 @@
|
||||
{{if .IsDiffCompare }}
|
||||
{{template "repo/commits_table" .}}
|
||||
{{else}}
|
||||
<h4 class="ui top attached info header">
|
||||
<div class="ui right">
|
||||
<a class="ui blue tiny button" href="{{EscapePound .SourcePath}}">
|
||||
{{.i18n.Tr "repo.diff.browse_source"}}
|
||||
</a>
|
||||
</div>
|
||||
{{RenderCommitMessage .Commit.Message $.RepoLink $.Repository.ComposeMetas}}
|
||||
</h4>
|
||||
<div class="ui top attached info clearing segment">
|
||||
<a class="ui floated right blue tiny button" href="{{EscapePound .SourcePath}}">
|
||||
{{.i18n.Tr "repo.diff.browse_source"}}
|
||||
</a>
|
||||
{{RenderCommitMessage true .Commit.Message $.RepoLink $.Repository.ComposeMetas}}
|
||||
</div>
|
||||
<div class="ui attached info segment">
|
||||
{{if .Author}}
|
||||
<img class="ui avatar image" src="{{.Author.AvatarLink}}" />
|
||||
|
@ -10,7 +10,7 @@
|
||||
<strong>{{.LastCommit.Author.Name}}</strong>
|
||||
{{end}}
|
||||
<a rel="nofollow" class="ui sha label" href="{{.RepoLink}}/commit/{{.LastCommit.ID}}" rel="nofollow">{{ShortSha .LastCommit.ID.String}}</a>
|
||||
<span class="grey">{{RenderCommitMessage .LastCommit.Summary .RepoLink $.Repository.ComposeMetas}}</span>
|
||||
<span class="grey">{{RenderCommitMessage false .LastCommit.Summary .RepoLink $.Repository.ComposeMetas}}</span>
|
||||
</th>
|
||||
<th class="nine wide">
|
||||
</th>
|
||||
@ -44,7 +44,7 @@
|
||||
{{end}}
|
||||
<td class="message collapsing">
|
||||
<a rel="nofollow" class="ui sha label" href="{{AppSubUrl}}/{{$.Username}}/{{$.Reponame}}/commit/{{$commit.ID}}">{{ShortSha $commit.ID.String}}</a>
|
||||
{{RenderCommitMessage $commit.Summary $.RepoLink $.Repository.ComposeMetas}}
|
||||
{{RenderCommitMessage false $commit.Summary $.RepoLink $.Repository.ComposeMetas}}
|
||||
</td>
|
||||
<td class="text grey right age">{{TimeSince $commit.Committer.When $.Lang}}</td>
|
||||
</tr>
|
||||
|
Loading…
Reference in New Issue
Block a user