mirror of https://github.com/go-gitea/gitea.git
14 changed files with 156 additions and 49 deletions
@ -0,0 +1,58 @@
@@ -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 @@
@@ -1,2 +1,3 @@
|
||||
{{template "base/head" ctx.RootData}} |
||||
<link rel="stylesheet" href="{{AssetUrlPrefix}}/css/devtest.css?v={{AssetVersion}}"> |
||||
{{template "base/alert" .}} |
||||
|
||||
@ -0,0 +1,27 @@
@@ -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