aboutsummaryrefslogtreecommitdiffstats
path: root/modules/templates/static.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/templates/static.go')
-rw-r--r--modules/templates/static.go102
1 files changed, 88 insertions, 14 deletions
diff --git a/modules/templates/static.go b/modules/templates/static.go
index 5c9903cde6..65b82053fd 100644
--- a/modules/templates/static.go
+++ b/modules/templates/static.go
@@ -7,7 +7,10 @@
package templates
import (
+ "bytes"
+ "fmt"
"html/template"
+ "io"
"io/ioutil"
"path"
"strings"
@@ -15,7 +18,6 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"github.com/Unknwon/com"
- "github.com/go-macaron/bindata"
"gopkg.in/macaron.v1"
)
@@ -23,22 +25,94 @@ var (
templates = template.New("")
)
+type templateFileSystem struct {
+ files []macaron.TemplateFile
+}
+
+func (templates templateFileSystem) ListFiles() []macaron.TemplateFile {
+ return templates.files
+}
+
+func (templates templateFileSystem) Get(name string) (io.Reader, error) {
+ for i := range templates.files {
+ if templates.files[i].Name()+templates.files[i].Ext() == name {
+ return bytes.NewReader(templates.files[i].Data()), nil
+ }
+ }
+
+ return nil, fmt.Errorf("file '%s' not found", name)
+}
+
// Renderer implements the macaron handler for serving the templates.
func Renderer() macaron.Handler {
+ fs := templateFileSystem{}
+ fs.files = make([]macaron.TemplateFile, 0, 10)
+
+ for _, assetPath := range AssetNames() {
+ if strings.HasPrefix(assetPath, "mail/") {
+ continue
+ }
+
+ if !strings.HasSuffix(assetPath, ".tmpl") {
+ continue
+ }
+
+ content, err := Asset(assetPath)
+
+ if err != nil {
+ log.Warn("Failed to read embedded %s template. %v", assetPath, err)
+ continue
+ }
+
+ fs.files = append(fs.files, macaron.NewTplFile(
+ strings.TrimSuffix(
+ assetPath,
+ ".tmpl",
+ ),
+ content,
+ ".tmpl",
+ ))
+ }
+
+ customDir := path.Join(setting.CustomPath, "templates")
+
+ 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.HasPrefix(filePath, "mail/") {
+ continue
+ }
+
+ 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
+ }
+
+ fs.files = append(fs.files, macaron.NewTplFile(
+ strings.TrimSuffix(
+ filePath,
+ ".tmpl",
+ ),
+ content,
+ ".tmpl",
+ ))
+ }
+ }
+ }
+
return macaron.Renderer(macaron.RenderOptions{
- Funcs: NewFuncMap(),
- AppendDirectories: []string{
- path.Join(setting.CustomPath, "templates"),
- },
- TemplateFileSystem: bindata.Templates(
- bindata.Options{
- Asset: Asset,
- AssetDir: AssetDir,
- AssetInfo: AssetInfo,
- AssetNames: AssetNames,
- Prefix: "",
- },
- ),
+ Funcs: NewFuncMap(),
+ TemplateFileSystem: fs,
})
}