]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Avoid nilpointer when shortcode page content output nil
authordavidejones <david@davidejones.com>
Tue, 25 Oct 2022 15:33:25 +0000 (16:33 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 26 Oct 2022 11:00:21 +0000 (13:00 +0200)
Updates #10391

hugolib/shortcode.go
hugolib/shortcode_test.go

index b2f42ff1d998d8f32374e1872c2ba2f2eb4fda41..a10afe2bcc95a944208d8832f29c1cf1e72cc6bb 100644 (file)
@@ -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 {
index ec521729b8b67bd4548220bf2e9c48c06b61733c..b5f27d6218cd62adbdc6a49f73f80c9536f9234f 100644 (file)
@@ -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`)
+
+}