Skip to content

Commit

Permalink
Group template helper functions, remove Printf, improve template er…
Browse files Browse the repository at this point in the history
…ror 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 <me@silverwind.io>
  • Loading branch information
wxiaoguang and silverwind committed Apr 8, 2023
1 parent cf5a281 commit fdbd646
Show file tree
Hide file tree
Showing 15 changed files with 297 additions and 285 deletions.
8 changes: 4 additions & 4 deletions modules/context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down Expand Up @@ -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 {
Expand All @@ -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 {
Expand All @@ -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)
Expand Down
7 changes: 0 additions & 7 deletions modules/templates/dynamic.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,13 @@
package templates

import (
"html/template"
"io/fs"
"os"
"path/filepath"
texttmpl "text/template"

"code.gitea.io/gitea/modules/setting"
)

var (
subjectTemplates = texttmpl.New("")
bodyTemplates = template.New("")
)

// GetAsset returns asset content via name
func GetAsset(name string) ([]byte, error) {
bs, err := os.ReadFile(filepath.Join(setting.CustomPath, name))
Expand Down
Loading

0 comments on commit fdbd646

Please sign in to comment.