diff options
author | Guilherme Rezende <[email protected]> | 2015-10-29 20:33:01 -0200 |
---|---|---|
committer | Guilherme Rezende <[email protected]> | 2015-10-29 20:33:01 -0200 |
commit | 9d456bba9bc45c0b0ffb5f5068b8d6814c36910c (patch) | |
tree | 18df99bbfa348db4c9744370eac47c638096b85f | |
parent | d227bec0fffd3e8f89d0e20209b8ffe00c9f8242 (diff) | |
download | caddy-9d456bba9bc45c0b0ffb5f5068b8d6814c36910c.tar.gz caddy-9d456bba9bc45c0b0ffb5f5068b8d6814c36910c.zip |
Add argument in new optional block in templates midd to set delimiters
-rw-r--r-- | config/setup/templates.go | 43 | ||||
-rw-r--r-- | middleware/templates/templates.go | 12 | ||||
-rw-r--r-- | middleware/templates/templates_test.go | 25 | ||||
-rw-r--r-- | middleware/templates/testdata/images/img.htm | 2 | ||||
-rw-r--r-- | middleware/templates/testdata/images/img2.htm | 1 |
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> |