mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
parent
7732da9f93
commit
e97d3c640f
6 changed files with 69 additions and 1 deletions
|
@ -60,6 +60,9 @@ type pageCommon struct {
|
||||||
// Lazily initialized dependencies.
|
// Lazily initialized dependencies.
|
||||||
init *lazy.Init
|
init *lazy.Init
|
||||||
|
|
||||||
|
// Store holds state that survives server rebuilds.
|
||||||
|
store *maps.Scratch
|
||||||
|
|
||||||
// All of these represents the common parts of a page.Page
|
// All of these represents the common parts of a page.Page
|
||||||
maps.Scratcher
|
maps.Scratcher
|
||||||
navigation.PageMenusProvider
|
navigation.PageMenusProvider
|
||||||
|
@ -134,6 +137,10 @@ type pageCommon struct {
|
||||||
forceRender bool
|
forceRender bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *pageCommon) Store() *maps.Scratch {
|
||||||
|
return p.store
|
||||||
|
}
|
||||||
|
|
||||||
type pagePages struct {
|
type pagePages struct {
|
||||||
pagesInit sync.Once
|
pagesInit sync.Once
|
||||||
pages page.Pages
|
pages page.Pages
|
||||||
|
|
|
@ -41,6 +41,7 @@ func newPageBase(metaProvider *pageMeta) (*pageState, error) {
|
||||||
FileProvider: metaProvider,
|
FileProvider: metaProvider,
|
||||||
AuthorProvider: metaProvider,
|
AuthorProvider: metaProvider,
|
||||||
Scratcher: maps.NewScratcher(),
|
Scratcher: maps.NewScratcher(),
|
||||||
|
store: maps.NewScratch(),
|
||||||
Positioner: page.NopPage,
|
Positioner: page.NopPage,
|
||||||
InSectionPositioner: page.NopPage,
|
InSectionPositioner: page.NopPage,
|
||||||
ResourceMetaProvider: metaProvider,
|
ResourceMetaProvider: metaProvider,
|
||||||
|
|
|
@ -1769,7 +1769,7 @@ Summary: In Chinese, 好 means good.
|
||||||
b.AssertFileContent("public/p6/index.html", "WordCount: 7\nFuzzyWordCount: 100\nReadingTime: 1\nLen Plain: 638\nLen PlainWords: 7\nTruncated: false\nLen Summary: 637\nLen Content: 652")
|
b.AssertFileContent("public/p6/index.html", "WordCount: 7\nFuzzyWordCount: 100\nReadingTime: 1\nLen Plain: 638\nLen PlainWords: 7\nTruncated: false\nLen Summary: 637\nLen Content: 652")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestScratchSite(t *testing.T) {
|
func TestScratch(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
b := newTestSitesBuilder(t)
|
b := newTestSitesBuilder(t)
|
||||||
|
@ -1796,6 +1796,50 @@ title: Scratch Me!
|
||||||
b.AssertFileContent("public/scratchme/index.html", "C: cv")
|
b.AssertFileContent("public/scratchme/index.html", "C: cv")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestScratchRebuild(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
files := `
|
||||||
|
-- config.toml --
|
||||||
|
-- content/p1.md --
|
||||||
|
---
|
||||||
|
title: "p1"
|
||||||
|
---
|
||||||
|
{{< scratchme >}}
|
||||||
|
-- layouts/shortcodes/foo.html --
|
||||||
|
notused
|
||||||
|
-- layouts/shortcodes/scratchme.html --
|
||||||
|
{{ .Page.Scratch.Set "scratch" "foo" }}
|
||||||
|
{{ .Page.Store.Set "scratch" "bar" }}
|
||||||
|
-- layouts/_default/single.html --
|
||||||
|
{{ .Content }}
|
||||||
|
Scratch: {{ .Scratch.Get "scratch" }}|
|
||||||
|
Store: {{ .Store.Get "scratch" }}|
|
||||||
|
`
|
||||||
|
|
||||||
|
b := NewIntegrationTestBuilder(
|
||||||
|
IntegrationTestConfig{
|
||||||
|
T: t,
|
||||||
|
TxtarString: files,
|
||||||
|
Running: true,
|
||||||
|
},
|
||||||
|
).Build()
|
||||||
|
|
||||||
|
b.AssertFileContent("public/p1/index.html", `
|
||||||
|
Scratch: foo|
|
||||||
|
Store: bar|
|
||||||
|
`)
|
||||||
|
|
||||||
|
b.EditFiles("layouts/shortcodes/foo.html", "edit")
|
||||||
|
|
||||||
|
b.Build()
|
||||||
|
|
||||||
|
b.AssertFileContent("public/p1/index.html", `
|
||||||
|
Scratch: |
|
||||||
|
Store: bar|
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
func TestPageParam(t *testing.T) {
|
func TestPageParam(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
|
|
@ -261,7 +261,15 @@ type PageWithoutContent interface {
|
||||||
// Helper methods
|
// Helper methods
|
||||||
ShortcodeInfoProvider
|
ShortcodeInfoProvider
|
||||||
compare.Eqer
|
compare.Eqer
|
||||||
|
|
||||||
|
// Scratch returns a Scratch that can be used to store temporary state.
|
||||||
|
// Note that this Scratch gets reset on server rebuilds. See Store() for a variant that survives.
|
||||||
maps.Scratcher
|
maps.Scratcher
|
||||||
|
|
||||||
|
// Store returns a Scratch that can be used to store temporary state.
|
||||||
|
// In contrast to Scratch(), this Scratch is not reset on server rebuilds.
|
||||||
|
Store() *maps.Scratch
|
||||||
|
|
||||||
RelatedKeywordsProvider
|
RelatedKeywordsProvider
|
||||||
|
|
||||||
// GetTerms gets the terms of a given taxonomy,
|
// GetTerms gets the terms of a given taxonomy,
|
||||||
|
|
|
@ -418,6 +418,10 @@ func (p *nopPage) Scratch() *maps.Scratch {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *nopPage) Store() *maps.Scratch {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (p *nopPage) RelatedKeywords(cfg related.IndexConfig) ([]related.Keyword, error) {
|
func (p *nopPage) RelatedKeywords(cfg related.IndexConfig) ([]related.Keyword, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -498,6 +498,10 @@ func (p *testPage) Scratch() *maps.Scratch {
|
||||||
panic("not implemented")
|
panic("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *testPage) Store() *maps.Scratch {
|
||||||
|
panic("not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
func (p *testPage) RelatedKeywords(cfg related.IndexConfig) ([]related.Keyword, error) {
|
func (p *testPage) RelatedKeywords(cfg related.IndexConfig) ([]related.Keyword, error) {
|
||||||
v, err := p.Param(cfg.Name)
|
v, err := p.Param(cfg.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in a new issue