]> source.dussan.org Git - gitea.git/commitdiff
Fix label rendering (#30456)
authorwxiaoguang <wxiaoguang@gmail.com>
Sat, 13 Apr 2024 10:05:33 +0000 (18:05 +0800)
committerGitHub <noreply@github.com>
Sat, 13 Apr 2024 10:05:33 +0000 (10:05 +0000)
1. Check whether the label is for an issue or a pull request.
2. Don't use space to layout
3. Make sure the test strings have trailing spaces explicitly, to avoid
some IDE removing the trailing spaces automatically.

modules/templates/util_render.go
modules/templates/util_render_test.go
templates/repo/issue/view_content/comments.tmpl

index 0b53965f258050da21c3b9b43a71f6093a21abab..659422aee79895b6ff542cdba267200ea55a047b 100644 (file)
@@ -216,15 +216,16 @@ func RenderMarkdownToHtml(ctx context.Context, input string) template.HTML { //n
        return output
 }
 
-func RenderLabels(ctx context.Context, locale translation.Locale, labels []*issues_model.Label, repoLink string) template.HTML {
+func RenderLabels(ctx context.Context, locale translation.Locale, labels []*issues_model.Label, repoLink string, issue *issues_model.Issue) template.HTML {
+       isPullRequest := issue != nil && issue.IsPull
+       baseLink := fmt.Sprintf("%s/%s", repoLink, util.Iif(isPullRequest, "pulls", "issues"))
        htmlCode := `<span class="labels-list">`
        for _, label := range labels {
                // Protect against nil value in labels - shouldn't happen but would cause a panic if so
                if label == nil {
                        continue
                }
-               htmlCode += fmt.Sprintf("<a href='%s/issues?labels=%d'>%s</a> ",
-                       repoLink, label.ID, RenderLabel(ctx, locale, label))
+               htmlCode += fmt.Sprintf(`<a href="%s?labels=%d">%s</a>`, baseLink, label.ID, RenderLabel(ctx, locale, label))
        }
        htmlCode += "</span>"
        return template.HTML(htmlCode)
index 15aee8912d1ecc4b6550c6996afb6697535e2882..47c5da6485c37c7779dbab85f6c357c690259074 100644 (file)
@@ -7,17 +7,21 @@ import (
        "context"
        "html/template"
        "os"
+       "strings"
        "testing"
 
+       "code.gitea.io/gitea/models/issues"
        "code.gitea.io/gitea/models/unittest"
        "code.gitea.io/gitea/modules/git"
        "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/markup"
+       "code.gitea.io/gitea/modules/translation"
 
        "github.com/stretchr/testify/assert"
 )
 
-const testInput = `  space @mention-user  
+func testInput() string {
+       s := `  space @mention-user<SPACE><SPACE>
 /just/a/path.bin
 https://example.com/file.bin
 [local link](file.bin)
@@ -36,8 +40,10 @@ com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb mit
 mail@domain.com
 @mention-user test
 #123
-  space  
+  space<SPACE><SPACE>
 `
+       return strings.ReplaceAll(s, "<SPACE>", " ")
+}
 
 var testMetas = map[string]string{
        "user":     "user13",
@@ -121,23 +127,23 @@ com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb mit
 <a href="/user13/repo11/issues/123" class="ref-issue">#123</a>
   space`
 
-       assert.EqualValues(t, expected, RenderCommitBody(context.Background(), testInput, testMetas))
+       assert.EqualValues(t, expected, RenderCommitBody(context.Background(), testInput(), testMetas))
 }
 
 func TestRenderCommitMessage(t *testing.T) {
        expected := `space <a href="/mention-user" class="mention">@mention-user</a>  `
 
-       assert.EqualValues(t, expected, RenderCommitMessage(context.Background(), testInput, testMetas))
+       assert.EqualValues(t, expected, RenderCommitMessage(context.Background(), testInput(), testMetas))
 }
 
 func TestRenderCommitMessageLinkSubject(t *testing.T) {
        expected := `<a href="https://example.com/link" class="default-link muted">space </a><a href="/mention-user" class="mention">@mention-user</a>`
 
-       assert.EqualValues(t, expected, RenderCommitMessageLinkSubject(context.Background(), testInput, "https://example.com/link", testMetas))
+       assert.EqualValues(t, expected, RenderCommitMessageLinkSubject(context.Background(), testInput(), "https://example.com/link", testMetas))
 }
 
 func TestRenderIssueTitle(t *testing.T) {
-       expected := `  space @mention-user  
+       expected := `  space @mention-user<SPACE><SPACE>
 /just/a/path.bin
 https://example.com/file.bin
 [local link](file.bin)
@@ -156,9 +162,10 @@ com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb mit
 mail@domain.com
 @mention-user test
 <a href="/user13/repo11/issues/123" class="ref-issue">#123</a>
-  space  
+  space<SPACE><SPACE>
 `
-       assert.EqualValues(t, expected, RenderIssueTitle(context.Background(), testInput, testMetas))
+       expected = strings.ReplaceAll(expected, "<SPACE>", " ")
+       assert.EqualValues(t, expected, RenderIssueTitle(context.Background(), testInput(), testMetas))
 }
 
 func TestRenderMarkdownToHtml(t *testing.T) {
@@ -183,5 +190,20 @@ com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb mit
 #123
 space</p>
 `
-       assert.EqualValues(t, expected, RenderMarkdownToHtml(context.Background(), testInput))
+       assert.EqualValues(t, expected, RenderMarkdownToHtml(context.Background(), testInput()))
+}
+
+func TestRenderLabels(t *testing.T) {
+       ctx := context.Background()
+       locale := &translation.MockLocale{}
+
+       label := &issues.Label{ID: 123, Name: "label-name", Color: "label-color"}
+       issue := &issues.Issue{}
+       expected := `/owner/repo/issues?labels=123`
+       assert.Contains(t, RenderLabels(ctx, locale, []*issues.Label{label}, "/owner/repo", issue), expected)
+
+       label = &issues.Label{ID: 123, Name: "label-name", Color: "label-color"}
+       issue = &issues.Issue{IsPull: true}
+       expected = `/owner/repo/pulls?labels=123`
+       assert.Contains(t, RenderLabels(ctx, locale, []*issues.Label{label}, "/owner/repo", issue), expected)
 }
index f65dc6ee90c8520e90b6b664db62f25165b1f7dd..d900d23c4711e44d58bb3e5ae965045e194c2d22 100644 (file)
                                        <span class="text grey muted-links">
                                                {{template "shared/user/authorlink" .Poster}}
                                                {{if and .AddedLabels (not .RemovedLabels)}}
-                                                       {{ctx.Locale.TrN (len .AddedLabels) "repo.issues.add_label" "repo.issues.add_labels" (RenderLabels $.Context ctx.Locale .AddedLabels $.RepoLink) $createdStr}}
+                                                       {{ctx.Locale.TrN (len .AddedLabels) "repo.issues.add_label" "repo.issues.add_labels" (RenderLabels ctx ctx.Locale .AddedLabels $.RepoLink .Issue) $createdStr}}
                                                {{else if and (not .AddedLabels) .RemovedLabels}}
-                                                       {{ctx.Locale.TrN (len .RemovedLabels) "repo.issues.remove_label" "repo.issues.remove_labels" (RenderLabels $.Context ctx.Locale .RemovedLabels $.RepoLink) $createdStr}}
+                                                       {{ctx.Locale.TrN (len .RemovedLabels) "repo.issues.remove_label" "repo.issues.remove_labels" (RenderLabels ctx ctx.Locale .RemovedLabels $.RepoLink .Issue) $createdStr}}
                                                {{else}}
-                                                       {{ctx.Locale.Tr "repo.issues.add_remove_labels" (RenderLabels $.Context ctx.Locale .AddedLabels $.RepoLink) (RenderLabels $.Context ctx.Locale .RemovedLabels $.RepoLink) $createdStr}}
+                                                       {{ctx.Locale.Tr "repo.issues.add_remove_labels" (RenderLabels ctx ctx.Locale .AddedLabels $.RepoLink .Issue) (RenderLabels ctx ctx.Locale .RemovedLabels $.RepoLink .Issue) $createdStr}}
                                                {{end}}
                                        </span>
                                </div>