2016-12-06 20:58:31 +03:00
// +build !bindata
// Copyright 2016 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package templates
import (
"html/template"
"io/ioutil"
"path"
"strings"
2019-11-07 16:34:28 +03:00
texttmpl "text/template"
2016-12-06 20:58:31 +03:00
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
2019-08-23 19:40:30 +03:00
"gitea.com/macaron/macaron"
"github.com/unknwon/com"
2016-12-06 20:58:31 +03:00
)
var (
2019-11-07 16:34:28 +03:00
subjectTemplates = texttmpl . New ( "" )
bodyTemplates = template . New ( "" )
2016-12-06 20:58:31 +03:00
)
2018-07-28 03:19:01 +03:00
// HTMLRenderer implements the macaron handler for serving HTML templates.
func HTMLRenderer ( ) macaron . Handler {
2016-12-06 20:58:31 +03:00
return macaron . Renderer ( macaron . RenderOptions {
Funcs : NewFuncMap ( ) ,
Directory : path . Join ( setting . StaticRootPath , "templates" ) ,
AppendDirectories : [ ] string {
path . Join ( setting . CustomPath , "templates" ) ,
} ,
} )
}
2018-07-28 03:19:01 +03:00
// JSONRenderer implements the macaron handler for serving JSON templates.
func JSONRenderer ( ) macaron . Handler {
return macaron . Renderer ( macaron . RenderOptions {
Funcs : NewFuncMap ( ) ,
Directory : path . Join ( setting . StaticRootPath , "templates" ) ,
AppendDirectories : [ ] string {
path . Join ( setting . CustomPath , "templates" ) ,
} ,
HTMLContentType : "application/json" ,
} )
}
2016-12-06 20:58:31 +03:00
// Mailer provides the templates required for sending notification mails.
2019-11-07 16:34:28 +03:00
func Mailer ( ) ( * texttmpl . Template , * template . Template ) {
for _ , funcs := range NewTextFuncMap ( ) {
subjectTemplates . Funcs ( funcs )
}
2016-12-06 20:58:31 +03:00
for _ , funcs := range NewFuncMap ( ) {
2019-11-07 16:34:28 +03:00
bodyTemplates . Funcs ( funcs )
2016-12-06 20:58:31 +03:00
}
staticDir := path . Join ( setting . StaticRootPath , "templates" , "mail" )
if com . IsDir ( staticDir ) {
files , err := com . StatDir ( staticDir )
if err != nil {
log . Warn ( "Failed to read %s templates dir. %v" , staticDir , err )
} else {
for _ , filePath := range files {
if ! strings . HasSuffix ( filePath , ".tmpl" ) {
continue
}
content , err := ioutil . ReadFile ( path . Join ( staticDir , filePath ) )
if err != nil {
log . Warn ( "Failed to read static %s template. %v" , filePath , err )
continue
}
2019-11-07 16:34:28 +03:00
buildSubjectBodyTemplate ( subjectTemplates , bodyTemplates , strings . TrimSuffix ( filePath , ".tmpl" ) , content )
2016-12-06 20:58:31 +03:00
}
}
}
customDir := path . Join ( setting . CustomPath , "templates" , "mail" )
if com . IsDir ( customDir ) {
files , err := com . StatDir ( customDir )
if err != nil {
log . Warn ( "Failed to read %s templates dir. %v" , customDir , err )
} else {
for _ , filePath := range files {
if ! strings . HasSuffix ( filePath , ".tmpl" ) {
continue
}
content , err := ioutil . ReadFile ( path . Join ( customDir , filePath ) )
if err != nil {
log . Warn ( "Failed to read custom %s template. %v" , filePath , err )
continue
}
2019-11-07 16:34:28 +03:00
buildSubjectBodyTemplate ( subjectTemplates , bodyTemplates , strings . TrimSuffix ( filePath , ".tmpl" ) , content )
2016-12-06 20:58:31 +03:00
}
}
}
2019-11-07 16:34:28 +03:00
return subjectTemplates , bodyTemplates
2016-12-06 20:58:31 +03:00
}