Browse Source

add SetFuncs function for default HTMLTemplate

Unknown 6 years ago
parent
commit
0aa92971c0
4 changed files with 55 additions and 4 deletions
  1. 9 0
      sqltemplate.go
  2. 36 4
      sqltemplate_default.go
  3. 5 0
      sqltemplate_jet.go
  4. 5 0
      sqltemplate_pongo2.go

+ 9 - 0
sqltemplate.go

@@ -8,6 +8,8 @@ import (
 	"gopkg.in/flosch/pongo2.v3"
 )
 
+type FuncMap map[string]interface{}
+
 type SqlTemplate interface {
 	WalkFunc(path string, info os.FileInfo, err error) error
 	paresSqlTemplate(filename string, filepath string) error
@@ -26,31 +28,38 @@ type SqlTemplate interface {
 	BatchAddSqlTemplate(key string, sqlTemplateStrMap map[string]string) error
 	BatchUpdateSqlTemplate(key string, sqlTemplateStrMap map[string]string) error
 	BatchRemoveSqlTemplate(key []string)
+	SetFuncs(key string, funcMap FuncMap)
 }
 
 func Pongo2(directory, extension string) *Pongo2Template {
 	template := make(map[string]*pongo2.Template, 100)
+	funcs := make(map[string]FuncMap, 20)
 	return &Pongo2Template{
 		SqlTemplateRootDir: directory,
 		extension:          extension,
 		Template:           template,
+		Funcs:              funcs,
 	}
 }
 
 func Default(directory, extension string) *HTMLTemplate {
 	template := make(map[string]*template.Template, 100)
+	funcs := make(map[string]FuncMap, 20)
 	return &HTMLTemplate{
 		SqlTemplateRootDir: directory,
 		extension:          extension,
 		Template:           template,
+		Funcs:              funcs,
 	}
 }
 
 func Jet(directory, extension string) *JetTemplate {
 	template := make(map[string]*jet.Template, 100)
+	funcs := make(map[string]FuncMap, 20)
 	return &JetTemplate{
 		SqlTemplateRootDir: directory,
 		extension:          extension,
 		Template:           template,
+		Funcs:              funcs,
 	}
 }

+ 36 - 4
sqltemplate_default.go

@@ -16,12 +16,17 @@ type HTMLTemplate struct {
 	Capacity           uint
 	Cipher             Cipher
 	Type               int
+	Funcs              map[string]FuncMap
 }
 
 func (sqlTemplate *HTMLTemplate) RootDir() string {
 	return sqlTemplate.SqlTemplateRootDir
 }
 
+func (sqlTemplate *HTMLTemplate) SetFuncs(key string, funcMap FuncMap) {
+	sqlTemplate.Funcs[key] = funcMap
+}
+
 func (sqlTemplate *HTMLTemplate) Extension() string {
 	return sqlTemplate.extension
 }
@@ -53,14 +58,41 @@ func (sqlTemplate *HTMLTemplate) paresSqlTemplate(filename string, filepath stri
 	var err error
 	var content []byte
 
-	if sqlTemplate.Cipher == nil {
-		sqlt = template.Must(template.ParseFiles(filepath))
+	fmap := sqlTemplate.Funcs[filename]
+	if fmap != nil {
+		funcMap := make(template.FuncMap, 20)
+		for k := range fmap {
+			funcMap[k] = fmap[k]
+		}
+		sqlt = template.New(filename)
+		sqlt = sqlt.Funcs(funcMap)
+	}
+
+	if fmap == nil {
+		if sqlTemplate.Cipher == nil {
+			sqlt = template.Must(template.ParseFiles(filepath))
+		} else {
+			content, err = sqlTemplate.ReadTemplate(filepath)
+			if err != nil {
+				return err
+			}
+			sqlt = template.Must(template.New(filename).Parse(string(content)))
+		}
 	} else {
-		content, err = sqlTemplate.ReadTemplate(filepath)
+
+		if sqlTemplate.Cipher == nil {
+			sqlt, err = sqlt.ParseFiles(filepath)
+		} else {
+			content, err = sqlTemplate.ReadTemplate(filepath)
+			if err != nil {
+				return err
+			}
+			sqlt, err = sqlt.Parse(string(content))
+		}
 		if err != nil {
 			return err
 		}
-		sqlt = template.Must(template.New(filename).Parse(string(content)))
+
 	}
 
 	sqlTemplate.checkNilAndInit()

+ 5 - 0
sqltemplate_jet.go

@@ -15,12 +15,17 @@ type JetTemplate struct {
 	extension          string
 	Capacity           uint
 	Cipher             Cipher
+	Funcs              map[string]FuncMap
 }
 
 func (sqlTemplate *JetTemplate) RootDir() string {
 	return sqlTemplate.SqlTemplateRootDir
 }
 
+func (sqlTemplate *JetTemplate) SetFuncs(key string, funcMap FuncMap) {
+	sqlTemplate.Funcs[key] = funcMap
+}
+
 func (sqlTemplate *JetTemplate) Extension() string {
 	return sqlTemplate.extension
 }

+ 5 - 0
sqltemplate_pongo2.go

@@ -15,12 +15,17 @@ type Pongo2Template struct {
 	Capacity           uint
 	Cipher             Cipher
 	Type               int
+	Funcs              map[string]FuncMap
 }
 
 func (sqlTemplate *Pongo2Template) RootDir() string {
 	return sqlTemplate.SqlTemplateRootDir
 }
 
+func (sqlTemplate *Pongo2Template) SetFuncs(key string, funcMap FuncMap) {
+	sqlTemplate.Funcs[key] = funcMap
+}
+
 func (sqlTemplate *Pongo2Template) Extension() string {
 	return sqlTemplate.extension
 }