diff options
author | davidejones <david@davidejones.com> | 2022-10-25 16:33:25 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2022-10-26 13:00:21 +0200 |
commit | e5d2a8f6a3121701eb95712b5540989fafaa0c71 (patch) | |
tree | e8f2dd5b1b103d255050c7998113614fe02b0d75 /hugolib | |
parent | 00ff161b675ab16244bd9678807cb0b93240d1b1 (diff) |
Avoid nilpointer when shortcode page content output nil
Updates #10391
Diffstat (limited to 'hugolib')
-rw-r--r-- | hugolib/shortcode.go | 11 | ||||
-rw-r--r-- | hugolib/shortcode_test.go | 93 |
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`) + +} |