mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-27 00:23:41 +09:00 
			
		
		
		
	Breaking summary for template refactoring (#29395)
https://github.com/go-gitea/gitea/pull/29395
This commit is contained in:
		| @@ -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 messages. Here's a list of some of them: | ||||
|  | ||||
| | Name             | Parameters  | Available | Usage                                                                       | | ||||
| | ---------------- | ----------- | --------- |-----------------------------------------------------------------------------| | ||||
| | `AppUrl`         | -           | Any       | Gitea's URL                                                                 | | ||||
| | `AppName`        | -           | Any       | Set from `app.ini`, usually "Gitea"                                         | | ||||
| | `AppDomain`      | -           | Any       | Gitea's host name                                                           | | ||||
| | `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.                 | | ||||
| | `SafeHTML`       | string      | Body only | Takes the input as HTML; can be used for `.ReviewComments.RenderedContent`. | | ||||
| | Name             | Parameters  | Available | Usage                                                               | | ||||
| | ---------------- | ----------- | --------- | ------------------------------------------------------------------- | | ||||
| | `AppUrl`         | -           | Any       | Gitea's URL                                                         | | ||||
| | `AppName`        | -           | Any       | Set from `app.ini`, usually "Gitea"                                 | | ||||
| | `AppDomain`      | -           | Any       | Gitea's host name                                                   | | ||||
| | `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          | | ||||
| | `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: | ||||
|  | ||||
|   | ||||
| @@ -242,14 +242,14 @@ _主题_ 和 _邮件正文_ 由 [Golang的模板引擎](https://go.dev/pkg/text/ | ||||
|  | ||||
| 模板系统包含一些函数,可用于进一步处理和格式化消息。以下是其中一些函数的列表: | ||||
|  | ||||
| | 函数名              | 参数        | 可用于       | 用法                                                      | | ||||
| |------------------| ----------- | ------------ |---------------------------------------------------------| | ||||
| | `AppUrl`         | -           | 任何地方     | Gitea 的 URL                                             | | ||||
| | `AppName`        | -           | 任何地方     | 从 `app.ini` 中设置,通常为 "Gitea"                             | | ||||
| | `AppDomain`      | -           | 任何地方     | Gitea 的主机名                                              | | ||||
| | `EllipsisString` | string, int | 任何地方     | 将字符串截断为指定长度;根据需要添加省略号                                   | | ||||
| | `SanitizeHTML`   | string      | 仅正文部分   | 通过删除其中的危险 HTML 标签对文本进行清理                                | | ||||
| | `SafeHTML`       | string      | 仅正文部分   | 将输入作为 HTML 处理;可用于 `.ReviewComments.RenderedContent` 等字段 | | ||||
| | 函数名              | 参数        | 可用于       | 用法                             | | ||||
| |------------------| ----------- | ------------ | ------------------------------ | | ||||
| | `AppUrl`         | -           | 任何地方     | Gitea 的 URL                    | | ||||
| | `AppName`        | -           | 任何地方     | 从 `app.ini` 中设置,通常为 "Gitea"    | | ||||
| | `AppDomain`      | -           | 任何地方     | Gitea 的主机名                     | | ||||
| | `EllipsisString` | string, int | 任何地方     | 将字符串截断为指定长度;根据需要添加省略号          | | ||||
| | `SanitizeHTML`   | string      | 仅正文部分   | 通过删除其中的危险 HTML 标签对文本进行清理       | | ||||
| | `SafeHTML`       | string      | 仅正文部分   | 将输入作为 HTML 处理;可用于输出原始的 HTML 内容 | | ||||
|  | ||||
| 这些都是 _函数_,而不是元数据,因此必须按以下方式使用: | ||||
|  | ||||
|   | ||||
| @@ -5,6 +5,7 @@ package templates | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"html/template" | ||||
| 	"regexp" | ||||
| 	"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 | ||||
| 	var subjectContent []byte | ||||
| 	bodyContent := content | ||||
| @@ -42,20 +43,13 @@ func buildSubjectBodyTemplate(stpl *texttmpl.Template, btpl *template.Template, | ||||
| 		subjectContent = content[0:loc[0]] | ||||
| 		bodyContent = content[loc[1]:] | ||||
| 	} | ||||
| 	if _, err := stpl.New(name). | ||||
| 		Parse(string(subjectContent)); err != nil { | ||||
| 		log.Error("Failed to parse template [%s/subject]: %v", name, err) | ||||
| 		if !setting.IsProd { | ||||
| 			log.Fatal("Please fix the mail template error") | ||||
| 		} | ||||
| 	if _, err := stpl.New(name).Parse(string(subjectContent)); err != nil { | ||||
| 		return fmt.Errorf("failed to parse template [%s/subject]: %w", name, err) | ||||
| 	} | ||||
| 	if _, err := btpl.New(name). | ||||
| 		Parse(string(bodyContent)); err != nil { | ||||
| 		log.Error("Failed to parse template [%s/body]: %v", name, err) | ||||
| 		if !setting.IsProd { | ||||
| 			log.Fatal("Please fix the mail template error") | ||||
| 		} | ||||
| 	if _, err := btpl.New(name).Parse(string(bodyContent)); err != nil { | ||||
| 		return fmt.Errorf("failed to parse template [%s/body]: %w", name, err) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Mailer provides the templates required for sending notification mails. | ||||
| @@ -87,7 +81,13 @@ func Mailer(ctx context.Context) (*texttmpl.Template, *template.Template) { | ||||
| 			if firstRun { | ||||
| 				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) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -65,7 +65,7 @@ | ||||
| 			{{$.locale.Tr "mail.issue.in_tree_path" .TreePath}} | ||||
| 			<div class="review"> | ||||
| 				<pre>{{.Patch}}</pre> | ||||
| 				<div>{{.RenderedContent | SafeHTML}}</div> | ||||
| 				<div>{{.RenderedContent}}</div> | ||||
| 			</div> | ||||
| 		{{end -}} | ||||
| 		{{if eq .ActionName "push"}} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user