summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGuilherme Rezende <[email protected]>2015-10-29 20:33:01 -0200
committerGuilherme Rezende <[email protected]>2015-10-29 20:33:01 -0200
commit9d456bba9bc45c0b0ffb5f5068b8d6814c36910c (patch)
tree18df99bbfa348db4c9744370eac47c638096b85f
parentd227bec0fffd3e8f89d0e20209b8ffe00c9f8242 (diff)
downloadcaddy-9d456bba9bc45c0b0ffb5f5068b8d6814c36910c.tar.gz
caddy-9d456bba9bc45c0b0ffb5f5068b8d6814c36910c.zip
Add argument in new optional block in templates midd to set delimiters
-rw-r--r--config/setup/templates.go43
-rw-r--r--middleware/templates/templates.go12
-rw-r--r--middleware/templates/templates_test.go25
-rw-r--r--middleware/templates/testdata/images/img.htm2
-rw-r--r--middleware/templates/testdata/images/img2.htm1
5 files changed, 74 insertions, 9 deletions
diff --git a/config/setup/templates.go b/config/setup/templates.go
index 51d78d5ce..f8d7e98bd 100644
--- a/config/setup/templates.go
+++ b/config/setup/templates.go
@@ -32,18 +32,48 @@ func templatesParse(c *Controller) ([]templates.Rule, error) {
for c.Next() {
var rule templates.Rule
- if c.NextArg() {
+ rule.Path = defaultTemplatePath
+ rule.Extensions = defaultTemplateExtensions
+
+ args := c.RemainingArgs()
+
+ switch len(args) {
+ case 0:
+ // Optional block
+ for c.NextBlock() {
+ switch c.Val() {
+ case "path":
+ args := c.RemainingArgs()
+ if len(args) != 1 {
+ return nil, c.ArgErr()
+ }
+ rule.Path = args[0]
+
+ case "ext":
+ args := c.RemainingArgs()
+ if len(args) == 0 {
+ return nil, c.ArgErr()
+ }
+ rule.Extensions = args
+
+ case "between":
+ args := c.RemainingArgs()
+ if len(args) != 2 {
+ return nil, c.ArgErr()
+ }
+ rule.Delims[0] = args[0]
+ rule.Delims[1] = args[1]
+ }
+ }
+ default:
// First argument would be the path
- rule.Path = c.Val()
+ rule.Path = args[0]
// Any remaining arguments are extensions
- rule.Extensions = c.RemainingArgs()
+ rule.Extensions = args[1:]
if len(rule.Extensions) == 0 {
rule.Extensions = defaultTemplateExtensions
}
- } else {
- rule.Path = defaultTemplatePath
- rule.Extensions = defaultTemplateExtensions
}
for _, ext := range rule.Extensions {
@@ -52,7 +82,6 @@ func templatesParse(c *Controller) ([]templates.Rule, error) {
rules = append(rules, rule)
}
-
return rules, nil
}
diff --git a/middleware/templates/templates.go b/middleware/templates/templates.go
index 76447479d..bc48ac45d 100644
--- a/middleware/templates/templates.go
+++ b/middleware/templates/templates.go
@@ -33,9 +33,18 @@ func (t Templates) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error
// Create execution context
ctx := middleware.Context{Root: t.FileSys, Req: r, URL: r.URL}
+ // New template
+ templateName := filepath.Base(fpath)
+ tpl := template.New(templateName)
+
+ // Set delims
+ if rule.Delims != [2]string{} {
+ tpl.Delims(rule.Delims[0], rule.Delims[1])
+ }
+
// Build the template
templatePath := filepath.Join(t.Root, fpath)
- tpl, err := template.ParseFiles(templatePath)
+ tpl, err := tpl.ParseFiles(templatePath)
if err != nil {
if os.IsNotExist(err) {
return http.StatusNotFound, nil
@@ -82,4 +91,5 @@ type Rule struct {
Path string
Extensions []string
IndexFiles []string
+ Delims [2]string
}
diff --git a/middleware/templates/templates_test.go b/middleware/templates/templates_test.go
index 3ee6072ce..c5a5d24a8 100644
--- a/middleware/templates/templates_test.go
+++ b/middleware/templates/templates_test.go
@@ -23,6 +23,7 @@ func Test(t *testing.T) {
Extensions: []string{".html", ".htm"},
IndexFiles: []string{"index.html", "index.htm"},
Path: "/images",
+ Delims: [2]string{"{%", "%}"},
},
},
Root: "./testdata",
@@ -95,6 +96,30 @@ func Test(t *testing.T) {
}
/*
+ * Test tmpl on /images/img2.htm
+ */
+ req, err = http.NewRequest("GET", "/images/img2.htm", nil)
+ if err != nil {
+ t.Fatalf("Could not create HTTP request: %v", err)
+ }
+
+ rec = httptest.NewRecorder()
+
+ tmpl.ServeHTTP(rec, req)
+
+ if rec.Code != http.StatusOK {
+ t.Fatalf("Test: Wrong response code: %d, should be %d", rec.Code, http.StatusOK)
+ }
+
+ respBody = rec.Body.String()
+ expectedBody = `<!DOCTYPE html><html><head><title>img</title></head><body>{{.Include "header.html"}}</body></html>
+`
+
+ if respBody != expectedBody {
+ t.Fatalf("Test: the expected body %v is different from the response one: %v", expectedBody, respBody)
+ }
+
+ /*
* Test tmplroot on /root.html
*/
req, err = http.NewRequest("GET", "/root.html", nil)
diff --git a/middleware/templates/testdata/images/img.htm b/middleware/templates/testdata/images/img.htm
index 865a73809..c90602044 100644
--- a/middleware/templates/testdata/images/img.htm
+++ b/middleware/templates/testdata/images/img.htm
@@ -1 +1 @@
-<!DOCTYPE html><html><head><title>img</title></head><body>{{.Include "header.html"}}</body></html>
+<!DOCTYPE html><html><head><title>img</title></head><body>{%.Include "header.html"%}</body></html>
diff --git a/middleware/templates/testdata/images/img2.htm b/middleware/templates/testdata/images/img2.htm
new file mode 100644
index 000000000..865a73809
--- /dev/null
+++ b/middleware/templates/testdata/images/img2.htm
@@ -0,0 +1 @@
+<!DOCTYPE html><html><head><title>img</title></head><body>{{.Include "header.html"}}</body></html>