summaryrefslogtreecommitdiffstats
path: root/hugolib/page__output.go
diff options
context:
space:
mode:
Diffstat (limited to 'hugolib/page__output.go')
-rw-r--r--hugolib/page__output.go55
1 files changed, 44 insertions, 11 deletions
diff --git a/hugolib/page__output.go b/hugolib/page__output.go
index 21f58e795..6fae10740 100644
--- a/hugolib/page__output.go
+++ b/hugolib/page__output.go
@@ -14,6 +14,7 @@
package hugolib
import (
+ "github.com/gohugoio/hugo/identity"
"github.com/gohugoio/hugo/output"
"github.com/gohugoio/hugo/resources/page"
"github.com/gohugoio/hugo/resources/resource"
@@ -23,7 +24,8 @@ func newPageOutput(
ps *pageState,
pp pagePaths,
f output.Format,
- render bool) *pageOutput {
+ render bool,
+) *pageOutput {
var targetPathsProvider targetPathsHolder
var linksProvider resource.ResourceLinksProvider
@@ -43,6 +45,11 @@ func newPageOutput(
paginatorProvider = pag
}
+ var dependencyManager identity.Manager = identity.NopManager
+ if ps.s.conf.Internal.Watch {
+ dependencyManager = identity.NewManager(ps.Path() + "/" + f.Name)
+ }
+
providers := struct {
page.PaginatorProvider
resource.ResourceLinksProvider
@@ -54,6 +61,7 @@ func newPageOutput(
}
po := &pageOutput{
+ p: ps,
f: f,
pagePerOutputProviders: providers,
ContentProvider: page.NopPage,
@@ -61,6 +69,7 @@ func newPageOutput(
TableOfContentsProvider: page.NopPage,
render: render,
paginator: pag,
+ dependencyManagerOutput: dependencyManager,
}
return po
@@ -69,6 +78,8 @@ func newPageOutput(
// We create a pageOutput for every output format combination, even if this
// particular page isn't configured to be rendered to that format.
type pageOutput struct {
+ p *pageState
+
// Set if this page isn't configured to be rendered to this format.
render bool
@@ -89,10 +100,39 @@ type pageOutput struct {
page.RenderShortcodesProvider
// May be nil.
- cp *pageContentOutput
+ pco *pageContentOutput
+
+ dependencyManagerOutput identity.Manager
+
+ renderState int // Reset when it needs to be rendered again.
+ renderOnce bool // To make sure we at least try to render it once.
}
-func (p *pageOutput) initContentProvider(cp *pageContentOutput) {
+func (po *pageOutput) incrRenderState() {
+ po.renderState++
+ po.renderOnce = true
+}
+
+// isRendered reports whether this output format or its content has been rendered.
+func (po *pageOutput) isRendered() bool {
+ if po.renderState > 0 {
+ return true
+ }
+ if po.pco != nil && po.pco.contentRendered {
+ return true
+ }
+ return false
+}
+
+func (po *pageOutput) IdentifierBase() string {
+ return po.p.f.Name
+}
+
+func (po *pageOutput) GetDependencyManager() identity.Manager {
+ return po.dependencyManagerOutput
+}
+
+func (p *pageOutput) setContentProvider(cp *pageContentOutput) {
if cp == nil {
return
}
@@ -101,12 +141,5 @@ func (p *pageOutput) initContentProvider(cp *pageContentOutput) {
p.PageRenderProvider = cp
p.TableOfContentsProvider = cp
p.RenderShortcodesProvider = cp
- p.cp = cp
-
-}
-
-func (p *pageOutput) enablePlaceholders() {
- if p.cp != nil {
- p.cp.enablePlaceholders()
- }
+ p.pco = cp
}