summaryrefslogtreecommitdiffstats
path: root/hugolib
diff options
context:
space:
mode:
authordavidejones <david@davidejones.com>2022-10-25 16:33:25 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2022-10-26 13:00:21 +0200
commite5d2a8f6a3121701eb95712b5540989fafaa0c71 (patch)
treee8f2dd5b1b103d255050c7998113614fe02b0d75 /hugolib
parent00ff161b675ab16244bd9678807cb0b93240d1b1 (diff)
Avoid nilpointer when shortcode page content output nil
Updates #10391
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/shortcode.go11
-rw-r--r--hugolib/shortcode_test.go93
2 files changed, 104 insertions, 0 deletions
diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go
index b2f42ff1d..a10afe2bc 100644
--- a/hugolib/shortcode.go
+++ b/hugolib/shortcode.go
@@ -381,6 +381,17 @@ func renderShortcode(
// Pre Hugo 0.55 this was the behaviour even for the outer-most
// shortcode.
if sc.doMarkup && (level > 0 || sc.configVersion() == 1) {
+
+ cp := p.pageOutput.cp
+ if cp == nil {
+ var err error
+ cp, err = newPageContentOutput(p, p.pageOutput)
+ if err != nil {
+ return "", false, err
+ }
+ p.pageOutput.initContentProvider(cp)
+ }
+
var err error
b, err := p.pageOutput.cp.renderContent([]byte(inner), false)
if err != nil {
diff --git a/hugolib/shortcode_test.go b/hugolib/shortcode_test.go
index ec521729b..b5f27d621 100644
--- a/hugolib/shortcode_test.go
+++ b/hugolib/shortcode_test.go
@@ -1087,3 +1087,96 @@ Title: {{ .Get "title" | safeHTML }}
b.AssertFileContent("public/p1/index.html", `Title: Steve "Francia".`)
}
+
+// Issue 10391.
+func TestNestedShortcodeCustomOutputFormat(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- config.toml --
+
+[outputFormats.Foobar]
+baseName = "foobar"
+isPlainText = true
+mediaType = "application/json"
+notAlternative = true
+
+[languages.en]
+languageName = "English"
+
+[languages.en.outputs]
+home = [ "HTML", "RSS", "Foobar" ]
+
+[languages.fr]
+languageName = "Français"
+
+[[module.mounts]]
+source = "content/en"
+target = "content"
+lang = "en"
+
+[[module.mounts]]
+source = "content/fr"
+target = "content"
+lang = "fr"
+
+-- layouts/_default/list.foobar.json --
+{{- $.Scratch.Add "data" slice -}}
+{{- range (where .Site.AllPages "Kind" "!=" "home") -}}
+ {{- $.Scratch.Add "data" (dict "content" (.Plain | truncate 10000) "type" .Type "full_url" .Permalink) -}}
+{{- end -}}
+{{- $.Scratch.Get "data" | jsonify -}}
+-- content/en/p1.md --
+---
+title: "p1"
+---
+
+### More information
+
+{{< tabs >}}
+{{% tab "Test" %}}
+
+It's a test
+
+{{% /tab %}}
+{{< /tabs >}}
+
+-- content/fr/p2.md --
+---
+title: Test
+---
+
+### Plus d'informations
+
+{{< tabs >}}
+{{% tab "Test" %}}
+
+C'est un test
+
+{{% /tab %}}
+{{< /tabs >}}
+
+-- layouts/shortcodes/tabs.html --
+<div>
+ <div class="tab-content">{{ .Inner }}</div>
+</div>
+
+-- layouts/shortcodes/tab.html --
+<div>{{ .Inner }}</div>
+
+-- layouts/_default/single.html --
+{{ .Content }}
+`
+
+ b := NewIntegrationTestBuilder(
+ IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ Running: true,
+ Verbose: true,
+ },
+ ).Build()
+
+ b.AssertFileContent("public/fr/p2/index.html", `plus-dinformations`)
+
+}