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"
"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 (
templates = template . New ( "" )
)
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" ,
} )
}
2018-11-27 18:18:26 +03:00
// JSRenderer implements the macaron handler for serving JS templates.
func JSRenderer ( ) macaron . Handler {
return macaron . Renderer ( macaron . RenderOptions {
Funcs : NewFuncMap ( ) ,
Directory : path . Join ( setting . StaticRootPath , "templates" ) ,
AppendDirectories : [ ] string {
path . Join ( setting . CustomPath , "templates" ) ,
} ,
HTMLContentType : "application/javascript" ,
} )
}
2016-12-06 20:58:31 +03:00
// Mailer provides the templates required for sending notification mails.
func Mailer ( ) * template . Template {
for _ , funcs := range NewFuncMap ( ) {
templates . Funcs ( funcs )
}
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-06-12 22:41:28 +03:00
_ , err = templates . New (
2016-12-06 20:58:31 +03:00
strings . TrimSuffix (
filePath ,
".tmpl" ,
) ,
) . Parse ( string ( content ) )
2019-06-12 22:41:28 +03:00
if err != nil {
log . Warn ( "Failed to parse template %v" , err )
}
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-06-12 22:41:28 +03:00
_ , err = templates . New (
2016-12-06 20:58:31 +03:00
strings . TrimSuffix (
filePath ,
".tmpl" ,
) ,
) . Parse ( string ( content ) )
2019-06-12 22:41:28 +03:00
if err != nil {
log . Warn ( "Failed to parse template %v" , err )
}
2016-12-06 20:58:31 +03:00
}
}
}
return templates
}