]> source.dussan.org Git - gitea.git/commitdiff
Refactor template ctx and render utils (#32422)
authorwxiaoguang <wxiaoguang@gmail.com>
Tue, 5 Nov 2024 06:04:26 +0000 (14:04 +0800)
committerGitHub <noreply@github.com>
Tue, 5 Nov 2024 06:04:26 +0000 (14:04 +0800)
Clean up the templates

53 files changed:
modules/templates/helper.go
modules/templates/util_date.go
modules/templates/util_date_legacy.go [new file with mode: 0644]
modules/templates/util_render.go
modules/templates/util_render_legacy.go [new file with mode: 0644]
modules/templates/util_render_test.go
routers/web/feed/convert.go
routers/web/org/projects.go
routers/web/repo/issue.go
services/context/context.go
templates/base/head_script.tmpl
templates/explore/repo_list.tmpl
templates/org/team/new.tmpl
templates/org/team/sidebar.tmpl
templates/package/content/cargo.tmpl
templates/package/content/chef.tmpl
templates/package/content/composer.tmpl
templates/package/content/npm.tmpl
templates/package/content/nuget.tmpl
templates/package/content/pub.tmpl
templates/package/content/pypi.tmpl
templates/projects/view.tmpl
templates/repo/branch/list.tmpl
templates/repo/commit_page.tmpl
templates/repo/commits_list.tmpl
templates/repo/commits_list_small.tmpl
templates/repo/diff/compare.tmpl
templates/repo/graph/commits.tmpl
templates/repo/header.tmpl
templates/repo/issue/card.tmpl
templates/repo/issue/fields/checkboxes.tmpl
templates/repo/issue/fields/header.tmpl
templates/repo/issue/fields/markdown.tmpl
templates/repo/issue/filter_actions.tmpl
templates/repo/issue/filter_list.tmpl
templates/repo/issue/labels/label.tmpl
templates/repo/issue/labels/label_list.tmpl
templates/repo/issue/labels/labels_selector_field.tmpl
templates/repo/issue/new_form.tmpl
templates/repo/issue/view_content/comments.tmpl
templates/repo/issue/view_content/pull.tmpl
templates/repo/issue/view_content/sidebar.tmpl
templates/repo/issue/view_title.tmpl
templates/repo/latest_commit.tmpl
templates/repo/pulse.tmpl
templates/repo/settings/collaboration.tmpl
templates/repo/settings/lfs_file_find.tmpl
templates/repo/settings/navbar.tmpl
templates/repo/settings/options.tmpl
templates/repo/view_list.tmpl
templates/shared/issuelist.tmpl
templates/user/dashboard/feeds.tmpl
templates/user/notification/notification_div.tmpl

index a01aad06a173e6dc268264335023ee6fb4f4f6ff..efaa10624bd87c829aaf71aa335becf5d82f1d44 100644 (file)
@@ -73,11 +73,6 @@ func NewFuncMap() template.FuncMap {
                        return fmt.Sprint(time.Since(startTime).Nanoseconds()/1e6) + "ms"
                },
 
-               // for backward compatibility only, do not use them anymore
-               "TimeSince":     timeSinceLegacy,
-               "TimeSinceUnix": timeSinceLegacy,
-               "DateTime":      dateTimeLegacy,
-
                // -----------------------------------------------------------------
                // setting
                "AppName": func() string {
@@ -156,18 +151,8 @@ func NewFuncMap() template.FuncMap {
 
                // -----------------------------------------------------------------
                // render
-               "RenderCommitMessage":            RenderCommitMessage,
-               "RenderCommitMessageLinkSubject": renderCommitMessageLinkSubject,
-
-               "RenderCommitBody": renderCommitBody,
-               "RenderCodeBlock":  renderCodeBlock,
-               "RenderIssueTitle": renderIssueTitle,
-               "RenderEmoji":      renderEmoji,
-               "ReactionToEmoji":  reactionToEmoji,
-
-               "RenderMarkdownToHtml": RenderMarkdownToHtml,
-               "RenderLabel":          renderLabel,
-               "RenderLabels":         RenderLabels,
+               "RenderCodeBlock": renderCodeBlock,
+               "ReactionToEmoji": reactionToEmoji,
 
                // -----------------------------------------------------------------
                // misc
@@ -179,6 +164,22 @@ func NewFuncMap() template.FuncMap {
 
                "FilenameIsImage": filenameIsImage,
                "TabSizeClass":    tabSizeClass,
+
+               // for backward compatibility only, do not use them anymore
+               "TimeSince":     timeSinceLegacy,
+               "TimeSinceUnix": timeSinceLegacy,
+               "DateTime":      dateTimeLegacy,
+
+               "RenderEmoji":      renderEmojiLegacy,
+               "RenderLabel":      renderLabelLegacy,
+               "RenderLabels":     renderLabelsLegacy,
+               "RenderIssueTitle": renderIssueTitleLegacy,
+
+               "RenderMarkdownToHtml": renderMarkdownToHtmlLegacy,
+
+               "RenderCommitMessage":            renderCommitMessageLegacy,
+               "RenderCommitMessageLinkSubject": renderCommitMessageLinkSubjectLegacy,
+               "RenderCommitBody":               renderCommitBodyLegacy,
        }
 }
 
@@ -296,3 +297,9 @@ func userThemeName(user *user_model.User) string {
        }
        return setting.UI.DefaultTheme
 }
+
+func panicIfDevOrTesting() {
+       if !setting.IsProd || setting.IsInTesting {
+               panic("legacy template functions are for backward compatibility only, do not use them in new code")
+       }
+}
index b9e04401f15f591911cf22ee10dbc922970b56fd..4a794e6f30c7bc11be65c1082b52bec8e1badf5a 100644 (file)
@@ -12,7 +12,6 @@ import (
 
        "code.gitea.io/gitea/modules/setting"
        "code.gitea.io/gitea/modules/timeutil"
-       "code.gitea.io/gitea/modules/translation"
 )
 
 type DateUtils struct{}
@@ -54,23 +53,6 @@ func parseLegacy(datetime string) time.Time {
        return t
 }
 
-func dateTimeLegacy(format string, datetime any, _ ...string) template.HTML {
-       if !setting.IsProd || setting.IsInTesting {
-               panic("dateTimeLegacy is for backward compatibility only, do not use it in new code")
-       }
-       if s, ok := datetime.(string); ok {
-               datetime = parseLegacy(s)
-       }
-       return dateTimeFormat(format, datetime)
-}
-
-func timeSinceLegacy(time any, _ translation.Locale) template.HTML {
-       if !setting.IsProd || setting.IsInTesting {
-               panic("timeSinceLegacy is for backward compatibility only, do not use it in new code")
-       }
-       return TimeSince(time)
-}
-
 func anyToTime(any any) (t time.Time, isZero bool) {
        switch v := any.(type) {
        case nil:
diff --git a/modules/templates/util_date_legacy.go b/modules/templates/util_date_legacy.go
new file mode 100644 (file)
index 0000000..ceefb00
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright 2024 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package templates
+
+import (
+       "html/template"
+
+       "code.gitea.io/gitea/modules/translation"
+)
+
+func dateTimeLegacy(format string, datetime any, _ ...string) template.HTML {
+       panicIfDevOrTesting()
+       if s, ok := datetime.(string); ok {
+               datetime = parseLegacy(s)
+       }
+       return dateTimeFormat(format, datetime)
+}
+
+func timeSinceLegacy(time any, _ translation.Locale) template.HTML {
+       panicIfDevOrTesting()
+       return TimeSince(time)
+}
index 6eee007f346839f21773e0054de52100b02dc2bd..120182834571528adc65942db42067af2a747db2 100644 (file)
@@ -24,13 +24,21 @@ import (
        "code.gitea.io/gitea/modules/util"
 )
 
+type RenderUtils struct {
+       ctx context.Context
+}
+
+func NewRenderUtils(ctx context.Context) *RenderUtils {
+       return &RenderUtils{ctx: ctx}
+}
+
 // RenderCommitMessage renders commit message with XSS-safe and special links.
-func RenderCommitMessage(ctx context.Context, msg string, metas map[string]string) template.HTML {
+func (ut *RenderUtils) RenderCommitMessage(msg string, metas map[string]string) template.HTML {
        cleanMsg := template.HTMLEscapeString(msg)
        // we can safely assume that it will not return any error, since there
        // shouldn't be any special HTML.
        fullMessage, err := markup.RenderCommitMessage(&markup.RenderContext{
-               Ctx:   ctx,
+               Ctx:   ut.ctx,
                Metas: metas,
        }, cleanMsg)
        if err != nil {
@@ -44,9 +52,9 @@ func RenderCommitMessage(ctx context.Context, msg string, metas map[string]strin
        return renderCodeBlock(template.HTML(msgLines[0]))
 }
 
-// renderCommitMessageLinkSubject renders commit message as a XSS-safe link to
+// RenderCommitMessageLinkSubject renders commit message as a XSS-safe link to
 // the provided default url, handling for special links without email to links.
-func renderCommitMessageLinkSubject(ctx context.Context, msg, urlDefault string, metas map[string]string) template.HTML {
+func (ut *RenderUtils) RenderCommitMessageLinkSubject(msg, urlDefault string, metas map[string]string) template.HTML {
        msgLine := strings.TrimLeftFunc(msg, unicode.IsSpace)
        lineEnd := strings.IndexByte(msgLine, '\n')
        if lineEnd > 0 {
@@ -60,7 +68,7 @@ func renderCommitMessageLinkSubject(ctx context.Context, msg, urlDefault string,
        // we can safely assume that it will not return any error, since there
        // shouldn't be any special HTML.
        renderedMessage, err := markup.RenderCommitMessageSubject(&markup.RenderContext{
-               Ctx:         ctx,
+               Ctx:         ut.ctx,
                DefaultLink: urlDefault,
                Metas:       metas,
        }, template.HTMLEscapeString(msgLine))
@@ -71,8 +79,8 @@ func renderCommitMessageLinkSubject(ctx context.Context, msg, urlDefault string,
        return renderCodeBlock(template.HTML(renderedMessage))
 }
 
-// renderCommitBody extracts the body of a commit message without its title.
-func renderCommitBody(ctx context.Context, msg string, metas map[string]string) template.HTML {
+// RenderCommitBody extracts the body of a commit message without its title.
+func (ut *RenderUtils) RenderCommitBody(msg string, metas map[string]string) template.HTML {
        msgLine := strings.TrimSpace(msg)
        lineEnd := strings.IndexByte(msgLine, '\n')
        if lineEnd > 0 {
@@ -86,7 +94,7 @@ func renderCommitBody(ctx context.Context, msg string, metas map[string]string)
        }
 
        renderedMessage, err := markup.RenderCommitMessage(&markup.RenderContext{
-               Ctx:   ctx,
+               Ctx:   ut.ctx,
                Metas: metas,
        }, template.HTMLEscapeString(msgLine))
        if err != nil {
@@ -105,22 +113,22 @@ func renderCodeBlock(htmlEscapedTextToRender template.HTML) template.HTML {
        return template.HTML(htmlWithCodeTags)
 }
 
-// renderIssueTitle renders issue/pull title with defined post processors
-func renderIssueTitle(ctx context.Context, text string, metas map[string]string) template.HTML {
+// RenderIssueTitle renders issue/pull title with defined post processors
+func (ut *RenderUtils) RenderIssueTitle(text string, metas map[string]string) template.HTML {
        renderedText, err := markup.RenderIssueTitle(&markup.RenderContext{
-               Ctx:   ctx,
+               Ctx:   ut.ctx,
                Metas: metas,
        }, template.HTMLEscapeString(text))
        if err != nil {
                log.Error("RenderIssueTitle: %v", err)
-               return template.HTML("")
+               return ""
        }
        return template.HTML(renderedText)
 }
 
-// renderLabel renders a label
-// locale is needed due to an import cycle with our context providing the `Tr` function
-func renderLabel(ctx context.Context, locale translation.Locale, label *issues_model.Label) template.HTML {
+// RenderLabel renders a label
+func (ut *RenderUtils) RenderLabel(label *issues_model.Label) template.HTML {
+       locale := ut.ctx.Value(translation.ContextKey).(translation.Locale)
        var extraCSSClasses string
        textColor := util.ContrastColor(label.Color)
        labelScope := label.ExclusiveScope()
@@ -134,12 +142,12 @@ func renderLabel(ctx context.Context, locale translation.Locale, label *issues_m
        if labelScope == "" {
                // Regular label
                return HTMLFormat(`<div class="ui label %s" style="color: %s !important; background-color: %s !important;" data-tooltip-content title="%s">%s</div>`,
-                       extraCSSClasses, textColor, label.Color, descriptionText, renderEmoji(ctx, label.Name))
+                       extraCSSClasses, textColor, label.Color, descriptionText, ut.RenderEmoji(label.Name))
        }
 
        // Scoped label
-       scopeHTML := renderEmoji(ctx, labelScope)
-       itemHTML := renderEmoji(ctx, label.Name[len(labelScope)+1:])
+       scopeHTML := ut.RenderEmoji(labelScope)
+       itemHTML := ut.RenderEmoji(label.Name[len(labelScope)+1:])
 
        // Make scope and item background colors slightly darker and lighter respectively.
        // More contrast needed with higher luminance, empirically tweaked.
@@ -176,13 +184,12 @@ func renderLabel(ctx context.Context, locale translation.Locale, label *issues_m
                textColor, itemColor, itemHTML)
 }
 
-// renderEmoji renders html text with emoji post processors
-func renderEmoji(ctx context.Context, text string) template.HTML {
-       renderedText, err := markup.RenderEmoji(&markup.RenderContext{Ctx: ctx},
-               template.HTMLEscapeString(text))
+// RenderEmoji renders html text with emoji post processors
+func (ut *RenderUtils) RenderEmoji(text string) template.HTML {
+       renderedText, err := markup.RenderEmoji(&markup.RenderContext{Ctx: ut.ctx}, template.HTMLEscapeString(text))
        if err != nil {
                log.Error("RenderEmoji: %v", err)
-               return template.HTML("")
+               return ""
        }
        return template.HTML(renderedText)
 }
@@ -200,9 +207,9 @@ func reactionToEmoji(reaction string) template.HTML {
        return template.HTML(fmt.Sprintf(`<img alt=":%s:" src="%s/assets/img/emoji/%s.png"></img>`, reaction, setting.StaticURLPrefix, url.PathEscape(reaction)))
 }
 
-func RenderMarkdownToHtml(ctx context.Context, input string) template.HTML { //nolint:revive
+func (ut *RenderUtils) MarkdownToHtml(input string) template.HTML { //nolint:revive
        output, err := markdown.RenderString(&markup.RenderContext{
-               Ctx:   ctx,
+               Ctx:   ut.ctx,
                Metas: map[string]string{"mode": "document"},
        }, input)
        if err != nil {
@@ -211,7 +218,7 @@ 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, issue *issues_model.Issue) template.HTML {
+func (ut *RenderUtils) RenderLabels(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">`
@@ -220,7 +227,7 @@ func RenderLabels(ctx context.Context, locale translation.Locale, labels []*issu
                if label == nil {
                        continue
                }
-               htmlCode += fmt.Sprintf(`<a href="%s?labels=%d">%s</a>`, baseLink, label.ID, renderLabel(ctx, locale, label))
+               htmlCode += fmt.Sprintf(`<a href="%s?labels=%d">%s</a>`, baseLink, label.ID, ut.RenderLabel(label))
        }
        htmlCode += "</span>"
        return template.HTML(htmlCode)
diff --git a/modules/templates/util_render_legacy.go b/modules/templates/util_render_legacy.go
new file mode 100644 (file)
index 0000000..994f2fa
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2024 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package templates
+
+import (
+       "context"
+       "html/template"
+
+       issues_model "code.gitea.io/gitea/models/issues"
+       "code.gitea.io/gitea/modules/translation"
+)
+
+func renderEmojiLegacy(ctx context.Context, text string) template.HTML {
+       panicIfDevOrTesting()
+       return NewRenderUtils(ctx).RenderEmoji(text)
+}
+
+func renderLabelLegacy(ctx context.Context, locale translation.Locale, label *issues_model.Label) template.HTML {
+       panicIfDevOrTesting()
+       return NewRenderUtils(ctx).RenderLabel(label)
+}
+
+func renderLabelsLegacy(ctx context.Context, locale translation.Locale, labels []*issues_model.Label, repoLink string, issue *issues_model.Issue) template.HTML {
+       panicIfDevOrTesting()
+       return NewRenderUtils(ctx).RenderLabels(labels, repoLink, issue)
+}
+
+func renderMarkdownToHtmlLegacy(ctx context.Context, input string) template.HTML { //nolint:revive
+       panicIfDevOrTesting()
+       return NewRenderUtils(ctx).MarkdownToHtml(input)
+}
+
+func renderCommitMessageLegacy(ctx context.Context, msg string, metas map[string]string) template.HTML {
+       panicIfDevOrTesting()
+       return NewRenderUtils(ctx).RenderCommitMessage(msg, metas)
+}
+
+func renderCommitMessageLinkSubjectLegacy(ctx context.Context, msg, urlDefault string, metas map[string]string) template.HTML {
+       panicIfDevOrTesting()
+       return NewRenderUtils(ctx).RenderCommitMessageLinkSubject(msg, urlDefault, metas)
+}
+
+func renderIssueTitleLegacy(ctx context.Context, text string, metas map[string]string) template.HTML {
+       panicIfDevOrTesting()
+       return NewRenderUtils(ctx).RenderIssueTitle(text, metas)
+}
+
+func renderCommitBodyLegacy(ctx context.Context, msg string, metas map[string]string) template.HTML {
+       panicIfDevOrTesting()
+       return NewRenderUtils(ctx).RenderCommitBody(msg, metas)
+}
index ba47c34efc19362298a833ed2dd2191ab601b125..3e4ea04c63191202872cf7401dc46f761f278a9f 100644 (file)
@@ -65,9 +65,14 @@ func TestMain(m *testing.M) {
        os.Exit(m.Run())
 }
 
+func newTestRenderUtils() *RenderUtils {
+       ctx := context.Background()
+       ctx = context.WithValue(ctx, translation.ContextKey, &translation.MockLocale{})
+       return NewRenderUtils(ctx)
+}
+
 func TestRenderCommitBody(t *testing.T) {
        type args struct {
-               ctx   context.Context
                msg   string
                metas map[string]string
        }
@@ -79,7 +84,6 @@ func TestRenderCommitBody(t *testing.T) {
                {
                        name: "multiple lines",
                        args: args{
-                               ctx: context.Background(),
                                msg: "first line\nsecond line",
                        },
                        want: "second line",
@@ -87,7 +91,6 @@ func TestRenderCommitBody(t *testing.T) {
                {
                        name: "multiple lines with leading newlines",
                        args: args{
-                               ctx: context.Background(),
                                msg: "\n\n\n\nfirst line\nsecond line",
                        },
                        want: "second line",
@@ -95,15 +98,15 @@ func TestRenderCommitBody(t *testing.T) {
                {
                        name: "multiple lines with trailing newlines",
                        args: args{
-                               ctx: context.Background(),
                                msg: "first line\nsecond line\n\n\n",
                        },
                        want: "second line",
                },
        }
+       ut := newTestRenderUtils()
        for _, tt := range tests {
                t.Run(tt.name, func(t *testing.T) {
-                       assert.Equalf(t, tt.want, renderCommitBody(tt.args.ctx, tt.args.msg, tt.args.metas), "RenderCommitBody(%v, %v, %v)", tt.args.ctx, tt.args.msg, tt.args.metas)
+                       assert.Equalf(t, tt.want, ut.RenderCommitBody(tt.args.msg, tt.args.metas), "RenderCommitBody(%v, %v)", tt.args.msg, tt.args.metas)
                })
        }
 
@@ -127,19 +130,19 @@ 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, newTestRenderUtils().RenderCommitBody(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, newTestRenderUtils().RenderCommitMessage(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, newTestRenderUtils().RenderCommitMessageLinkSubject(testInput(), "https://example.com/link", testMetas))
 }
 
 func TestRenderIssueTitle(t *testing.T) {
@@ -165,7 +168,7 @@ mail@domain.com
   space<SPACE><SPACE>
 `
        expected = strings.ReplaceAll(expected, "<SPACE>", " ")
-       assert.EqualValues(t, expected, renderIssueTitle(context.Background(), testInput(), testMetas))
+       assert.EqualValues(t, expected, newTestRenderUtils().RenderIssueTitle(testInput(), testMetas))
 }
 
 func TestRenderMarkdownToHtml(t *testing.T) {
@@ -190,25 +193,23 @@ com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb mit
 #123
 space</p>
 `
-       assert.Equal(t, expected, string(RenderMarkdownToHtml(context.Background(), testInput())))
+       assert.Equal(t, expected, string(newTestRenderUtils().MarkdownToHtml(testInput())))
 }
 
 func TestRenderLabels(t *testing.T) {
-       ctx := context.Background()
-       locale := &translation.MockLocale{}
-
+       ut := newTestRenderUtils()
        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)
+       assert.Contains(t, ut.RenderLabels([]*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)
+       assert.Contains(t, ut.RenderLabels([]*issues.Label{label}, "/owner/repo", issue), expected)
 }
 
 func TestUserMention(t *testing.T) {
-       rendered := RenderMarkdownToHtml(context.Background(), "@no-such-user @mention-user @mention-user")
+       rendered := newTestRenderUtils().MarkdownToHtml("@no-such-user @mention-user @mention-user")
        assert.EqualValues(t, `<p>@no-such-user <a href="/mention-user" rel="nofollow">@mention-user</a> <a href="/mention-user" rel="nofollow">@mention-user</a></p>`, strings.TrimSpace(string(rendered)))
 }
index 774644e29ae21f539a8d0ea9010950b4f8a794c3..3f33e9933a2ea4a12c0424ced639d0ffb6d5ca5c 100644 (file)
@@ -71,6 +71,7 @@ func renderMarkdown(ctx *context.Context, act *activities_model.Action, content
 
 // feedActionsToFeedItems convert gitea's Action feed to feeds Item
 func feedActionsToFeedItems(ctx *context.Context, actions activities_model.ActionList) (items []*feeds.Item, err error) {
+       renderUtils := templates.NewRenderUtils(ctx)
        for _, act := range actions {
                act.LoadActUser(ctx)
 
@@ -215,7 +216,7 @@ func feedActionsToFeedItems(ctx *context.Context, actions activities_model.Actio
                                        desc += fmt.Sprintf("<a href=\"%s\">%s</a>\n%s",
                                                html.EscapeString(fmt.Sprintf("%s/commit/%s", act.GetRepoAbsoluteLink(ctx), commit.Sha1)),
                                                commit.Sha1,
-                                               templates.RenderCommitMessage(ctx, commit.Message, nil),
+                                               renderUtils.RenderCommitMessage(commit.Message, nil),
                                        )
                                }
 
index 2a5434b4147f652f992bb71abbff953abc947027..6dfefbf68d24336a29d4cf0561438d02d8478908 100644 (file)
@@ -103,9 +103,9 @@ func Projects(ctx *context.Context) {
        } else {
                ctx.Data["State"] = "open"
        }
-
+       renderUtils := templates.NewRenderUtils(ctx)
        for _, project := range projects {
-               project.RenderedContent = templates.RenderMarkdownToHtml(ctx, project.Description)
+               project.RenderedContent = renderUtils.MarkdownToHtml(project.Description)
        }
 
        err = shared_user.LoadHeaderCount(ctx)
@@ -435,7 +435,7 @@ func ViewProject(ctx *context.Context) {
        ctx.Data["SelectLabels"] = selectLabels
        ctx.Data["AssigneeID"] = assigneeID
 
-       project.RenderedContent = templates.RenderMarkdownToHtml(ctx, project.Description)
+       project.RenderedContent = templates.NewRenderUtils(ctx).MarkdownToHtml(project.Description)
        ctx.Data["LinkedPRs"] = linkedPrsMap
        ctx.Data["PageIsViewProjects"] = true
        ctx.Data["CanWriteProjects"] = canWriteProjects(ctx)
index 507b5af9d904a6590854ac9be4393cc06c297685..93e2b5e748662529e6595fbeb94c598592cd283e 100644 (file)
@@ -2215,7 +2215,7 @@ func GetIssueInfo(ctx *context.Context) {
 
        ctx.JSON(http.StatusOK, map[string]any{
                "convertedIssue": convert.ToIssue(ctx, ctx.Doer, issue),
-               "renderedLabels": templates.RenderLabels(ctx, ctx.Locale, issue.Labels, ctx.Repo.RepoLink, issue),
+               "renderedLabels": templates.NewRenderUtils(ctx).RenderLabels(issue.Labels, ctx.Repo.RepoLink, issue),
        })
 }
 
index 42f7c3d9d1d8afa6721c7fd55083bd7fe4528900..6c7128ef6866c41ab51247843531bcb55dcdffbe 100644 (file)
@@ -100,6 +100,7 @@ func NewTemplateContextForWeb(ctx *Context) TemplateContext {
        tmplCtx := NewTemplateContext(ctx)
        tmplCtx["Locale"] = ctx.Base.Locale
        tmplCtx["AvatarUtils"] = templates.NewAvatarUtils(ctx)
+       tmplCtx["RenderUtils"] = templates.NewRenderUtils(ctx)
        tmplCtx["RootData"] = ctx.Data
        tmplCtx["Consts"] = map[string]any{
                "RepoUnitTypeCode":            unit.TypeCode,
@@ -154,7 +155,9 @@ func Contexter() func(next http.Handler) http.Handler {
                        ctx := NewWebContext(base, rnd, session.GetContextSession(req))
 
                        ctx.Data.MergeFrom(middleware.CommonTemplateContextData())
-                       ctx.Data["Context"] = ctx // TODO: use "ctx" in template and remove this
+                       if setting.IsProd && !setting.IsInTesting {
+                               ctx.Data["Context"] = ctx // TODO: use "ctx" in template and remove this
+                       }
                        ctx.Data["CurrentURL"] = setting.AppSubURL + req.URL.RequestURI()
                        ctx.Data["Link"] = ctx.Link
 
index 22e08e9c8f69cf12e87ab1cdb2ffe2388196e350..c0c7235e3b02e24b96f1113dfb8e1129d47eba78 100644 (file)
@@ -21,10 +21,10 @@ If you introduce mistakes in it, Gitea JavaScript code wouldn't run correctly.
                {{if or .Participants .Assignees .MentionableTeams}}
                mentionValues: Array.from(new Map([
                        {{- range .Participants -}}
-                               ['{{.Name}}', {key: '{{.Name}} {{.FullName}}', value: '{{.Name}}', name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.AvatarLink $.Context}}'}],
+                               ['{{.Name}}', {key: '{{.Name}} {{.FullName}}', value: '{{.Name}}', name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.AvatarLink ctx}}'}],
                        {{- end -}}
                        {{- range .Assignees -}}
-                               ['{{.Name}}', {key: '{{.Name}} {{.FullName}}', value: '{{.Name}}', name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.AvatarLink $.Context}}'}],
+                               ['{{.Name}}', {key: '{{.Name}} {{.FullName}}', value: '{{.Name}}', name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.AvatarLink ctx}}'}],
                        {{- end -}}
                        {{- range .MentionableTeams -}}
                                ['{{$.MentionableTeamsOrg}}/{{.Name}}', {key: '{{$.MentionableTeamsOrg}}/{{.Name}}', value: '{{$.MentionableTeamsOrg}}/{{.Name}}', name: '{{$.MentionableTeamsOrg}}/{{.Name}}', avatar: '{{$.MentionableTeamsOrgAvatar}}'}],
index 742e83834d06f8b22848e1b0623ac4ea2a1ddd6a..219b1255c0a1232af34f1ba673b5b177a696bd96 100644 (file)
@@ -49,7 +49,7 @@
                                                </a>
                                        </div>
                                </div>
-                               {{$description := .DescriptionHTML $.Context}}
+                               {{$description := .DescriptionHTML ctx}}
                                {{if $description}}
                                        <div class="flex-item-body">{{$description}}</div>
                                {{end}}
index 9608eac154ef31ce8df8084293ecb852b8c2e2d5..410a3c4b62fb7a535f774e9e24bb6abeb00f85fb 100644 (file)
                                                                                                        </td>
                                                                                                        <td class="center aligned">
                                                                                                                <div class="ui radio checkbox">
-                                                                                                                       <input type="radio" name="unit_{{$unit.Type.Value}}" value="0"{{if or ($unit.Type.UnitGlobalDisabled) (eq ($.Team.UnitAccessMode $.Context $unit.Type) 0)}} checked{{end}} title="{{ctx.Locale.Tr "org.teams.none_access"}}">
+                                                                                                                       <input type="radio" name="unit_{{$unit.Type.Value}}" value="0"{{if or ($unit.Type.UnitGlobalDisabled) (eq ($.Team.UnitAccessMode ctx $unit.Type) 0)}} checked{{end}} title="{{ctx.Locale.Tr "org.teams.none_access"}}">
                                                                                                                </div>
                                                                                                        </td>
                                                                                                        <td class="center aligned">
                                                                                                                <div class="ui radio checkbox">
-                                                                                                                       <input type="radio" name="unit_{{$unit.Type.Value}}" value="1"{{if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode $.Context $unit.Type) 1)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}} title="{{ctx.Locale.Tr "org.teams.read_access"}}">
+                                                                                                                       <input type="radio" name="unit_{{$unit.Type.Value}}" value="1"{{if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode ctx $unit.Type) 1)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}} title="{{ctx.Locale.Tr "org.teams.read_access"}}">
                                                                                                                </div>
                                                                                                        </td>
                                                                                                        <td class="center aligned">
                                                                                                                <div class="ui radio checkbox">
-                                                                                                                       <input type="radio" name="unit_{{$unit.Type.Value}}" value="2"{{if (ge ($.Team.UnitAccessMode $.Context $unit.Type) 2)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}} title="{{ctx.Locale.Tr "org.teams.write_access"}}">
+                                                                                                                       <input type="radio" name="unit_{{$unit.Type.Value}}" value="2"{{if (ge ($.Team.UnitAccessMode ctx $unit.Type) 2)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}} title="{{ctx.Locale.Tr "org.teams.write_access"}}">
                                                                                                                </div>
                                                                                                        </td>
                                                                                                </tr>
                                                                        {{if lt $unit.MaxPerm 2}}
                                                                                <div {{if $unit.Type.UnitGlobalDisabled}}class="field" data-tooltip-content="{{ctx.Locale.Tr "repo.unit_disabled"}}"{{else}}class="field"{{end}}>
                                                                                        <div class="ui checkbox">
-                                                                                               <input type="checkbox" name="unit_{{$unit.Type.Value}}" value="1"{{if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode $.Context $unit.Type) 1)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}}>
+                                                                                               <input type="checkbox" name="unit_{{$unit.Type.Value}}" value="1"{{if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode ctx $unit.Type) 1)}} checked{{end}} {{if $unit.Type.UnitGlobalDisabled}}disabled{{end}}>
                                                                                                <label>{{ctx.Locale.Tr $unit.NameKey}}{{if $unit.Type.UnitGlobalDisabled}} {{ctx.Locale.Tr "org.team_unit_disabled"}}{{end}}</label>
                                                                                                <span class="help">{{ctx.Locale.Tr $unit.DescKey}}</span>
                                                                                        </div>
index ac41cda71641d441130b84a9f2248f0a2a43808d..c4acd8da24568febdcbbc9cf02f6dffc388949c7 100644 (file)
                                                                {{if (not $unit.Type.UnitGlobalDisabled)}}
                                                                        <tr>
                                                                                <td><strong>{{ctx.Locale.Tr $unit.NameKey}}</strong></td>
-                                                                               <td>{{if eq ($.Team.UnitAccessMode $.Context $unit.Type) 0 -}}
+                                                                               <td>{{if eq ($.Team.UnitAccessMode ctx $unit.Type) 0 -}}
                                                                                {{ctx.Locale.Tr "org.teams.none_access"}}
-                                                                               {{- else if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode $.Context $unit.Type) 1) -}}
+                                                                               {{- else if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode ctx $unit.Type) 1) -}}
                                                                                {{ctx.Locale.Tr "org.teams.read_access"}}
-                                                                               {{- else if eq ($.Team.UnitAccessMode $.Context $unit.Type) 2 -}}
+                                                                               {{- else if eq ($.Team.UnitAccessMode ctx $unit.Type) 2 -}}
                                                                                {{ctx.Locale.Tr "org.teams.write_access"}}
                                                                                {{- end}}</td>
                                                                        </tr>
index 7fd88a284a29630d6a9b1b0edffbc25997239977..8b51074af44f5046c1b0cc2e75b962e7d242a249 100644 (file)
@@ -27,7 +27,7 @@ git-fetch-with-cli = true</code></pre></div>
        {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}}
                <h4 class="ui top attached header">{{ctx.Locale.Tr "packages.about"}}</h4>
                {{if .PackageDescriptor.Metadata.Description}}<div class="ui attached segment">{{.PackageDescriptor.Metadata.Description}}</div>{{end}}
-               {{if .PackageDescriptor.Metadata.Readme}}<div class="ui attached segment">{{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Readme}}</div>{{end}}
+               {{if .PackageDescriptor.Metadata.Readme}}<div class="ui attached segment">{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Readme}}</div>{{end}}
        {{end}}
 
        {{if .PackageDescriptor.Metadata.Dependencies}}
index 03ce9f852bde839b703ea547b0615b376867cefa..b3713808f659b3e21dbae3fce771eba03be3d668 100644 (file)
@@ -20,7 +20,7 @@
                <h4 class="ui top attached header">{{ctx.Locale.Tr "packages.about"}}</h4>
                <div class="ui attached segment">
                        {{if .PackageDescriptor.Metadata.Description}}<p>{{.PackageDescriptor.Metadata.Description}}</p>{{end}}
-                       {{if .PackageDescriptor.Metadata.LongDescription}}{{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.LongDescription}}{{end}}
+                       {{if .PackageDescriptor.Metadata.LongDescription}}{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.LongDescription}}{{end}}
                </div>
        {{end}}
 
index 8d48e6c95d5ee213de26304a31d96e5cf7526cd2..45698208696ba0ae1cc6c36db7e9f1a68bb76e48 100644 (file)
@@ -25,7 +25,7 @@
        {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Comments}}
                <h4 class="ui top attached header">{{ctx.Locale.Tr "packages.about"}}</h4>
                {{if .PackageDescriptor.Metadata.Description}}<div class="ui attached segment">{{.PackageDescriptor.Metadata.Description}}</div>{{end}}
-               {{if .PackageDescriptor.Metadata.Readme}}<div class="ui attached segment markup markdown">{{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Readme}}</div>{{end}}
+               {{if .PackageDescriptor.Metadata.Readme}}<div class="ui attached segment markup markdown">{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Readme}}</div>{{end}}
                {{if .PackageDescriptor.Metadata.Comments}}<div class="ui attached segment">{{StringUtils.Join .PackageDescriptor.Metadata.Comments " "}}</div>{{end}}
        {{end}}
 
index 01298a664c734238d7896e29fd9ab46b20b4160d..bb024348d07f3be57d575cba034ef85dff0379ed 100644 (file)
@@ -25,7 +25,7 @@
                <div class="ui attached segment">
                        {{if .PackageDescriptor.Metadata.Readme}}
                        <div class="markup markdown">
-                               {{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Readme}}
+                               {{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Readme}}
                        </div>
                        {{else if .PackageDescriptor.Metadata.Description}}
                                {{.PackageDescriptor.Metadata.Description}}
index f1fe420c0ba242731c172510a97d1e0789ac1f78..5bb98a86ddf9ea02ec2ed6eef3f2d19833d6f6ee 100644 (file)
@@ -18,9 +18,9 @@
 
        {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.ReleaseNotes .PackageDescriptor.Metadata.Readme}}
                <h4 class="ui top attached header">{{ctx.Locale.Tr "packages.about"}}</h4>
-               {{if .PackageDescriptor.Metadata.Description}}<div class="ui attached segment">{{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Description}}</div>{{end}}
-               {{if .PackageDescriptor.Metadata.Readme}}<div class="ui attached segment markup markdown">{{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Readme}}</div>{{end}}
-               {{if .PackageDescriptor.Metadata.ReleaseNotes}}<div class="ui attached segment">{{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.ReleaseNotes}}</div>{{end}}
+               {{if .PackageDescriptor.Metadata.Description}}<div class="ui attached segment">{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Description}}</div>{{end}}
+               {{if .PackageDescriptor.Metadata.Readme}}<div class="ui attached segment markup markdown">{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Readme}}</div>{{end}}
+               {{if .PackageDescriptor.Metadata.ReleaseNotes}}<div class="ui attached segment">{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.ReleaseNotes}}</div>{{end}}
        {{end}}
 
        {{if .PackageDescriptor.Metadata.Dependencies}}
index f2c7ac938faade297f909919327f746a9a0ef21f..2f63cde3a639cab139857753edb47d55488eb362 100644 (file)
@@ -14,6 +14,6 @@
        {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}}
                <h4 class="ui top attached header">{{ctx.Locale.Tr "packages.about"}}</h4>
                {{if .PackageDescriptor.Metadata.Description}}<div class="ui attached segment">{{.PackageDescriptor.Metadata.Description}}</div>{{end}}
-               {{if .PackageDescriptor.Metadata.Readme}}<div class="ui attached segment">{{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Readme}}</div>{{end}}
+               {{if .PackageDescriptor.Metadata.Readme}}<div class="ui attached segment">{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Readme}}</div>{{end}}
        {{end}}
 {{end}}
index 817fced97b96012a73a72935b0ef4bcdc8a9729e..2a22a6ed71ba69c71c31e953c249943635287a23 100644 (file)
@@ -16,9 +16,9 @@
                <div class="ui attached segment">
                        <p>{{if .PackageDescriptor.Metadata.Summary}}{{.PackageDescriptor.Metadata.Summary}}{{end}}</p>
                        {{if .PackageDescriptor.Metadata.LongDescription}}
-                               {{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.LongDescription}}
+                               {{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.LongDescription}}
                        {{else if .PackageDescriptor.Metadata.Description}}
-                               {{RenderMarkdownToHtml $.Context .PackageDescriptor.Metadata.Description}}
+                               {{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Description}}
                        {{end}}
                </div>
        {{end}}
index f5c1bb76703c4df9c504b98382d6eff897dc5a4a..71f9d059adb9b6cec17ea9aca5f39354ad118bea 100644 (file)
@@ -49,7 +49,7 @@
                                                                                        {{svg "octicon-check"}}
                                                                                {{end}}
                                                                        {{end}}
-                                                                       {{RenderLabel $.Context ctx.Locale .}}
+                                                                       {{ctx.RenderUtils.RenderLabel .}}
                                                                        <p class="tw-ml-auto">{{template "repo/issue/labels/label_archived" .}}</p>
                                                                </a>
                                                        {{end}}
index 6e2a5570c712ab9cb11ec2a749e183dd1f9f4d9b..5484024ff819741936229fb88990466c04230f84 100644 (file)
@@ -27,7 +27,7 @@
                                                                        <button class="btn interact-fg tw-px-1" data-clipboard-text="{{.DefaultBranchBranch.DBBranch.Name}}" data-tooltip-content="{{ctx.Locale.Tr "copy_branch"}}">{{svg "octicon-copy" 14}}</button>
                                                                        {{template "repo/commit_statuses" dict "Status" (index $.CommitStatus .DefaultBranchBranch.DBBranch.CommitID) "Statuses" (index $.CommitStatuses .DefaultBranchBranch.DBBranch.CommitID)}}
                                                                </div>
-                                                               <p class="info tw-flex tw-items-center tw-my-1">{{svg "octicon-git-commit" 16 "tw-mr-1"}}<a href="{{.RepoLink}}/commit/{{PathEscape .DefaultBranchBranch.DBBranch.CommitID}}">{{ShortSha .DefaultBranchBranch.DBBranch.CommitID}}</a> ยท <span class="commit-message">{{RenderCommitMessage $.Context .DefaultBranchBranch.DBBranch.CommitMessage (.Repository.ComposeMetas ctx)}}</span> ยท {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DefaultBranchBranch.DBBranch.CommitTime}}{{if .DefaultBranchBranch.DBBranch.Pusher}} &nbsp;{{template "shared/user/avatarlink" dict "user" .DefaultBranchBranch.DBBranch.Pusher}}{{template "shared/user/namelink" .DefaultBranchBranch.DBBranch.Pusher}}{{end}}</p>
+                                                               <p class="info tw-flex tw-items-center tw-my-1">{{svg "octicon-git-commit" 16 "tw-mr-1"}}<a href="{{.RepoLink}}/commit/{{PathEscape .DefaultBranchBranch.DBBranch.CommitID}}">{{ShortSha .DefaultBranchBranch.DBBranch.CommitID}}</a> ยท <span class="commit-message">{{ctx.RenderUtils.RenderCommitMessage .DefaultBranchBranch.DBBranch.CommitMessage (.Repository.ComposeMetas ctx)}}</span> ยท {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DefaultBranchBranch.DBBranch.CommitTime}}{{if .DefaultBranchBranch.DBBranch.Pusher}} &nbsp;{{template "shared/user/avatarlink" dict "user" .DefaultBranchBranch.DBBranch.Pusher}}{{template "shared/user/namelink" .DefaultBranchBranch.DBBranch.Pusher}}{{end}}</p>
                                                        </td>
                                                        <td class="right aligned middle aligned overflow-visible">
                                                                {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}}
                                                                        <button class="btn interact-fg tw-px-1" data-clipboard-text="{{.DBBranch.Name}}" data-tooltip-content="{{ctx.Locale.Tr "copy_branch"}}">{{svg "octicon-copy" 14}}</button>
                                                                        {{template "repo/commit_statuses" dict "Status" (index $.CommitStatus .DBBranch.CommitID) "Statuses" (index $.CommitStatuses .DBBranch.CommitID)}}
                                                                </div>
-                                                               <p class="info tw-flex tw-items-center tw-my-1">{{svg "octicon-git-commit" 16 "tw-mr-1"}}<a href="{{$.RepoLink}}/commit/{{PathEscape .DBBranch.CommitID}}">{{ShortSha .DBBranch.CommitID}}</a> ยท <span class="commit-message">{{RenderCommitMessage $.Context .DBBranch.CommitMessage ($.Repository.ComposeMetas ctx)}}</span> ยท {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DBBranch.CommitTime}}{{if .DBBranch.Pusher}} &nbsp;{{template "shared/user/avatarlink" dict "user" .DBBranch.Pusher}} &nbsp;{{template "shared/user/namelink" .DBBranch.Pusher}}{{end}}</p>
+                                                               <p class="info tw-flex tw-items-center tw-my-1">{{svg "octicon-git-commit" 16 "tw-mr-1"}}<a href="{{$.RepoLink}}/commit/{{PathEscape .DBBranch.CommitID}}">{{ShortSha .DBBranch.CommitID}}</a> ยท <span class="commit-message">{{ctx.RenderUtils.RenderCommitMessage .DBBranch.CommitMessage ($.Repository.ComposeMetas ctx)}}</span> ยท {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DBBranch.CommitTime}}{{if .DBBranch.Pusher}} &nbsp;{{template "shared/user/avatarlink" dict "user" .DBBranch.Pusher}} &nbsp;{{template "shared/user/namelink" .DBBranch.Pusher}}{{end}}</p>
                                                        {{end}}
                                                        </td>
                                                        <td class="two wide ui">
index 975d57324543a3295d0769b56086739178af2c74..b9d71917a1d1cbcd4f91c6c9ea168eae83d666ee 100644 (file)
@@ -19,7 +19,7 @@
                {{end}}
                <div class="ui top attached header clearing segment tw-relative commit-header {{$class}}">
                        <div class="tw-flex tw-mb-4 tw-gap-1">
-                               <h3 class="tw-mb-0 tw-flex-1"><span class="commit-summary" title="{{.Commit.Summary}}">{{RenderCommitMessage $.Context .Commit.Message ($.Repository.ComposeMetas ctx)}}</span>{{template "repo/commit_statuses" dict "Status" .CommitStatus "Statuses" .CommitStatuses}}</h3>
+                               <h3 class="tw-mb-0 tw-flex-1"><span class="commit-summary" title="{{.Commit.Summary}}">{{ctx.RenderUtils.RenderCommitMessage .Commit.Message ($.Repository.ComposeMetas ctx)}}</span>{{template "repo/commit_statuses" dict "Status" .CommitStatus "Statuses" .CommitStatuses}}</h3>
                                {{if not $.PageIsWiki}}
                                        <div class="commit-header-buttons">
                                                <a class="ui primary tiny button" href="{{.SourcePath}}">
                                {{end}}
                        </div>
                        {{if IsMultilineCommitMessage .Commit.Message}}
-                               <pre class="commit-body">{{RenderCommitBody $.Context .Commit.Message ($.Repository.ComposeMetas ctx)}}</pre>
+                               <pre class="commit-body">{{ctx.RenderUtils.RenderCommitBody .Commit.Message ($.Repository.ComposeMetas ctx)}}</pre>
                        {{end}}
                        {{template "repo/commit_load_branches_and_tags" .}}
                </div>
index b8d10eb1aa4541562bf20ae649bfecd7fa4fd40c..50b754cc234b6697109823d8d07cd7f576aa38c1 100644 (file)
                                        <td class="message">
                                                <span class="message-wrapper">
                                                {{if $.PageIsWiki}}
-                                                       <span class="commit-summary {{if gt .ParentCount 1}} grey text{{end}}" title="{{.Summary}}">{{.Summary | RenderEmoji $.Context}}</span>
+                                                       <span class="commit-summary {{if gt .ParentCount 1}} grey text{{end}}" title="{{.Summary}}">{{.Summary | ctx.RenderUtils.RenderEmoji}}</span>
                                                {{else}}
                                                        {{$commitLink:= printf "%s/commit/%s" $commitRepoLink (PathEscape .ID.String)}}
-                                                       <span class="commit-summary {{if gt .ParentCount 1}} grey text{{end}}" title="{{.Summary}}">{{RenderCommitMessageLinkSubject $.Context .Message $commitLink ($.Repository.ComposeMetas ctx)}}</span>
+                                                       <span class="commit-summary {{if gt .ParentCount 1}} grey text{{end}}" title="{{.Summary}}">{{ctx.RenderUtils.RenderCommitMessageLinkSubject .Message $commitLink ($.Repository.ComposeMetas ctx)}}</span>
                                                {{end}}
                                                </span>
                                                {{if IsMultilineCommitMessage .Message}}
@@ -70,7 +70,7 @@
                                                {{end}}
                                                {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses}}
                                                {{if IsMultilineCommitMessage .Message}}
-                                               <pre class="commit-body tw-hidden">{{RenderCommitBody $.Context .Message ($.Repository.ComposeMetas ctx)}}</pre>
+                                               <pre class="commit-body tw-hidden">{{ctx.RenderUtils.RenderCommitBody .Message ($.Repository.ComposeMetas ctx)}}</pre>
                                                {{end}}
                                                {{if $.CommitsTagsMap}}
                                                        {{range (index $.CommitsTagsMap .ID.String)}}
index 4c67319b8c05a74657a6668a732c055a2f03222f..0657eaba1d3bdbf8c04cee2130c81a5c83ffa098 100644 (file)
@@ -14,7 +14,7 @@
                {{$commitLink:= printf "%s/commit/%s" $.comment.Issue.PullRequest.BaseRepo.Link (PathEscape .ID.String)}}
 
                <span class="tw-flex-1 tw-font-mono gt-ellipsis" title="{{.Summary}}">
-                       {{- RenderCommitMessageLinkSubject $.root.Context .Message $commitLink ($.comment.Issue.PullRequest.BaseRepo.ComposeMetas ctx) -}}
+                       {{- ctx.RenderUtils.RenderCommitMessageLinkSubject .Message $commitLink ($.comment.Issue.PullRequest.BaseRepo.ComposeMetas ctx) -}}
                </span>
 
                {{if IsMultilineCommitMessage .Message}}
@@ -48,7 +48,7 @@
        </div>
        {{if IsMultilineCommitMessage .Message}}
        <pre class="commit-body tw-ml-[33px] tw-hidden" data-singular-commit-body-for="{{$tag}}">
-               {{- RenderCommitBody $.root.Context .Message ($.comment.Issue.PullRequest.BaseRepo.ComposeMetas ctx) -}}
+               {{- ctx.RenderUtils.RenderCommitBody .Message ($.comment.Issue.PullRequest.BaseRepo.ComposeMetas ctx) -}}
        </pre>
        {{end}}
 {{end}}
index 5ac6013ed50c22b3c6f33c217cce962f3896990f..28419a34628b1abf68792c42e40cb4596954bfc6 100644 (file)
                        <div class="ui segment flex-text-block tw-gap-4">
                                {{template "shared/issueicon" .}}
                                <div class="issue-title tw-break-anywhere">
-                                       {{RenderIssueTitle $.Context .PullRequest.Issue.Title ($.Repository.ComposeMetas ctx) | RenderCodeBlock}}
+                                       {{ctx.RenderUtils.RenderIssueTitle .PullRequest.Issue.Title ($.Repository.ComposeMetas ctx) | RenderCodeBlock}}
                                        <span class="index">#{{.PullRequest.Issue.Index}}</span>
                                </div>
                                <a href="{{$.RepoLink}}/pulls/{{.PullRequest.Issue.Index}}" class="ui compact button primary">
index 1691fb8d4508424727fb3c7c1af719c4fdd2e9cd..17c6cad86b89a5d016c7ce132c28d4073ee089ee 100644 (file)
@@ -29,7 +29,7 @@
                                                </a>
                                        </span>
                                        <span class="message tw-inline-block gt-ellipsis tw-mr-2">
-                                               <span>{{RenderCommitMessage $.Context $commit.Subject ($.Repository.ComposeMetas ctx)}}</span>
+                                               <span>{{ctx.RenderUtils.RenderCommitMessage $commit.Subject ($.Repository.ComposeMetas ctx)}}</span>
                                        </span>
                                        <span class="commit-refs tw-flex tw-items-center tw-mr-1">
                                                {{range $commit.Refs}}
@@ -37,7 +37,7 @@
                                                        {{if eq $refGroup "pull"}}
                                                                {{if or (not $.HidePRRefs) (SliceUtils.Contains $.SelectedBranches .Name)}}
                                                                        <!-- it's intended to use issues not pulls, if it's a pull you will get redirected -->
-                                                                       <a class="ui labelled basic tiny button" href="{{$.RepoLink}}/{{if $.Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypePullRequests}}pulls{{else}}issues{{end}}/{{.ShortName|PathEscape}}">
+                                                                       <a class="ui labelled basic tiny button" href="{{$.RepoLink}}/{{if $.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypePullRequests}}pulls{{else}}issues{{end}}/{{.ShortName|PathEscape}}">
                                                                                {{svg "octicon-git-pull-request"}} #{{.ShortName}}
                                                                        </a>
                                                                {{end}}
index b023b28b6247556aedede61a6ad78979bd596359..c3ae697f31fbf93065e2f0dbe589019f57c5fb5c 100644 (file)
                                                </a>
                                        {{end}}
 
-                                       {{$projectsUnit := .Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypeProjects}}
+                                       {{$projectsUnit := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeProjects}}
                                        {{if and (not ctx.Consts.RepoUnitTypeProjects.UnitGlobalDisabled) (.Permission.CanRead ctx.Consts.RepoUnitTypeProjects) ($projectsUnit.ProjectsConfig.IsProjectsAllowed "repo")}}
                                                <a href="{{.RepoLink}}/projects" class="{{if .IsProjectsPage}}active {{end}}item">
                                                        {{svg "octicon-project"}} {{ctx.Locale.Tr "repo.projects"}}
                                        {{end}}
 
                                        {{if .Permission.CanRead ctx.Consts.RepoUnitTypeExternalWiki}}
-                                               <a class="item" href="{{(.Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypeExternalWiki).ExternalWikiConfig.ExternalWikiURL}}" target="_blank" rel="noopener noreferrer">
+                                               <a class="item" href="{{(.Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeExternalWiki).ExternalWikiConfig.ExternalWikiURL}}" target="_blank" rel="noopener noreferrer">
                                                        {{svg "octicon-link-external"}} {{ctx.Locale.Tr "repo.wiki"}}
                                                </a>
                                        {{end}}
index 916d52446b4ef2d605627a59891496b3337002c3..6c24419b467a3095c53c708bfbcf2fda1a1597fb 100644 (file)
@@ -14,7 +14,7 @@
                        <div class="issue-card-icon">
                                {{template "shared/issueicon" .}}
                        </div>
-                       <a class="issue-card-title muted issue-title tw-break-anywhere" href="{{.Link}}">{{.Title | RenderEmoji ctx | RenderCodeBlock}}</a>
+                       <a class="issue-card-title muted issue-title tw-break-anywhere" href="{{.Link}}">{{.Title | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</a>
                        {{if and $.isPinnedIssueCard $.Page.IsRepoAdmin}}
                                <a role="button" class="issue-card-unpin muted tw-flex tw-items-center" data-tooltip-content={{ctx.Locale.Tr "repo.issues.unpin_issue"}} data-issue-id="{{.ID}}" data-unpin-url="{{$.Page.Link}}/unpin/{{.Index}}">
                                        {{svg "octicon-x" 16}}
@@ -65,7 +65,7 @@
        <div class="issue-card-bottom">
                <div class="labels-list">
                        {{range .Labels}}
-                               <a target="_blank" href="{{$.Issue.Repo.Link}}/issues?labels={{.ID}}">{{RenderLabel ctx ctx.Locale .}}</a>
+                               <a target="_blank" href="{{$.Issue.Repo.Link}}/issues?labels={{.ID}}">{{ctx.RenderUtils.RenderLabel .}}</a>
                        {{end}}
                </div>
                <div class="issue-card-assignees">
index 531f401fb7ca6488987d0649e638ce9608b525b3..6134c326b6b43c2c0a9db9cc63d2d02b90230f9a 100644 (file)
@@ -4,7 +4,7 @@
                <div class="field inline">
                        <div class="ui checkbox tw-mr-0 {{if and ($opt.visible) (not (SliceUtils.Contains $opt.visible "form"))}}tw-hidden{{end}}">
                                <input type="checkbox" name="form-field-{{$.item.ID}}-{{$i}}" {{if $opt.required}}required{{end}}>
-                               <label>{{RenderMarkdownToHtml $.context $opt.label}}</label>
+                               <label>{{ctx.RenderUtils.MarkdownToHtml $opt.label}}</label>
                        </div>
                        {{if $opt.required}}
                                <label class="required"></label>
index 06c41af6b99020708dd4aacd57a9873cc22d90f3..bcd0ffbd350e9cbf215dfff80845f7c26dc87f0b 100644 (file)
@@ -2,5 +2,5 @@
        <h3>{{.item.Attributes.label}}{{if .item.Validations.required}}<label class="required"></label>{{end}}</h3>
 {{end}}
 {{if .item.Attributes.description}}
-       <span class="help">{{RenderMarkdownToHtml .Context .item.Attributes.description}}</span>
+       <span class="help">{{ctx.RenderUtils.MarkdownToHtml .item.Attributes.description}}</span>
 {{end}}
index 934699ed058ce132e966661eb1b86afeb9558bf1..f6995328dd4d888cda0ee8c3b7c880090b5b9ce7 100644 (file)
@@ -1,3 +1,3 @@
 <div class="field {{if not .item.VisibleOnForm}}tw-hidden{{end}}">
-       <div>{{RenderMarkdownToHtml .Context .item.Attributes.value}}</div>
+       <div>{{ctx.RenderUtils.MarkdownToHtml .item.Attributes.value}}</div>
 </div>
index 831ab17bea2c6faae55126cafbc56f7a7113a3b3..4cdad7a7480dfee498bf659dfc91060b0375a5d1 100644 (file)
@@ -30,7 +30,7 @@
                                        {{end}}
                                        {{$previousExclusiveScope = $exclusiveScope}}
                                        <div class="item issue-action tw-flex tw-justify-between" data-action="toggle" data-element-id="{{.ID}}" data-url="{{$.RepoLink}}/issues/labels">
-                                               {{if SliceUtils.Contains $.SelLabelIDs .ID}}{{svg (Iif $exclusiveScope "octicon-dot-fill" "octicon-check")}}{{end}} {{RenderLabel $.Context ctx.Locale .}}
+                                               {{if SliceUtils.Contains $.SelLabelIDs .ID}}{{svg (Iif $exclusiveScope "octicon-dot-fill" "octicon-check")}}{{end}} {{ctx.RenderUtils.RenderLabel .}}
                                                {{template "repo/issue/labels/label_archived" .}}
                                        </div>
                                {{end}}
index c6de4977dc5ddadbf1ffdb99bad8f4b65908fbab..d48af5b1506f8e1e25cc20cee704956be3ee97cb 100644 (file)
@@ -42,7 +42,7 @@
                                                {{svg "octicon-check"}}
                                        {{end}}
                                {{end}}
-                               {{RenderLabel $.Context ctx.Locale .}}
+                               {{ctx.RenderUtils.RenderLabel .}}
                                <p class="tw-ml-auto">{{template "repo/issue/labels/label_archived" .}}</p>
                        </a>
                {{end}}
index 3651ba118feead1b669e81f463c872386fd1d39b..f40c792da706e67d57109b5d85b030e893e080f7 100644 (file)
@@ -3,5 +3,5 @@
        id="label_{{.label.ID}}"
        href="{{.root.RepoLink}}/{{if or .root.IsPull .root.Issue.IsPull}}pulls{{else}}issues{{end}}?labels={{.label.ID}}"{{/* FIXME: use .root.Issue.Link or create .root.Link */}}
 >
-       {{- RenderLabel $.Context ctx.Locale .label -}}
+       {{- ctx.RenderUtils.RenderLabel .label -}}
 </a>
index 413d6405b22d2a4ac6d96efc824fde20977e47f9..07a548a8afd05671665edc2ce40ea37be7078b3d 100644 (file)
@@ -30,8 +30,8 @@
                {{range .Labels}}
                <li class="item">
                        <div class="label-title">
-                               {{RenderLabel $.Context ctx.Locale .}}
-                               {{if .Description}}<br><small class="desc">{{.Description | RenderEmoji $.Context}}</small>{{end}}
+                               {{ctx.RenderUtils.RenderLabel .}}
+                               {{if .Description}}<br><small class="desc">{{.Description | ctx.RenderUtils.RenderEmoji}}</small>{{end}}
                        </div>
                        <div class="label-issues">
                                {{if $.PageIsOrgSettingsLabels}}
@@ -70,8 +70,8 @@
                        {{range .OrgLabels}}
                        <li class="item org-label">
                                <div class="label-title">
-                                       {{RenderLabel $.Context ctx.Locale .}}
-                                       {{if .Description}}<br><small class="desc">{{.Description | RenderEmoji $.Context}}</small>{{end}}
+                                       {{ctx.RenderUtils.RenderLabel .}}
+                                       {{if .Description}}<br><small class="desc">{{.Description | ctx.RenderUtils.RenderEmoji}}</small>{{end}}
                                </div>
                                <div class="label-issues">
                                        <a class="open-issues" {{if .IsArchived}}data-is-archived{{end}} href="{{$.RepoLink}}/issues?labels={{.ID}}">{{svg "octicon-issue-opened"}} {{ctx.Locale.Tr "repo.issues.label_open_issues" .NumOpenRepoIssues}}</a>
index 3d65a7d8cd542c301e0cbe91a367b1fce9b8a39b..96fb65866401ea515a53e7b087b72307c9c53923 100644 (file)
@@ -21,8 +21,8 @@
                                        <div class="divider"></div>
                                {{end}}
                                {{$previousExclusiveScope = $exclusiveScope}}
-                               <a class="{{if .IsChecked}}checked{{end}} item" href="#" data-id="{{.ID}}" {{if .IsArchived}}data-is-archived{{end}} data-id-selector="#label_{{.ID}}" data-scope="{{$exclusiveScope}}"><span class="octicon-check {{if not .IsChecked}}tw-invisible{{end}}">{{svg (Iif $exclusiveScope "octicon-dot-fill" "octicon-check")}}</span>&nbsp;&nbsp;{{RenderLabel $.Context ctx.Locale .}}
-                                       {{if .Description}}<br><small class="desc">{{.Description | RenderEmoji $.Context}}</small>{{end}}
+                               <a class="{{if .IsChecked}}checked{{end}} item" href="#" data-id="{{.ID}}" {{if .IsArchived}}data-is-archived{{end}} data-id-selector="#label_{{.ID}}" data-scope="{{$exclusiveScope}}"><span class="octicon-check {{if not .IsChecked}}tw-invisible{{end}}">{{svg (Iif $exclusiveScope "octicon-dot-fill" "octicon-check")}}</span>&nbsp;&nbsp;{{ctx.RenderUtils.RenderLabel .}}
+                                       {{if .Description}}<br><small class="desc">{{.Description | ctx.RenderUtils.RenderEmoji}}</small>{{end}}
                                        <p class="archived-label-hint">{{template "repo/issue/labels/label_archived" .}}</p>
                                </a>
                        {{end}}
@@ -34,8 +34,8 @@
                                        <div class="divider"></div>
                                {{end}}
                                {{$previousExclusiveScope = $exclusiveScope}}
-                               <a class="{{if .IsChecked}}checked{{end}} item" href="#" data-id="{{.ID}}" {{if .IsArchived}}data-is-archived{{end}} data-id-selector="#label_{{.ID}}" data-scope="{{$exclusiveScope}}"><span class="octicon-check {{if not .IsChecked}}tw-invisible{{end}}">{{svg (Iif $exclusiveScope "octicon-dot-fill" "octicon-check")}}</span>&nbsp;&nbsp;{{RenderLabel $.Context ctx.Locale .}}
-                                       {{if .Description}}<br><small class="desc">{{.Description | RenderEmoji $.Context}}</small>{{end}}
+                               <a class="{{if .IsChecked}}checked{{end}} item" href="#" data-id="{{.ID}}" {{if .IsArchived}}data-is-archived{{end}} data-id-selector="#label_{{.ID}}" data-scope="{{$exclusiveScope}}"><span class="octicon-check {{if not .IsChecked}}tw-invisible{{end}}">{{svg (Iif $exclusiveScope "octicon-dot-fill" "octicon-check")}}</span>&nbsp;&nbsp;{{ctx.RenderUtils.RenderLabel .}}
+                                       {{if .Description}}<br><small class="desc">{{.Description | ctx.RenderUtils.RenderEmoji}}</small>{{end}}
                                        <p class="archived-label-hint">{{template "repo/issue/labels/label_archived" .}}</p>
                                </a>
                        {{end}}
index e56d1b9ecc7bd1b4c08d2e4a33b10d955141bfa5..6f1bebc0329a90fb97e7975e015b823f3bb73ddb 100644 (file)
                                                <input type="hidden" name="template-file" value="{{.TemplateFile}}">
                                                {{range .Fields}}
                                                        {{if eq .Type "input"}}
-                                                               {{template "repo/issue/fields/input" dict "Context" $.Context "item" .}}
+                                                               {{template "repo/issue/fields/input" "item" .}}
                                                        {{else if eq .Type "markdown"}}
-                                                               {{template "repo/issue/fields/markdown" dict "Context" $.Context "item" .}}
+                                                               {{template "repo/issue/fields/markdown" "item" .}}
                                                        {{else if eq .Type "textarea"}}
-                                                               {{template "repo/issue/fields/textarea" dict "Context" $.Context "item" . "root" $}}
+                                                               {{template "repo/issue/fields/textarea" "item" . "root" $}}
                                                        {{else if eq .Type "dropdown"}}
-                                                               {{template "repo/issue/fields/dropdown" dict "Context" $.Context "item" .}}
+                                                               {{template "repo/issue/fields/dropdown" "item" .}}
                                                        {{else if eq .Type "checkboxes"}}
-                                                               {{template "repo/issue/fields/checkboxes" dict "Context" $.Context "item" .}}
+                                                               {{template "repo/issue/fields/checkboxes" "item" .}}
                                                        {{end}}
                                                {{end}}
                                        {{else}}
index f42968ca9272a32ca3f68bcdba312e6e39a39def..30475331544cfe9113e0c47113b74741558ff607 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 ctx ctx.Locale .AddedLabels $.RepoLink .Issue) $createdStr}}
+                                                       {{ctx.Locale.TrN (len .AddedLabels) "repo.issues.add_label" "repo.issues.add_labels" (ctx.RenderUtils.RenderLabels .AddedLabels $.RepoLink .Issue) $createdStr}}
                                                {{else if and (not .AddedLabels) .RemovedLabels}}
-                                                       {{ctx.Locale.TrN (len .RemovedLabels) "repo.issues.remove_label" "repo.issues.remove_labels" (RenderLabels ctx ctx.Locale .RemovedLabels $.RepoLink .Issue) $createdStr}}
+                                                       {{ctx.Locale.TrN (len .RemovedLabels) "repo.issues.remove_label" "repo.issues.remove_labels" (ctx.RenderUtils.RenderLabels .RemovedLabels $.RepoLink .Issue) $createdStr}}
                                                {{else}}
-                                                       {{ctx.Locale.Tr "repo.issues.add_remove_labels" (RenderLabels ctx ctx.Locale .AddedLabels $.RepoLink .Issue) (RenderLabels ctx ctx.Locale .RemovedLabels $.RepoLink .Issue) $createdStr}}
+                                                       {{ctx.Locale.Tr "repo.issues.add_remove_labels" (ctx.RenderUtils.RenderLabels .AddedLabels $.RepoLink .Issue) (ctx.RenderUtils.RenderLabels .RemovedLabels $.RepoLink .Issue) $createdStr}}
                                                {{end}}
                                        </span>
                                </div>
                                {{template "shared/user/avatarlink" dict "user" .Poster}}
                                <span class="text grey muted-links">
                                        {{template "shared/user/authorlink" .Poster}}
-                                       {{ctx.Locale.Tr "repo.issues.change_title_at" (.OldTitle|RenderEmoji $.Context) (.NewTitle|RenderEmoji $.Context) $createdStr}}
+                                       {{ctx.Locale.Tr "repo.issues.change_title_at" (.OldTitle|ctx.RenderUtils.RenderEmoji) (.NewTitle|ctx.RenderUtils.RenderEmoji) $createdStr}}
                                </span>
                        </div>
                {{else if eq .Type 11}}
                        <div class="timeline-item-group">
                                <div class="timeline-item event" id="{{.HashTag}}">
                                        <a class="timeline-avatar"{{if gt .Poster.ID 0}} href="{{.Poster.HomeLink}}"{{end}}>
-                                               <img src="{{.Poster.AvatarLink $.Context}}" width="40" height="40">
+                                               <img src="{{.Poster.AvatarLink ctx}}" width="40" height="40">
                                        </a>
                                        <span class="badge grey">{{svg "octicon-x" 16}}</span>
                                        <span class="text grey muted-links">
index 08f9c63a290c94c55aa228c164f07d8393533484..d117bfbc51a63533b4ab02ca1510b814d877f5b4 100644 (file)
                                {{end}}
 
                                {{if .AllowMerge}} {{/* user is allowed to merge */}}
-                                       {{$prUnit := .Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypePullRequests}}
+                                       {{$prUnit := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypePullRequests}}
                                        {{if or $prUnit.PullRequestsConfig.AllowMerge $prUnit.PullRequestsConfig.AllowRebase $prUnit.PullRequestsConfig.AllowRebaseMerge $prUnit.PullRequestsConfig.AllowSquash $prUnit.PullRequestsConfig.AllowFastForwardOnly}}
                                                {{$hasPendingPullRequestMergeTip := ""}}
                                                {{if .HasPendingPullRequestMerge}}
index c168e98785eda37bb1b68cfd02d3848f441c669d..01fa43397819988852c0ccb94af51f740e4a75f7 100644 (file)
                        </div>
                </div>
        {{end}}
-       {{if .Repository.IsTimetrackerEnabled $.Context}}
+       {{if .Repository.IsTimetrackerEnabled ctx}}
                {{if and .CanUseTimetracker (not .Repository.IsArchived)}}
                        <div class="divider"></div>
                        <div class="ui timetrack">
                {{end}}
        </div>
 
-       {{if .Repository.IsDependenciesEnabled $.Context}}
+       {{if .Repository.IsDependenciesEnabled ctx}}
                <div class="divider"></div>
 
                <div class="ui depending">
                                        {{range .BlockingDependencies}}
                                                <div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} tw-flex tw-items-center tw-justify-between">
                                                        <div class="item-left tw-flex tw-justify-center tw-flex-col tw-flex-1 gt-ellipsis">
-                                                               <a class="title muted" href="{{.Issue.Link}}" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
-                                                                       #{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
+                                                               <a class="title muted" href="{{.Issue.Link}}" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | ctx.RenderUtils.RenderEmoji}}">
+                                                                       #{{.Issue.Index}} {{.Issue.Title | ctx.RenderUtils.RenderEmoji}}
                                                                </a>
                                                                <div class="text small gt-ellipsis" data-tooltip-content="{{.Repository.OwnerName}}/{{.Repository.Name}}">
                                                                        {{.Repository.OwnerName}}/{{.Repository.Name}}
                                        {{range .BlockedByDependencies}}
                                                <div class="item dependency{{if .Issue.IsClosed}} is-closed{{end}} tw-flex tw-items-center tw-justify-between">
                                                        <div class="item-left tw-flex tw-justify-center tw-flex-col tw-flex-1 gt-ellipsis">
-                                                               <a class="title muted" href="{{.Issue.Link}}" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
-                                                                       #{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
+                                                               <a class="title muted" href="{{.Issue.Link}}" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | ctx.RenderUtils.RenderEmoji}}">
+                                                                       #{{.Issue.Index}} {{.Issue.Title | ctx.RenderUtils.RenderEmoji}}
                                                                </a>
                                                                <div class="text small gt-ellipsis" data-tooltip-content="{{.Repository.OwnerName}}/{{.Repository.Name}}">
                                                                        {{.Repository.OwnerName}}/{{.Repository.Name}}
                                                                <div class="item-left tw-flex tw-justify-center tw-flex-col tw-flex-1 gt-ellipsis">
                                                                        <div class="gt-ellipsis">
                                                                                <span data-tooltip-content="{{ctx.Locale.Tr "repo.issues.dependency.no_permission.can_remove"}}">{{svg "octicon-lock" 16}}</span>
-                                                                               <span class="title" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}">
-                                                                                       #{{.Issue.Index}} {{.Issue.Title | RenderEmoji $.Context}}
+                                                                               <span class="title" data-tooltip-content="#{{.Issue.Index}} {{.Issue.Title | ctx.RenderUtils.RenderEmoji}}">
+                                                                                       #{{.Issue.Index}} {{.Issue.Title | ctx.RenderUtils.RenderEmoji}}
                                                                                </span>
                                                                        </div>
                                                                        <div class="text small gt-ellipsis" data-tooltip-content="{{.Repository.OwnerName}}/{{.Repository.Name}}">
index 45c19d19779832ad4efe14bb3eb896cef8d24ac5..0f796ce9bf754b1db192a05efcb180745004794d 100644 (file)
@@ -7,7 +7,7 @@
        {{$canEditIssueTitle := and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .Repository.IsArchived)}}
        <div class="issue-title" id="issue-title-display">
                <h1 class="tw-break-anywhere">
-                       {{RenderIssueTitle $.Context .Issue.Title ($.Repository.ComposeMetas ctx) | RenderCodeBlock}}
+                       {{ctx.RenderUtils.RenderIssueTitle .Issue.Title ($.Repository.ComposeMetas ctx) | RenderCodeBlock}}
                        <span class="index">#{{.Issue.Index}}</span>
                </h1>
                <div class="issue-title-buttons">
