From 7acbcf9ddd5058fa131d5d0eeee4ce346988ad80 Mon Sep 17 00:00:00 2001 From: Sergio Benitez Date: Fri, 18 Sep 2015 18:57:06 -0700 Subject: [PATCH] Commit messages now rendered with line breaks and prefix spacing. --- modules/base/template.go | 35 ++++++++++++++++++++++++++++++++++- templates/repo/diff.tmpl | 2 +- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/modules/base/template.go b/modules/base/template.go index 2571e7d2..f5f567ad 100644 --- a/modules/base/template.go +++ b/modules/base/template.go @@ -96,9 +96,42 @@ func ToUtf8(content string) string { return res } +// Replaces all prefixes 'old' in 's' with 'new'. +func ReplaceLeft(s, old, new string) string { + old_len, new_len, i, n := len(old), len(new), 0, 0 + for ; i < len(s) && strings.HasPrefix(s[i:], old); n += 1 { + i += old_len + } + + // simple optimization + if n == 0 { + return s + } + + // allocating space for the new string + newLen := n*new_len + len(s[i:]) + replacement := make([]byte, newLen, newLen) + + j := 0 + for ; j < n*new_len; j += new_len { + copy(replacement[j:j+new_len], new) + } + + copy(replacement[j:], s[i:]) + return string(replacement) +} + // RenderCommitMessage renders commit message with XSS-safe and special links. func RenderCommitMessage(msg, urlPrefix string) template.HTML { - return template.HTML(string(RenderIssueIndexPattern([]byte(template.HTMLEscapeString(msg)), urlPrefix))) + cleanMsg := template.HTMLEscapeString(msg) + fullMessage := string(RenderIssueIndexPattern([]byte(cleanMsg), urlPrefix)) + msgLines := strings.Split(strings.TrimSpace(fullMessage), "\n") + for i := range msgLines { + msgLines[i] = ReplaceLeft(msgLines[i], " ", " ") + } + + fullMessage = strings.Join(msgLines, "
") + return template.HTML(fullMessage) } var TemplateFuncs template.FuncMap = map[string]interface{}{ diff --git a/templates/repo/diff.tmpl b/templates/repo/diff.tmpl index a280c81e..2e9bdd03 100644 --- a/templates/repo/diff.tmpl +++ b/templates/repo/diff.tmpl @@ -6,12 +6,12 @@ {{template "repo/commits_table" .}} {{else}}

- {{RenderCommitMessage .Commit.Message $.RepoLink}} + {{RenderCommitMessage .Commit.Message $.RepoLink}}

{{if .Author}}