mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-27 22:21:07 +03:00
Fix some RenderShortcodes error cases
This issue fixes two cases where `{{__hugo_ctx` artifacts were left in the rendered output: 1. Inclusion when `.RenderShortcodes` is wrapped in HTML. 2. Inclusion of Markdown file without a trailing newline in some cases. Closes #12854 Updates #12998
This commit is contained in:
parent
5fc1639035
commit
1f23b4949c
13 changed files with 283 additions and 141 deletions
|
@ -14,6 +14,7 @@
|
|||
package hugolib
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
@ -69,6 +70,7 @@ Content: {{ .Content }}|
|
|||
|
||||
b := Test(t, files)
|
||||
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContent("public/p1/index.html",
|
||||
"Fragments: [p1-h1 p2-h1 p2-h2 p2-h3 p2-withmarkdown p3-h1 p3-h2 p3-withmarkdown]|",
|
||||
"HasShortcode Level 1: true|",
|
||||
|
@ -115,6 +117,7 @@ JSON: {{ .Content }}
|
|||
|
||||
b := Test(t, files)
|
||||
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContent("public/p1/index.html", "Myshort HTML")
|
||||
b.AssertFileContent("public/p1/index.json", "Myshort JSON")
|
||||
}
|
||||
|
@ -147,9 +150,11 @@ Myshort Original.
|
|||
{{ .Content }}
|
||||
`
|
||||
b := TestRunning(t, files)
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContent("public/p1/index.html", "Myshort Original.")
|
||||
|
||||
b.EditFileReplaceAll("layouts/shortcodes/myshort.html", "Original", "Edited").Build()
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContent("public/p1/index.html", "Myshort Edited.")
|
||||
}
|
||||
|
||||
|
@ -192,12 +197,14 @@ Myshort Original.
|
|||
},
|
||||
).Build()
|
||||
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContent("public/p1/index.html", "Original")
|
||||
|
||||
b.EditFileReplaceFunc("content/p2.md", func(s string) string {
|
||||
return strings.Replace(s, "Original", "Edited", 1)
|
||||
})
|
||||
b.Build()
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContent("public/p1/index.html", "Edited")
|
||||
}
|
||||
|
||||
|
@ -233,8 +240,10 @@ Myshort Original.
|
|||
`
|
||||
b := TestRunning(t, files)
|
||||
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContent("public/mysection/index.html", "p1-h1")
|
||||
b.EditFileReplaceAll("content/mysection/_index.md", "p1-h1", "p1-h1 Edited").Build()
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContent("public/mysection/index.html", "p1-h1 Edited")
|
||||
}
|
||||
|
||||
|
@ -314,6 +323,8 @@ iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAA
|
|||
|
||||
b := Test(t, files)
|
||||
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
|
||||
b.AssertFileContent("public/markdown/index.html",
|
||||
// Images.
|
||||
"Image: /posts/p1/pixel1.png|\nImage: /posts/p1/pixel2.png|\n|\nImage: /markdown/pixel3.png|</p>\n|",
|
||||
|
@ -333,3 +344,104 @@ iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAA
|
|||
|
||||
b.AssertFileContent("public/html/index.html", "! hugo_ctx")
|
||||
}
|
||||
|
||||
// Issue 12854.
|
||||
func TestRenderShortcodesWithHTML(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
files := `
|
||||
-- hugo.toml --
|
||||
disableLiveReload = true
|
||||
disableKinds = ["home", "taxonomy", "term"]
|
||||
markup.goldmark.renderer.unsafe = true
|
||||
-- content/p1.md --
|
||||
---
|
||||
title: "p1"
|
||||
---
|
||||
{{% include "p2" %}}
|
||||
-- content/p2.md --
|
||||
---
|
||||
title: "p2"
|
||||
---
|
||||
Hello <b>world</b>. Some **bold** text. Some Unicode: 神真美好.
|
||||
-- layouts/shortcodes/include.html --
|
||||
{{ with site.GetPage (.Get 0) }}
|
||||
<div>{{ .RenderShortcodes }}</div>
|
||||
{{ end }}
|
||||
-- layouts/_default/single.html --
|
||||
{{ .Content }}
|
||||
`
|
||||
|
||||
b := TestRunning(t, files, TestOptWarn())
|
||||
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertLogContains(filepath.ToSlash("WARN .RenderShortcodes detected inside HTML block in \"/content/p1.md\"; this may not be what you intended, see https://gohugo.io/methods/page/rendershortcodes/#limitations\nYou can suppress this warning by adding the following to your site configuration:\nignoreLogs = ['warning-rendershortcodes-in-html']"))
|
||||
b.AssertFileContent("public/p1/index.html", "<div>Hello <b>world</b>. Some **bold** text. Some Unicode: 神真美好.\n</div>")
|
||||
b.EditFileReplaceAll("content/p2.md", "Hello", "Hello Edited").Build()
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContent("public/p1/index.html", "<div>Hello Edited <b>world</b>. Some **bold** text. Some Unicode: 神真美好.\n</div>")
|
||||
}
|
||||
|
||||
func TestRenderShortcodesIncludeMarkdownFileWithoutTrailingNewline(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
files := `
|
||||
-- hugo.toml --
|
||||
disableLiveReload = true
|
||||
disableKinds = ["home", "taxonomy", "term"]
|
||||
markup.goldmark.renderer.unsafe = true
|
||||
-- content/p1.md --
|
||||
---
|
||||
title: "p1"
|
||||
---
|
||||
Content p1 id-1000.{{% include "p2" %}}{{% include "p3" %}}
|
||||
|
||||
§§§ go
|
||||
code_p1
|
||||
§§§
|
||||
§§§ go
|
||||
code_p1_2
|
||||
§§§
|
||||
|
||||
§§§ go
|
||||
code_p1_3
|
||||
§§§
|
||||
-- content/p2.md --
|
||||
---
|
||||
title: "p2"
|
||||
---
|
||||
§§§ bash
|
||||
code_p2
|
||||
§§§
|
||||
Foo.
|
||||
-- content/p3.md --
|
||||
---
|
||||
title: "p3"
|
||||
---
|
||||
§§§ php
|
||||
code_p3
|
||||
§§§
|
||||
-- layouts/shortcodes/include.html --
|
||||
{{ with site.GetPage (.Get 0) -}}
|
||||
{{ .RenderShortcodes -}}
|
||||
{{ end -}}
|
||||
-- layouts/_default/single.html --
|
||||
{{ .Content }}
|
||||
-- layouts/_default/_markup/render-codeblock.html --
|
||||
<code>{{ .Inner | safeHTML }}</code>
|
||||
`
|
||||
|
||||
b := TestRunning(t, files, TestOptWarn())
|
||||
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContentEquals("public/p1/index.html", "<p>Content p1 id-1000.</p>\n<code>code_p2</code><p>Foo.\n</p>\n<code>code_p3</code><p></p>\n<code>code_p1</code><code>code_p1_2</code><code>code_p1_3</code>")
|
||||
b.EditFileReplaceAll("content/p1.md", "id-1000.", "id-100.").Build()
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContentEquals("public/p1/index.html", "<p>Content p1 id-100.</p>\n<code>code_p2</code><p>Foo.\n</p>\n<code>code_p3</code><p></p>\n<code>code_p1</code><code>code_p1_2</code><code>code_p1_3</code>")
|
||||
b.EditFileReplaceAll("content/p2.md", "code_p2", "codep2").Build()
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContentEquals("public/p1/index.html", "<p>Content p1 id-100.</p>\n<code>codep2</code><p>Foo.\n</p>\n<code>code_p3</code><p></p>\n<code>code_p1</code><code>code_p1_2</code><code>code_p1_3</code>")
|
||||
b.EditFileReplaceAll("content/p3.md", "code_p3", "code_p3_edited").Build()
|
||||
b.AssertNoRenderShortcodesArtifacts()
|
||||
b.AssertFileContentEquals("public/p1/index.html", "<p>Content p1 id-100.</p>\n<code>codep2</code><p>Foo.\n</p>\n<code>code_p3_edited</code><p></p>\n<code>code_p1</code><code>code_p1_2</code><code>code_p1_3</code>")
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue