diff options
Diffstat (limited to 'routers/web/devtest/mail_preview.go')
-rw-r--r-- | routers/web/devtest/mail_preview.go | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/routers/web/devtest/mail_preview.go b/routers/web/devtest/mail_preview.go new file mode 100644 index 0000000000..d6bade15d7 --- /dev/null +++ b/routers/web/devtest/mail_preview.go @@ -0,0 +1,58 @@ +// Copyright 2025 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package devtest + +import ( + "net/http" + "strings" + + "code.gitea.io/gitea/modules/templates" + "code.gitea.io/gitea/services/context" + "code.gitea.io/gitea/services/mailer" + + "gopkg.in/yaml.v3" +) + +func MailPreviewRender(ctx *context.Context) { + tmplName := ctx.PathParam("*") + mockDataContent, err := templates.AssetFS().ReadFile("mail/" + tmplName + ".devtest.yml") + mockData := map[string]any{} + if err == nil { + err = yaml.Unmarshal(mockDataContent, &mockData) + if err != nil { + http.Error(ctx.Resp, "Failed to parse mock data: "+err.Error(), http.StatusInternalServerError) + return + } + } + mockData["locale"] = ctx.Locale + err = mailer.LoadedTemplates().BodyTemplates.ExecuteTemplate(ctx.Resp, tmplName, mockData) + if err != nil { + _, _ = ctx.Resp.Write([]byte(err.Error())) + } +} + +func prepareMailPreviewRender(ctx *context.Context, tmplName string) { + tmplSubject := mailer.LoadedTemplates().SubjectTemplates.Lookup(tmplName) + if tmplSubject == nil { + ctx.Data["RenderMailSubject"] = "default subject" + } else { + var buf strings.Builder + err := tmplSubject.Execute(&buf, nil) + if err != nil { + ctx.Data["RenderMailSubject"] = err.Error() + } else { + ctx.Data["RenderMailSubject"] = buf.String() + } + } + ctx.Data["RenderMailTemplateName"] = tmplName +} + +func MailPreview(ctx *context.Context) { + ctx.Data["MailTemplateNames"] = mailer.LoadedTemplates().TemplateNames + tmplName := ctx.FormString("tmpl") + if tmplName != "" { + prepareMailPreviewRender(ctx, tmplName) + } + ctx.HTML(http.StatusOK, "devtest/mail-preview") +} |