index 8bacb427bf32467070725c3ddad00be9fc108122..9d718d7197a4175073a03e8ee8fa9b3f26773df5 100644 (file)
        </a>
        {{template "repo/commit_statuses" dict "Status" .LatestCommitStatus "Statuses" .LatestCommitStatuses}}
        {{$commitLink:= printf "%s/commit/%s" .RepoLink (PathEscape .LatestCommit.ID.String)}}
-       <span class="grey commit-summary" title="{{.LatestCommit.Summary}}"><span class="message-wrapper">{{RenderCommitMessageLinkSubject $.Context .LatestCommit.Message $commitLink ($.Repository.ComposeMetas ctx)}}</span>
+       <span class="grey commit-summary" title="{{.LatestCommit.Summary}}"><span class="message-wrapper">{{ctx.RenderUtils.RenderCommitMessageLinkSubject .LatestCommit.Message $commitLink ($.Repository.ComposeMetas ctx)}}</span>
                {{if IsMultilineCommitMessage .LatestCommit.Message}}
                        <button class="ui button js-toggle-commit-body ellipsis-button" aria-expanded="false">...</button>
-                       <pre class="commit-body tw-hidden">{{RenderCommitBody $.Context .LatestCommit.Message ($.Repository.ComposeMetas ctx)}}</pre>
+                       <pre class="commit-body tw-hidden">{{ctx.RenderUtils.RenderCommitBody .LatestCommit.Message ($.Repository.ComposeMetas ctx)}}</pre>
                {{end}}
        </span>
 {{end}}
