1
0
Fork 0

Breaking summary for template refactoring (#29395)

https://github.com/go-gitea/gitea/pull/29395
(cherry picked from commit e71b69257c38178eed9ccd0b62a5ae47d67858d4)
This commit is contained in:
wxiaoguang 2024-03-03 12:57:22 +08:00 committed by Earl Warren
parent fa6627fadb
commit 99b1a39aef
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
4 changed files with 31 additions and 31 deletions

View file

@ -259,14 +259,14 @@ This template produces something along these lines:
The template system contains several functions that can be used to further process and format The template system contains several functions that can be used to further process and format
the messages. Here's a list of some of them: the messages. Here's a list of some of them:
| Name | Parameters | Available | Usage | | Name | Parameters | Available | Usage |
| ---------------- | ----------- | --------- |-----------------------------------------------------------------------------| | ---------------- | ----------- | --------- | ------------------------------------------------------------------- |
| `AppUrl` | - | Any | Gitea's URL | | `AppUrl` | - | Any | Gitea's URL |
| `AppName` | - | Any | Set from `app.ini`, usually "Gitea" | | `AppName` | - | Any | Set from `app.ini`, usually "Gitea" |
| `AppDomain` | - | Any | Gitea's host name | | `AppDomain` | - | Any | Gitea's host name |
| `EllipsisString` | string, int | Any | Truncates a string to the specified length; adds ellipsis as needed | | `EllipsisString` | string, int | Any | Truncates a string to the specified length; adds ellipsis as needed |
| `SanitizeHTML` | string | Body only | Sanitizes text by removing any dangerous HTML tags from it. | | `SanitizeHTML` | string | Body only | Sanitizes text by removing any dangerous HTML tags from it |
| `SafeHTML` | string | Body only | Takes the input as HTML; can be used for `.ReviewComments.RenderedContent`. | | `SafeHTML` | string | Body only | Takes the input as HTML, can be used for outputing raw HTML content |
These are _functions_, not metadata, so they have to be used: These are _functions_, not metadata, so they have to be used:

View file

@ -242,14 +242,14 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://go.dev/pkg/text/
模板系统包含一些函数,可用于进一步处理和格式化消息。以下是其中一些函数的列表: 模板系统包含一些函数,可用于进一步处理和格式化消息。以下是其中一些函数的列表:
| 函数名 | 参数 | 可用于 | 用法 | | 函数名 | 参数 | 可用于 | 用法 |
|------------------| ----------- | ------------ |---------------------------------------------------------| |------------------| ----------- | ------------ | ------------------------------ |
| `AppUrl` | - | 任何地方 | Gitea 的 URL | | `AppUrl` | - | 任何地方 | Gitea 的 URL |
| `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常为 "Gitea" | | `AppName` | - | 任何地方 | 从 `app.ini` 中设置,通常为 "Gitea" |
| `AppDomain` | - | 任何地方 | Gitea 的主机名 | | `AppDomain` | - | 任何地方 | Gitea 的主机名 |
| `EllipsisString` | string, int | 任何地方 | 将字符串截断为指定长度;根据需要添加省略号 | | `EllipsisString` | string, int | 任何地方 | 将字符串截断为指定长度;根据需要添加省略号 |
| `SanitizeHTML` | string | 仅正文部分 | 通过删除其中的危险 HTML 标签对文本进行清理 | | `SanitizeHTML` | string | 仅正文部分 | 通过删除其中的危险 HTML 标签对文本进行清理 |
| `SafeHTML` | string | 仅正文部分 | 将输入作为 HTML 处理;可用于 `.ReviewComments.RenderedContent` 等字段 | | `SafeHTML` | string | 仅正文部分 | 将输入作为 HTML 处理;可用于输出原始的 HTML 内容 |
这些都是 _函数_,而不是元数据,因此必须按以下方式使用: 这些都是 _函数_,而不是元数据,因此必须按以下方式使用:

View file

@ -5,6 +5,7 @@ package templates
import ( import (
"context" "context"
"fmt"
"html/template" "html/template"
"regexp" "regexp"
"strings" "strings"
@ -33,7 +34,7 @@ func mailSubjectTextFuncMap() texttmpl.FuncMap {
} }
} }
func buildSubjectBodyTemplate(stpl *texttmpl.Template, btpl *template.Template, name string, content []byte) { func buildSubjectBodyTemplate(stpl *texttmpl.Template, btpl *template.Template, name string, content []byte) error {
// Split template into subject and body // Split template into subject and body
var subjectContent []byte var subjectContent []byte
bodyContent := content bodyContent := content
@ -42,20 +43,13 @@ func buildSubjectBodyTemplate(stpl *texttmpl.Template, btpl *template.Template,
subjectContent = content[0:loc[0]] subjectContent = content[0:loc[0]]
bodyContent = content[loc[1]:] bodyContent = content[loc[1]:]
} }
if _, err := stpl.New(name). if _, err := stpl.New(name).Parse(string(subjectContent)); err != nil {
Parse(string(subjectContent)); err != nil { return fmt.Errorf("failed to parse template [%s/subject]: %w", name, err)
log.Error("Failed to parse template [%s/subject]: %v", name, err)
if !setting.IsProd {
log.Fatal("Please fix the mail template error")
}
} }
if _, err := btpl.New(name). if _, err := btpl.New(name).Parse(string(bodyContent)); err != nil {
Parse(string(bodyContent)); err != nil { return fmt.Errorf("failed to parse template [%s/body]: %w", name, err)
log.Error("Failed to parse template [%s/body]: %v", name, err)
if !setting.IsProd {
log.Fatal("Please fix the mail template error")
}
} }
return nil
} }
// Mailer provides the templates required for sending notification mails. // Mailer provides the templates required for sending notification mails.
@ -87,7 +81,13 @@ func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) {
if firstRun { if firstRun {
log.Trace("Adding mail template %s: %s by %s", tmplName, assetPath, layerName) log.Trace("Adding mail template %s: %s by %s", tmplName, assetPath, layerName)
} }
buildSubjectBodyTemplate(subjectTemplates, bodyTemplates, tmplName, content) if err = buildSubjectBodyTemplate(subjectTemplates, bodyTemplates, tmplName, content); err != nil {
if firstRun {
log.Fatal("Failed to parse mail template, err: %v", err)
} else {
log.Error("Failed to parse mail template, err: %v", err)
}
}
} }
} }

View file

@ -65,7 +65,7 @@
{{$.locale.Tr "mail.issue.in_tree_path" .TreePath}} {{$.locale.Tr "mail.issue.in_tree_path" .TreePath}}
<div class="review"> <div class="review">
<pre>{{.Patch}}</pre> <pre>{{.Patch}}</pre>
<div>{{.RenderedContent | SafeHTML}}</div> <div>{{.RenderedContent}}</div>
</div> </div>
{{end -}} {{end -}}
{{if eq .ActionName "push"}} {{if eq .ActionName "push"}}