1
0
mirror of https://github.com/kataras/iris.git synced 2026-01-10 13:35:59 +00:00

fix https://github.com/kataras/iris/issues/1450 and continue on implementing 1449

Former-commit-id: 617f64d061e88f050a443ea1751fa244164656c5
This commit is contained in:
Gerasimos (Makis) Maropoulos
2020-02-14 23:34:56 +02:00
parent 09a410c6cb
commit c13fd84354
24 changed files with 581 additions and 144 deletions

View File

@@ -340,7 +340,7 @@ func (s *HTMLEngine) loadAssets() error {
rel, err := filepath.Rel(virtualDirectory, path)
if err != nil {
templateErr = err
continue
break
}
// // take the current working directory
@@ -358,7 +358,7 @@ func (s *HTMLEngine) loadAssets() error {
buf, err := assetFn(path)
if err != nil {
templateErr = fmt.Errorf("%v for path '%s'", err, path)
continue
break
}
contents := string(buf)
@@ -372,14 +372,14 @@ func (s *HTMLEngine) loadAssets() error {
contents, err = s.middleware(name, buf)
if err != nil {
templateErr = fmt.Errorf("%v for name '%s'", err, name)
continue
break
}
}
// Add our funcmaps.
if _, err = tmpl.Funcs(emptyFuncs).Funcs(s.funcs).Parse(contents); err != nil {
templateErr = err
continue
break
}
}
}

View File

@@ -1,7 +1,11 @@
package view
import (
"github.com/Joker/jade"
"bytes"
"io/ioutil"
"path"
"github.com/iris-contrib/jade"
)
// Pug (or Jade) returns a new pug view engine.
@@ -9,7 +13,7 @@ import (
// html view engine, it uses the same exactly configuration.
// It has got some features and a lot of functions
// which will make your life easier.
// Read more about the Jade Go Template: https://github.com/Joker/jade
// Read more about the Jade Go Parser: https://github.com/Joker/jade
//
// Examples:
// https://github.com/kataras/iris/tree/master/_examples/view/template_pug_0
@@ -18,6 +22,29 @@ import (
// https://github.com/kataras/iris/tree/master/_examples/view/template_pug_3
func Pug(directory, extension string) *HTMLEngine {
s := HTML(directory, extension)
s.middleware = jade.Parse
s.middleware = func(name string, text []byte) (contents string, err error) {
tmpl := jade.New(name)
// Fixes: https://github.com/kataras/iris/issues/1450
// by adding a custom ReadFunc inside the jade parser.
// And Also able to use relative paths on "extends" and "include" directives:
// e.g. instead of extends "templates/layout.pug" we use "layout.pug"
// so contents of templates are independent of their root location.
tmpl.ReadFunc = func(name string) ([]byte, error) {
name = path.Join(directory, name)
if s.assetFn != nil {
return s.assetFn(name)
}
return ioutil.ReadFile(name)
}
tmpl, err = tmpl.Parse(text)
if err != nil {
return
}
b := new(bytes.Buffer)
tmpl.WriteIn(b)
return b.String(), nil
}
return s
}