From fdbd64611383f8b78dc76765f6edfa3e40a3a0bf Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Sat, 8 Apr 2023 21:15:22 +0800 Subject: Group template helper functions, remove `Printf`, improve template error messages (#23982) Follow #23328 Major changes: * Group the function in `templates/help.go` by their purposes. It could make future work easier. * Remove the `Printf` helper function, there is already a builtin `printf`. * Remove `DiffStatsWidth`, replace with `Eval` in template * Rename the `NewTextFuncMap` to `mailSubjectTextFuncMap`, it's for subject text template only, no need to make it support HTML functions. ---- And fine tune template error messages, to make it more friendly to developers and users. ![image](https://user-images.githubusercontent.com/2114189/230714245-4fd202d1-2b25-41b2-8be5-03c5fee45091.png) ![image](https://user-images.githubusercontent.com/2114189/230714277-66783577-2a03-49d5-8e8c-ceba5e07a2d4.png) --------- Co-authored-by: silverwind --- modules/context/context.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'modules/context') diff --git a/modules/context/context.go b/modules/context/context.go index 04f8a9bd3d..bd561be0f5 100644 --- a/modules/context/context.go +++ b/modules/context/context.go @@ -47,7 +47,7 @@ import ( // Render represents a template render type Render interface { - TemplateLookup(tmpl string) *template.Template + TemplateLookup(tmpl string) (*template.Template, error) HTML(w io.Writer, status int, name string, data interface{}) error } @@ -228,7 +228,7 @@ func (ctx *Context) HTML(status int, name base.TplName) { } if err := ctx.Render.HTML(ctx.Resp, status, string(name), templates.BaseVars().Merge(ctx.Data)); err != nil { if status == http.StatusInternalServerError && name == base.TplName("status/500") { - ctx.PlainText(http.StatusInternalServerError, "Unable to find status/500 template") + ctx.PlainText(http.StatusInternalServerError, "Unable to find HTML templates, the template system is not initialized, or Gitea can't find your template files.") return } if execErr, ok := err.(texttemplate.ExecError); ok { @@ -247,7 +247,7 @@ func (ctx *Context) HTML(status int, name base.TplName) { if errorTemplateName != string(name) { filename += " (subtemplate of " + string(name) + ")" } - err = fmt.Errorf("%w\nin template file %s:\n%s", err, filename, templates.GetLineFromTemplate(errorTemplateName, line, target, pos)) + err = fmt.Errorf("failed to render %s, error: %w:\n%s", filename, err, templates.GetLineFromTemplate(errorTemplateName, line, target, pos)) } else { filename, filenameErr := templates.GetAssetFilename("templates/" + execErr.Name + ".tmpl") if filenameErr != nil { @@ -256,7 +256,7 @@ func (ctx *Context) HTML(status int, name base.TplName) { if execErr.Name != string(name) { filename += " (subtemplate of " + string(name) + ")" } - err = fmt.Errorf("%w\nin template file %s", err, filename) + err = fmt.Errorf("failed to render %s, error: %w", filename, err) } } ctx.ServerError("Render failed", err) -- cgit v1.2.3