mirror of https://github.com/go-gitea/gitea.git
14 changed files with 156 additions and 49 deletions
@ -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 + ".mock.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") |
||||||
|
} |
||||||
@ -1,2 +1,3 @@ |
|||||||
{{template "base/head" ctx.RootData}} |
{{template "base/head" ctx.RootData}} |
||||||
<link rel="stylesheet" href="{{AssetUrlPrefix}}/css/devtest.css?v={{AssetVersion}}"> |
<link rel="stylesheet" href="{{AssetUrlPrefix}}/css/devtest.css?v={{AssetVersion}}"> |
||||||
|
{{template "base/alert" .}} |
||||||
|
|||||||
@ -0,0 +1,27 @@ |
|||||||
|
{{template "devtest/devtest-header"}} |
||||||
|
<div class="page-content devtest ui container"> |
||||||
|
<div class="flex-text-block tw-flex-wrap"> |
||||||
|
{{range $templateName := .MailTemplateNames}} |
||||||
|
<a class="ui button" href="?tmpl={{$templateName}}">{{$templateName}}</a> |
||||||
|
{{else}} |
||||||
|
<p>Mailer service is not enabled or no template is found</p> |
||||||
|
{{end}} |
||||||
|
</div> |
||||||
|
|
||||||
|
{{if .RenderMailTemplateName}} |
||||||
|
<div class="tw-my-2"> |
||||||
|
<div>Preview of: {{.RenderMailTemplateName}}</div> |
||||||
|
<div>Subject: {{.RenderMailSubject}}</div> |
||||||
|
<iframe src="{{AppSubUrl}}/devtest/mail-preview/{{.RenderMailTemplateName}}" class="mail-preview-body"></iframe> |
||||||
|
<style> |
||||||
|
.mail-preview-body { |
||||||
|
border: 1px solid #ccc; |
||||||
|
width: 100%; |
||||||
|
height: 400px; |
||||||
|
overflow: auto; |
||||||
|
} |
||||||
|
</style> |
||||||
|
</div> |
||||||
|
{{end}} |
||||||
|
</div> |
||||||
|
{{template "devtest/devtest-footer"}} |
||||||
Loading…
Reference in new issue