ref: 266f583a8cf08c8c7788cf3ba7328e19bf406dc3
parent: dcfcbac58997f3a329fed636d8fbc5aede42ffcf
author: spf13 <[email protected]>
date: Fri Oct 4 08:28:28 EDT 2013
Restoring former snippet behavior & adding test to ensure future behavior
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -76,15 +76,30 @@
func (p Pages) Sort() { sort.Sort(p) }
func (p Pages) Limit(n int) Pages { return p[0:n] }
-func getSummaryString(content []byte) ([]byte, bool) {
+func getSummaryString(content []byte, fmt string) []byte {
if bytes.Contains(content, summaryDivider) {
- return bytes.Split(content, summaryDivider)[0], false
+ // If user defines split:
+ // Split then render
+ return renderBytes(bytes.Split(content, summaryDivider)[0], fmt)
} else {
- plainContent := StripHTML(StripShortcodes(string(content)))
- return []byte(TruncateWordsToWholeSentence(plainContent, summaryLength)), true
+ // If hugo defines split:
+ // render, strip html, then split
+ plainContent := StripHTML(StripShortcodes(string(renderBytes(content, fmt))))
+ return []byte(TruncateWordsToWholeSentence(plainContent, summaryLength))
}
}
+func renderBytes(content []byte, fmt string) []byte {
+ switch fmt {
+ default:
+ return blackfriday.MarkdownCommon(content)
+ case "markdown":
+ return blackfriday.MarkdownCommon(content)
+ case "rst":
+ return []byte(getRstContent(content))
+ }
+}
+
// TODO abstract further to support loading from more
// than just files on disk. Should load reader (file, []byte)
func newPage(filename string) *Page {
@@ -424,12 +439,8 @@
b.ReadFrom(lines)
content := b.Bytes()
page.Content = template.HTML(string(blackfriday.MarkdownCommon(RemoveSummaryDivider(content))))
- summary, plain := getSummaryString(content)
- if plain {
- page.Summary = template.HTML(string(summary))
- } else {
- page.Summary = template.HTML(string(blackfriday.MarkdownCommon(summary)))
- }
+ summary := getSummaryString(content, "markdown")
+ page.Summary = template.HTML(string(summary))
}
func (page *Page) convertRestructuredText(lines io.Reader) {
@@ -437,12 +448,8 @@
b.ReadFrom(lines)
content := b.Bytes()
page.Content = template.HTML(getRstContent(content))
- summary, plain := getSummaryString(content)
- if plain {
- page.Summary = template.HTML(string(summary))
- } else {
- page.Summary = template.HTML(getRstContent(summary))
- }
+ summary := getSummaryString(content, "rst")
+ page.Summary = template.HTML(string(summary))
}
func (p *Page) TargetPath() (outfile string) {
--- a/hugolib/page_test.go
+++ b/hugolib/page_test.go
@@ -111,7 +111,15 @@
<!--more-->
Some more text
`
+ SIMPLE_PAGE_WITH_SHORTCODE_IN_SUMMARY = `---
+title: Simple
+---
+Summary Next Line. {{% img src="/not/real" %}}.
+More text here.
+Some more text
+`
+
SIMPLE_PAGE_WITH_SUMMARY_DELIMITER_SAME_LINE = `---
title: Simple
---
@@ -206,7 +214,18 @@
checkPageSummary(t, p, "<p>Summary Next Line</p>\n")
checkPageType(t, p, "page")
checkPageLayout(t, p, "page/single.html")
+}
+func TestPageWithShortCodeInSummary(t *testing.T) {
+ p, err := ReadFrom(strings.NewReader(SIMPLE_PAGE_WITH_SHORTCODE_IN_SUMMARY), "simple.md")
+ if err != nil {
+ t.Fatalf("Unable to create a page with frontmatter and body content: %s", err)
+ }
+ checkPageTitle(t, p, "Simple")
+ checkPageContent(t, p, "<p>Summary Next Line. {{% img src=“/not/real” %}}.\nMore text here.</p>\n\n<p>Some more text</p>\n")
+ checkPageSummary(t, p, "Summary Next Line. . More text here. Some more text")
+ checkPageType(t, p, "page")
+ checkPageLayout(t, p, "page/single.html")
}
func TestPageWithMoreTag(t *testing.T) {