index 5a75740573cd96e9d0ed533b110ffe1b9d29063d..1d7923b2f2f7fa5de6f040987e3672f2dbd3edad 100644 (file)
                                <span class="ui green label">{{ctx.Locale.Tr "repo.activity.published_release_label"}}</span>
                                {{.TagName}}
                                {{if not .IsTag}}
-                                       <a class="title" href="{{$.RepoLink}}/src/{{.TagName | PathEscapeSegments}}">{{.Title | RenderEmoji $.Context | RenderCodeBlock}}</a>
+                                       <a class="title" href="{{$.RepoLink}}/src/{{.TagName | PathEscapeSegments}}">{{.Title | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</a>
                                {{end}}
                                {{DateUtils.TimeSince .CreatedUnix}}
                        </p>
                {{range .Activity.MergedPRs}}
                        <p class="desc">
                                <span class="ui purple label">{{ctx.Locale.Tr "repo.activity.merged_prs_label"}}</span>
-                               #{{.Index}} <a class="title" href="{{$.RepoLink}}/pulls/{{.Index}}">{{.Issue.Title | RenderEmoji $.Context | RenderCodeBlock}}</a>
+                               #{{.Index}} <a class="title" href="{{$.RepoLink}}/pulls/{{.Index}}">{{.Issue.Title | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</a>
                                {{DateUtils.TimeSince .MergedUnix}}
                        </p>
                {{end}}
                {{range .Activity.OpenedPRs}}
                        <p class="desc">
                                <span class="ui green label">{{ctx.Locale.Tr "repo.activity.opened_prs_label"}}</span>
-                               #{{.Index}} <a class="title" href="{{$.RepoLink}}/pulls/{{.Index}}">{{.Issue.Title | RenderEmoji $.Context | RenderCodeBlock}}</a>
+                               #{{.Index}} <a class="title" href="{{$.RepoLink}}/pulls/{{.Index}}">{{.Issue.Title | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</a>
                                {{DateUtils.TimeSince .Issue.CreatedUnix}}
                        </p>
                {{end}}
                {{range .Activity.ClosedIssues}}
                        <p class="desc">
                                <span class="ui red label">{{ctx.Locale.Tr "repo.activity.closed_issue_label"}}</span>
-                               #{{.Index}} <a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title | RenderEmoji $.Context | RenderCodeBlock}}</a>
+                               #{{.Index}} <a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</a>
                                {{DateUtils.TimeSince .ClosedUnix}}
                        </p>
                {{end}}
                {{range .Activity.OpenedIssues}}
                        <p class="desc">
                                <span class="ui green label">{{ctx.Locale.Tr "repo.activity.new_issue_label"}}</span>
-                               #{{.Index}} <a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title | RenderEmoji $.Context | RenderCodeBlock}}</a>
+                               #{{.Index}} <a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</a>
                                {{DateUtils.TimeSince .CreatedUnix}}
                        </p>
                {{end}}
                                <span class="ui green label">{{ctx.Locale.Tr "repo.activity.unresolved_conv_label"}}</span>
                                #{{.Index}}
                                {{if .IsPull}}
-                               <a class="title" href="{{$.RepoLink}}/pulls/{{.Index}}">{{.Title | RenderEmoji $.Context | RenderCodeBlock}}</a>
+                               <a class="title" href="{{$.RepoLink}}/pulls/{{.Index}}">{{.Title | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</a>
                                {{else}}
-                               <a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title | RenderEmoji $.Context | RenderCodeBlock}}</a>
+                               <a class="title" href="{{$.RepoLink}}/issues/{{.Index}}">{{.Title | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</a>
                                {{end}}
                                {{DateUtils.TimeSince .UpdatedUnix}}
                        </p>
index dcf070f6ac49151c39083a8455a4f6a51f32bbad..9f90f0a2b9614c0cd182031c65959a2fc261a2f1 100644 (file)
@@ -69,7 +69,7 @@
                                                        {{if or (eq .AccessMode 1) (eq .AccessMode 2)}}
                                                                {{$first := true}}
                                                                <div class="flex-item-body" data-tooltip-content="{{ctx.Locale.Tr "repo.settings.change_team_permission_tip"}}">
-                                                                       Sections: {{range $u, $unit := $.Units}}{{if and ($.Repo.UnitEnabled $.Context $unit.Type) ($team.UnitEnabled $.Context $unit.Type)}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{ctx.Locale.Tr $unit.NameKey}}{{end}}{{end}} {{if $first}}None{{end}}
+                                                                       Sections: {{range $u, $unit := $.Units}}{{if and ($.Repo.UnitEnabled ctx $unit.Type) ($team.UnitEnabled ctx $unit.Type)}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{ctx.Locale.Tr $unit.NameKey}}{{end}}{{end}} {{if $first}}None{{end}}
                                                                </div>
                                                        {{end}}
                                                </div>
index 4c6943618e4305a2e64c8136119dcb1fede6cf5f..59f1bb10cfdcf24e43c288f3e48dd86ef328f6ba 100644 (file)
@@ -15,7 +15,7 @@
                                                        <td class="message">
                                                                <span class="truncate">
                                                                        <a href="{{$.RepoLink}}/commit/{{.SHA}}" title="{{.Summary}}">
-                                                                               {{.Summary | RenderEmoji $.Context}}
+                                                                               {{.Summary | ctx.RenderUtils.RenderEmoji}}
                                                                        </a>
                                                                </span>
                                                        </td>
index e46273aff055f9b713ccfd4db7f3b251f83ee95f..3e127ccbb35172b21c8b233b3c9bbe268ed953d6 100644 (file)
@@ -12,7 +12,7 @@
                                {{ctx.Locale.Tr "repo.settings.hooks"}}
                        </a>
                {{end}}
-               {{if .Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeCode}}
+               {{if .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeCode}}
                        <a class="{{if .PageIsSettingsBranches}}active {{end}}item" href="{{.RepoLink}}/settings/branches">
                                {{ctx.Locale.Tr "repo.settings.branches"}}
                        </a>
index 6fc994ce9b2fd97b94475d8f9595bba0a1770171..1a7884bde29e071ea0db07363a3cc72e17f1fd2b 100644 (file)
@@ -53,7 +53,7 @@
                {{/* These variables exist to make the logic in the Settings window easier to comprehend and are not used later on. */}}
                {{$newMirrorsPartiallyEnabled := or (not .DisableNewPullMirrors) (not .DisableNewPushMirrors)}}
                {{/* .Repository.IsMirror is not always reliable if the repository is not actively acting as a mirror because of errors. */}}
-               {{$showMirrorSettings := and (.Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeCode) (or $newMirrorsPartiallyEnabled .Repository.IsMirror .PullMirror .PushMirrors)}}
+               {{$showMirrorSettings := and (.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeCode) (or $newMirrorsPartiallyEnabled .Repository.IsMirror .PullMirror .PushMirrors)}}
                {{$newMirrorsEntirelyEnabled := and (not .DisableNewPullMirrors) (not .DisableNewPushMirrors)}}
                {{$onlyNewPushMirrorsEnabled := and (not .DisableNewPushMirrors) .DisableNewPullMirrors}}
                {{$onlyNewPullMirrorsEnabled := and .DisableNewPushMirrors (not .DisableNewPullMirrors)}}
                                                                                        <label for="interval">{{ctx.Locale.Tr "repo.mirror_interval" .MinimumMirrorInterval}}</label>
                                                                                        <input id="interval" name="interval" value="{{.PullMirror.Interval}}">
                                                                                </div>
-                                                                               {{$address := MirrorRemoteAddress $.Context .Repository .PullMirror.GetRemoteName}}
+                                                                               {{$address := MirrorRemoteAddress ctx .Repository .PullMirror.GetRemoteName}}
                                                                                <div class="field {{if .Err_MirrorAddress}}error{{end}}">
                                                                                        <label for="mirror_address">{{ctx.Locale.Tr "repo.mirror_address"}}</label>
                                                                                        <input id="mirror_address" name="mirror_address" value="{{$address.Address}}" required>
                                {{.CsrfTokenHtml}}
                                <input type="hidden" name="action" value="advanced">
 
-                               {{$isCodeEnabled := .Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeCode}}
+                               {{$isCodeEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeCode}}
                                {{$isCodeGlobalDisabled := ctx.Consts.RepoUnitTypeCode.UnitGlobalDisabled}}
                                <div class="inline field">
                                        <label>{{ctx.Locale.Tr "repo.code"}}</label>
                                        </div>
                                        <div id="external_wiki_box" class="field tw-pl-4 {{if not $isExternalWikiEnabled}}disabled{{end}}">
                                                <label for="external_wiki_url">{{ctx.Locale.Tr "repo.settings.external_wiki_url"}}</label>
-                                               <input id="external_wiki_url" name="external_wiki_url" type="url" value="{{(.Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypeExternalWiki).ExternalWikiConfig.ExternalWikiURL}}">
+                                               <input id="external_wiki_url" name="external_wiki_url" type="url" value="{{(.Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeExternalWiki).ExternalWikiConfig.ExternalWikiURL}}">
                                                <p class="help">{{ctx.Locale.Tr "repo.settings.external_wiki_url_desc"}}</p>
                                        </div>
                                </div>
 
                                <div class="divider"></div>
 
-                               {{$isIssuesEnabled := or (.Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeIssues) (.Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeExternalTracker)}}
+                               {{$isIssuesEnabled := or (.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeIssues) (.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeExternalTracker)}}
                                {{$isIssuesGlobalDisabled := ctx.Consts.RepoUnitTypeIssues.UnitGlobalDisabled}}
                                {{$isExternalTrackerGlobalDisabled := ctx.Consts.RepoUnitTypeExternalTracker.UnitGlobalDisabled}}
                                {{$isIssuesAndExternalGlobalDisabled := and $isIssuesGlobalDisabled $isExternalTrackerGlobalDisabled}}
                                <div class="field {{if not $isIssuesEnabled}}disabled{{end}}" id="issue_box">
                                        <div class="field">
                                                <div class="ui radio checkbox{{if $isIssuesGlobalDisabled}} disabled{{end}}"{{if $isIssuesGlobalDisabled}} data-tooltip-content="{{ctx.Locale.Tr "repo.unit_disabled"}}"{{end}}>
-                                                       <input class="enable-system-radio" name="enable_external_tracker" type="radio" value="false" data-context="#internal_issue_box" data-target="#external_issue_box" {{if not (.Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeExternalTracker)}}checked{{end}}>
+                                                       <input class="enable-system-radio" name="enable_external_tracker" type="radio" value="false" data-context="#internal_issue_box" data-target="#external_issue_box" {{if not (.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeExternalTracker)}}checked{{end}}>
                                                        <label>{{ctx.Locale.Tr "repo.settings.use_internal_issue_tracker"}}</label>
                                                </div>
                                        </div>
-                                       <div class="field tw-pl-4 {{if (.Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeExternalTracker)}}disabled{{end}}" id="internal_issue_box">
+                                       <div class="field tw-pl-4 {{if (.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeExternalTracker)}}disabled{{end}}" id="internal_issue_box">
                                                {{if .Repository.CanEnableTimetracker}}
                                                        <div class="field">
                                                                <div class="ui checkbox">
-                                                                       <input name="enable_timetracker" class="enable-system" data-target="#only_contributors" type="checkbox" {{if .Repository.IsTimetrackerEnabled $.Context}}checked{{end}}>
+                                                                       <input name="enable_timetracker" class="enable-system" data-target="#only_contributors" type="checkbox" {{if .Repository.IsTimetrackerEnabled ctx}}checked{{end}}>
                                                                        <label>{{ctx.Locale.Tr "repo.settings.enable_timetracker"}}</label>
                                                                </div>
                                                        </div>
-                                                       <div class="field {{if not (.Repository.IsTimetrackerEnabled $.Context)}}disabled{{end}}" id="only_contributors">
+                                                       <div class="field {{if not (.Repository.IsTimetrackerEnabled ctx)}}disabled{{end}}" id="only_contributors">
                                                                <div class="ui checkbox">
-                                                                       <input name="allow_only_contributors_to_track_time" type="checkbox" {{if .Repository.AllowOnlyContributorsToTrackTime $.Context}}checked{{end}}>
+                                                                       <input name="allow_only_contributors_to_track_time" type="checkbox" {{if .Repository.AllowOnlyContributorsToTrackTime ctx}}checked{{end}}>
                                                                        <label>{{ctx.Locale.Tr "repo.settings.allow_only_contributors_to_track_time"}}</label>
                                                                </div>
                                                        </div>
                                                {{end}}
                                                <div class="field">
                                                        <div class="ui checkbox">
-                                                               <input name="enable_issue_dependencies" type="checkbox" {{if (.Repository.IsDependenciesEnabled $.Context)}}checked{{end}}>
+                                                               <input name="enable_issue_dependencies" type="checkbox" {{if (.Repository.IsDependenciesEnabled ctx)}}checked{{end}}>
                                                                <label>{{ctx.Locale.Tr "repo.issues.dependency.setting"}}</label>
                                                        </div>
                                                </div>
                                        </div>
                                        <div class="field">
                                                <div class="ui radio checkbox{{if $isExternalTrackerGlobalDisabled}} disabled{{end}}"{{if $isExternalTrackerGlobalDisabled}} data-tooltip-content="{{ctx.Locale.Tr "repo.unit_disabled"}}"{{end}}>
-                                                       <input class="enable-system-radio" name="enable_external_tracker" type="radio" value="true" data-context="#internal_issue_box" data-target="#external_issue_box" {{if .Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeExternalTracker}}checked{{end}}>
+                                                       <input class="enable-system-radio" name="enable_external_tracker" type="radio" value="true" data-context="#internal_issue_box" data-target="#external_issue_box" {{if .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeExternalTracker}}checked{{end}}>
                                                        <label>{{ctx.Locale.Tr "repo.settings.use_external_issue_tracker"}}</label>
                                                </div>
                                        </div>
-                                       <div class="field tw-pl-4 {{if not (.Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeExternalTracker)}}disabled{{end}}" id="external_issue_box">
+                                       <div class="field tw-pl-4 {{if not (.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeExternalTracker)}}disabled{{end}}" id="external_issue_box">
                                                <div class="field">
                                                        <label for="external_tracker_url">{{ctx.Locale.Tr "repo.settings.external_tracker_url"}}</label>
-                                                       <input id="external_tracker_url" name="external_tracker_url" type="url" value="{{(.Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypeExternalTracker).ExternalTrackerConfig.ExternalTrackerURL}}">
+                                                       <input id="external_tracker_url" name="external_tracker_url" type="url" value="{{(.Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeExternalTracker).ExternalTrackerConfig.ExternalTrackerURL}}">
                                                        <p class="help">{{ctx.Locale.Tr "repo.settings.external_tracker_url_desc"}}</p>
                                                </div>
                                                <div class="field">
                                                        <label for="tracker_url_format">{{ctx.Locale.Tr "repo.settings.tracker_url_format"}}</label>
-                                                       <input id="tracker_url_format" name="tracker_url_format" type="url" value="{{(.Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypeExternalTracker).ExternalTrackerConfig.ExternalTrackerFormat}}" placeholder="https://github.com/{user}/{repo}/issues/{index}">
+                                                       <input id="tracker_url_format" name="tracker_url_format" type="url" value="{{(.Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeExternalTracker).ExternalTrackerConfig.ExternalTrackerFormat}}" placeholder="https://github.com/{user}/{repo}/issues/{index}">
                                                        <p class="help">{{ctx.Locale.Tr "repo.settings.tracker_url_format_desc"}}</p>
                                                </div>
                                                <div class="inline fields">
                                                        <label for="issue_style">{{ctx.Locale.Tr "repo.settings.tracker_issue_style"}}</label>
                                                        <div class="field">
                                                                <div class="ui radio checkbox">
-                                                               {{$externalTracker := (.Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypeExternalTracker)}}
+                                                               {{$externalTracker := (.Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeExternalTracker)}}
                                                                {{$externalTrackerStyle := $externalTracker.ExternalTrackerConfig.ExternalTrackerStyle}}
                                                                        <input class="js-tracker-issue-style" name="tracker_issue_style" type="radio" value="numeric" {{if eq $externalTrackerStyle "numeric"}}checked{{end}}>
                                                                        <label>{{ctx.Locale.Tr "repo.settings.tracker_issue_style.numeric"}} <span class="ui light grey text">#1234</span></label>
                                                </div>
                                                <div class="field {{if ne $externalTrackerStyle "regexp"}}disabled{{end}}" id="tracker-issue-style-regex-box">
                                                        <label for="external_tracker_regexp_pattern">{{ctx.Locale.Tr "repo.settings.tracker_issue_style.regexp_pattern"}}</label>
-                                                       <input id="external_tracker_regexp_pattern" name="external_tracker_regexp_pattern" value="{{(.Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypeExternalTracker).ExternalTrackerConfig.ExternalTrackerRegexpPattern}}">
+                                                       <input id="external_tracker_regexp_pattern" name="external_tracker_regexp_pattern" value="{{(.Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeExternalTracker).ExternalTrackerConfig.ExternalTrackerRegexpPattern}}">
                                                        <p class="help">{{ctx.Locale.Tr "repo.settings.tracker_issue_style.regexp_pattern_desc"}}</p>
                                                </div>
                                        </div>
 
                                <div class="divider"></div>
 
-                               {{$isProjectsEnabled := .Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeProjects}}
+                               {{$isProjectsEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeProjects}}
                                {{$isProjectsGlobalDisabled := ctx.Consts.RepoUnitTypeProjects.UnitGlobalDisabled}}
-                               {{$projectsUnit := .Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypeProjects}}
+                               {{$projectsUnit := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeProjects}}
                                <div class="inline field">
                                        <label>{{ctx.Locale.Tr "repo.projects"}}</label>
                                        <div class="ui checkbox{{if $isProjectsGlobalDisabled}} disabled{{end}}"{{if $isProjectsGlobalDisabled}} data-tooltip-content="{{ctx.Locale.Tr "repo.unit_disabled"}}"{{end}}>
 
                                <div class="divider"></div>
 
-                               {{$isReleasesEnabled := .Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeReleases}}
+                               {{$isReleasesEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeReleases}}
                                {{$isReleasesGlobalDisabled := ctx.Consts.RepoUnitTypeReleases.UnitGlobalDisabled}}
                                <div class="inline field">
                                        <label>{{ctx.Locale.Tr "repo.releases"}}</label>
                                        </div>
                                </div>
 
-                               {{$isPackagesEnabled := .Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypePackages}}
+                               {{$isPackagesEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypePackages}}
                                {{$isPackagesGlobalDisabled := ctx.Consts.RepoUnitTypePackages.UnitGlobalDisabled}}
                                <div class="inline field">
                                        <label>{{ctx.Locale.Tr "repo.packages"}}</label>
                                </div>
 
                                {{if .EnableActions}}
-                                       {{$isActionsEnabled := .Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeActions}}
+                                       {{$isActionsEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeActions}}
                                        {{$isActionsGlobalDisabled := ctx.Consts.RepoUnitTypeActions.UnitGlobalDisabled}}
                                        <div class="inline field">
                                                <label>{{ctx.Locale.Tr "actions.actions"}}</label>
 
                                {{if not .IsMirror}}
                                        <div class="divider"></div>
-                                       {{$pullRequestEnabled := .Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypePullRequests}}
+                                       {{$pullRequestEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypePullRequests}}
                                        {{$pullRequestGlobalDisabled := ctx.Consts.RepoUnitTypePullRequests.UnitGlobalDisabled}}
-                                       {{$prUnit := .Repository.MustGetUnit $.Context ctx.Consts.RepoUnitTypePullRequests}}
+                                       {{$prUnit := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypePullRequests}}
                                        <div class="inline field">
                                                <label>{{ctx.Locale.Tr "repo.pulls"}}</label>
                                                <div class="ui checkbox{{if $pullRequestGlobalDisabled}} disabled{{end}}"{{if $pullRequestGlobalDisabled}} data-tooltip-content="{{ctx.Locale.Tr "repo.unit_disabled"}}"{{end}}>
                </div>
        {{end}}
 
-       {{if .Repository.UnitEnabled $.Context ctx.Consts.RepoUnitTypeWiki}}
+       {{if .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeWiki}}
        <div class="ui small modal" id="delete-wiki-modal">
                <div class="header">
                        {{ctx.Locale.Tr "repo.settings.wiki_delete"}}
index c87a86585b546443f3f7d75319b5e836b7750915..c4d61edad8b365b39d7ac878c11bd103269991e9 100644 (file)
@@ -57,7 +57,7 @@
                                        <span class="truncate">
                                                {{if $commit}}
                                                        {{$commitLink := printf "%s/commit/%s" $.RepoLink (PathEscape $commit.ID.String)}}
-                                                       {{RenderCommitMessageLinkSubject $.Context $commit.Message $commitLink ($.Repository.ComposeMetas ctx)}}
+                                                       {{ctx.RenderUtils.RenderCommitMessageLinkSubject $commit.Message $commitLink ($.Repository.ComposeMetas ctx)}}
                                                {{else}}
                                                        <div class="ui active tiny slow centered inline"></div>
                                                {{end}}
index f15e8124860c55eff7b45f8ee0c6beb73e6771cb..ef2352665d586cd88f2f2edac4bdfac4729ffc05 100644 (file)
@@ -13,7 +13,7 @@
                        <div class="flex-item-main">
                                <div class="flex-item-header">
                                        <div class="flex-item-title">
-                                               <a class="tw-no-underline issue-title" href="{{if .Link}}{{.Link}}{{else}}{{$.Link}}/{{.Index}}{{end}}">{{RenderEmoji $.Context .Title | RenderCodeBlock}}</a>
+                                               <a class="tw-no-underline issue-title" href="{{if .Link}}{{.Link}}{{else}}{{$.Link}}/{{.Index}}{{end}}">{{ctx.RenderUtils.RenderEmoji .Title | RenderCodeBlock}}</a>
                                                {{if .IsPull}}
                                                        {{if (index $.CommitStatuses .PullRequest.ID)}}
                                                                {{template "repo/commit_statuses" dict "Status" (index $.CommitLastStatus .PullRequest.ID) "Statuses" (index $.CommitStatuses .PullRequest.ID)}}
@@ -21,7 +21,7 @@
                                                {{end}}
                                                <span class="labels-list tw-ml-1">
                                                        {{range .Labels}}
-                                                               <a href="?q={{$.Keyword}}&type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}{{if ne $.listType "milestone"}}&milestone={{$.MilestoneID}}{{end}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{RenderLabel $.Context ctx.Locale .}}</a>
+                                                               <a href="?q={{$.Keyword}}&type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}{{if ne $.listType "milestone"}}&milestone={{$.MilestoneID}}{{end}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.RenderUtils.RenderLabel .}}</a>
                                                        {{end}}
                                                </span>
                                        </div>
index 73698abc710c65bd45a912825fdfa19a2402a39e..d3e2f7a06c2b3740e56c789ae86dc6042badb8b2 100644 (file)
@@ -71,7 +71,7 @@
                                                {{$index := index .GetIssueInfos 0}}
                                                {{ctx.Locale.Tr "action.comment_pull" (printf "%s/pulls/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
                                        {{else if .GetOpType.InActions "publish_release"}}
-                                               {{$linkText := .Content | RenderEmoji $.Context}}
+                                               {{$linkText := .Content | ctx.RenderUtils.RenderEmoji}}
                                                {{ctx.Locale.Tr "action.publish_release" (.GetRepoLink ctx) (printf "%s/releases/tag/%s" (.GetRepoLink ctx) .GetTag) (.ShortRepoPath ctx) $linkText}}
                                        {{else if .GetOpType.InActions "review_dismissed"}}
                                                {{$index := index .GetIssueInfos 0}}
                                                {{range $push.Commits}}
                                                        {{$commitLink := printf "%s/commit/%s" $repoLink .Sha1}}
                                                        <div class="flex-text-block">
-                                                               <img class="ui avatar" src="{{$push.AvatarLink $.Context .AuthorEmail}}" title="{{.AuthorName}}" width="16" height="16">
+                                                               <img class="ui avatar" src="{{$push.AvatarLink ctx .AuthorEmail}}" title="{{.AuthorName}}" width="16" height="16">
                                                                <a class="ui sha label" href="{{$commitLink}}">{{ShortSha .Sha1}}</a>
                                                                <span class="text truncate">
-                                                                       {{RenderCommitMessage $.Context .Message ($repo.ComposeMetas ctx)}}
+                                                                       {{ctx.RenderUtils.RenderCommitMessage .Message ($repo.ComposeMetas ctx)}}
                                                                </span>
                                                        </div>
                                                {{end}}
                                                <a href="{{AppSubUrl}}/{{$push.CompareURL}}">{{ctx.Locale.Tr "action.compare_commits" $push.Len}} ยป</a>
                                        {{end}}
                                {{else if .GetOpType.InActions "create_issue"}}
-                                       <span class="text truncate issue title">{{index .GetIssueInfos 1 | RenderEmoji $.Context | RenderCodeBlock}}</span>
+                                       <span class="text truncate issue title">{{index .GetIssueInfos 1 | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</span>
                                {{else if .GetOpType.InActions "create_pull_request"}}
-                                       <span class="text truncate issue title">{{index .GetIssueInfos 1 | RenderEmoji $.Context | RenderCodeBlock}}</span>
+                                       <span class="text truncate issue title">{{index .GetIssueInfos 1 | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</span>
                                {{else if .GetOpType.InActions "comment_issue" "approve_pull_request" "reject_pull_request" "comment_pull"}}
-                                       <a href="{{.GetCommentLink ctx}}" class="text truncate issue title">{{(.GetIssueTitle ctx) | RenderEmoji $.Context | RenderCodeBlock}}</a>
+                                       <a href="{{.GetCommentLink ctx}}" class="text truncate issue title">{{(.GetIssueTitle ctx) | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</a>
                                        {{$comment := index .GetIssueInfos 1}}
                                        {{if $comment}}
-                                               <div class="markup tw-text-14">{{RenderMarkdownToHtml ctx $comment}}</div>
+                                               <div class="markup tw-text-14">{{ctx.RenderUtils.MarkdownToHtml $comment}}</div>
                                        {{end}}
                                {{else if .GetOpType.InActions "merge_pull_request"}}
                                        <div class="flex-item-body text black">{{index .GetIssueInfos 1}}</div>
                                {{else if .GetOpType.InActions "close_issue" "reopen_issue" "close_pull_request" "reopen_pull_request"}}
-                                       <span class="text truncate issue title">{{(.GetIssueTitle ctx) | RenderEmoji $.Context | RenderCodeBlock}}</span>
+                                       <span class="text truncate issue title">{{(.GetIssueTitle ctx) | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}</span>
                                {{else if .GetOpType.InActions "pull_review_dismissed"}}
                                <div class="flex-item-body text black">{{ctx.Locale.Tr "action.review_dismissed_reason"}}</div>
-                               <div class="flex-item-body text black">{{index .GetIssueInfos 2 | RenderEmoji $.Context}}</div>
+                               <div class="flex-item-body text black">{{index .GetIssueInfos 2 | ctx.RenderUtils.RenderEmoji}}</div>
                                {{end}}
                        </div>
                        <div class="flex-item-trailing">
index 7c36b2c66a29b64f78cdf8589d4467228b2a6762..c2bb4e2e87b1f180d3c3f7f212f49471a3b582d1 100644 (file)
@@ -53,7 +53,7 @@
                                                                <div class="notifications-bottom-row tw-text-16 tw-py-0.5">
                                                                        <span class="issue-title tw-break-anywhere">
                                                                                {{if .Issue}}
-                                                                                       {{.Issue.Title | RenderEmoji $.Context | RenderCodeBlock}}
+                                                                                       {{.Issue.Title | ctx.RenderUtils.RenderEmoji | RenderCodeBlock}}
                                                                                {{else}}
                                                                                        {{.Repository.FullName}}
                                                                                {{end}}