summaryrefslogtreecommitdiffstats
path: root/modules/templates/base.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/templates/base.go')
-rw-r--r--modules/templates/base.go93
1 files changed, 19 insertions, 74 deletions
diff --git a/modules/templates/base.go b/modules/templates/base.go
index e0f8350afb..e95ce31cfc 100644
--- a/modules/templates/base.go
+++ b/modules/templates/base.go
@@ -4,14 +4,10 @@
package templates
import (
- "fmt"
- "io/fs"
- "os"
- "path/filepath"
"strings"
"time"
- "code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/assetfs"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
)
@@ -47,81 +43,30 @@ func BaseVars() Vars {
}
}
-func getDirTemplateAssetNames(dir string) []string {
- return getDirAssetNames(dir, false)
+func AssetFS() *assetfs.LayeredFS {
+ return assetfs.Layered(CustomAssets(), BuiltinAssets())
}
-func getDirAssetNames(dir string, mailer bool) []string {
- var tmpls []string
-
- if mailer {
- dir += filepath.Join(dir, "mail")
- }
- f, err := os.Stat(dir)
- if err != nil {
- if os.IsNotExist(err) {
- return tmpls
- }
- log.Warn("Unable to check if templates dir %s is a directory. Error: %v", dir, err)
- return tmpls
- }
- if !f.IsDir() {
- log.Warn("Templates dir %s is a not directory.", dir)
- return tmpls
- }
+func CustomAssets() *assetfs.Layer {
+ return assetfs.Local("custom", setting.CustomPath, "templates")
+}
- files, err := util.StatDir(dir)
+func ListWebTemplateAssetNames(assets *assetfs.LayeredFS) ([]string, error) {
+ files, err := assets.ListAllFiles(".", true)
if err != nil {
- log.Warn("Failed to read %s templates dir. %v", dir, err)
- return tmpls
+ return nil, err
}
-
- prefix := "templates/"
- if mailer {
- prefix += "mail/"
- }
- for _, filePath := range files {
- if !mailer && strings.HasPrefix(filePath, "mail/") {
- continue
- }
-
- if !strings.HasSuffix(filePath, ".tmpl") {
- continue
- }
-
- tmpls = append(tmpls, prefix+filePath)
- }
- return tmpls
+ return util.SliceRemoveAllFunc(files, func(file string) bool {
+ return strings.HasPrefix(file, "mail/") || !strings.HasSuffix(file, ".tmpl")
+ }), nil
}
-func walkAssetDir(root string, skipMail bool, callback func(path, name string, d fs.DirEntry, err error) error) error {
- mailRoot := filepath.Join(root, "mail")
- if err := filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error {
- name := path[len(root):]
- if len(name) > 0 && name[0] == '/' {
- name = name[1:]
- }
- if err != nil {
- if os.IsNotExist(err) {
- return callback(path, name, d, err)
- }
- return err
- }
- if skipMail && path == mailRoot && d.IsDir() {
- return fs.SkipDir
- }
- if util.CommonSkip(d.Name()) {
- if d.IsDir() {
- return fs.SkipDir
- }
- return nil
- }
- if strings.HasSuffix(d.Name(), ".tmpl") || d.IsDir() {
- return callback(path, name, d, err)
- }
- return nil
- }); err != nil && !os.IsNotExist(err) {
- return fmt.Errorf("unable to get files for template assets in %s: %w", root, err)
+func ListMailTemplateAssetNames(assets *assetfs.LayeredFS) ([]string, error) {
+ files, err := assets.ListAllFiles(".", true)
+ if err != nil {
+ return nil, err
}
- return nil
+ return util.SliceRemoveAllFunc(files, func(file string) bool {
+ return !strings.HasPrefix(file, "mail/") || !strings.HasSuffix(file, ".tmpl")
+ }), nil
}