diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-11-18 10:18:41 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-11-18 10:41:31 +0100 |
commit | 503ca6de6ceb0b4af533f9efeff917d6f3871278 (patch) | |
tree | 415b32f7659cfcacfe9ba667a2dece089a11ea65 /tpl | |
parent | b3daa1f4bf1b84bcc5da028257ba609be74e3ecc (diff) |
Fix broken shortcodes for Ace and Amber
Fixes #4051
Diffstat (limited to 'tpl')
-rw-r--r-- | tpl/tplimpl/ace.go | 20 | ||||
-rw-r--r-- | tpl/tplimpl/template.go | 17 |
2 files changed, 33 insertions, 4 deletions
diff --git a/tpl/tplimpl/ace.go b/tpl/tplimpl/ace.go index fc3a1e1b1..6fb4ca439 100644 --- a/tpl/tplimpl/ace.go +++ b/tpl/tplimpl/ace.go @@ -14,6 +14,7 @@ package tplimpl import ( + "html/template" "path/filepath" "strings" @@ -24,7 +25,8 @@ import ( func (t *templateHandler) addAceTemplate(name, basePath, innerPath string, baseContent, innerContent []byte) error { t.checkState() var base, inner *ace.File - name = name[:len(name)-len(filepath.Ext(innerPath))] + ".html" + withoutExt := name[:len(name)-len(filepath.Ext(innerPath))] + name = withoutExt + ".html" // Fixes issue #1178 basePath = strings.Replace(basePath, "\\", "/", -1) @@ -37,15 +39,29 @@ func (t *templateHandler) addAceTemplate(name, basePath, innerPath string, baseC base = ace.NewFile(innerPath, innerContent) inner = ace.NewFile("", []byte{}) } + parsed, err := ace.ParseSource(ace.NewSource(base, inner, []*ace.File{}), nil) if err != nil { t.errors = append(t.errors, &templateErr{name: name, err: err}) return err } + templ, err := ace.CompileResultWithTemplate(t.html.t.New(name), parsed, nil) if err != nil { t.errors = append(t.errors, &templateErr{name: name, err: err}) return err } - return applyTemplateTransformersToHMLTTemplate(templ) + + if err := applyTemplateTransformersToHMLTTemplate(templ); err != nil { + return err + } + + if strings.Contains(name, "shortcodes") { + // We need to keep track of one ot the output format's shortcode template + // without knowing the rendering context. + clone := template.Must(templ.Clone()) + t.html.t.AddParseTree(withoutExt, clone.Tree) + } + + return nil } diff --git a/tpl/tplimpl/template.go b/tpl/tplimpl/template.go index 46484ed83..e13dd0aaa 100644 --- a/tpl/tplimpl/template.go +++ b/tpl/tplimpl/template.go @@ -622,7 +622,8 @@ func (t *templateHandler) addTemplateFile(name, baseTemplatePath, path string) e switch ext { case ".amber": // Only HTML support for Amber - templateName := strings.TrimSuffix(name, filepath.Ext(name)) + ".html" + withoutExt := strings.TrimSuffix(name, filepath.Ext(name)) + templateName := withoutExt + ".html" b, err := afero.ReadFile(t.Fs.Source, path) if err != nil { @@ -636,7 +637,19 @@ func (t *templateHandler) addTemplateFile(name, baseTemplatePath, path string) e return err } - return applyTemplateTransformersToHMLTTemplate(templ) + if err := applyTemplateTransformersToHMLTTemplate(templ); err != nil { + return err + } + + if strings.Contains(templateName, "shortcodes") { + // We need to keep track of one ot the output format's shortcode template + // without knowing the rendering context. + clone := template.Must(templ.Clone()) + t.html.t.AddParseTree(withoutExt, clone.Tree) + } + + return nil + case ".ace": // Only HTML support for Ace var innerContent, baseContent []byte |