Add headless bundle support

This commit adds  support for `headless bundles` for the `index` bundle type.

So:

```toml
headless = true
```

In front matter means that

* It will have no `Permalink` and no rendered HTML in /public
* It will not be part of `.Site.RegularPages` etc.

But you can get it by:

* `.Site.GetPage ...`

The use cases are many:

* Shared media galleries
* Reusable page content "snippets"
* ...

Fixes #4311
This commit is contained in:
Bjørn Erik Pedersen
2018-01-23 14:02:54 +01:00
parent 5a0819b9b5
commit 0432c64dd2
6 changed files with 163 additions and 20 deletions

View File

@@ -45,6 +45,12 @@ func (s *Site) renderPages(filter map[string]bool) error {
go pageRenderer(s, pages, results, wg)
}
if len(s.headlessPages) > 0 {
wg.Add(1)
go headlessPagesPublisher(s, wg)
}
hasFilter := filter != nil && len(filter) > 0
for _, page := range s.Pages {
@@ -67,6 +73,22 @@ func (s *Site) renderPages(filter map[string]bool) error {
return nil
}
func headlessPagesPublisher(s *Site, wg *sync.WaitGroup) {
defer wg.Done()
for _, page := range s.headlessPages {
outFormat := page.outputFormats[0] // There is only one
pageOutput, err := newPageOutput(page, false, outFormat)
if err == nil {
page.mainPageOutput = pageOutput
err = pageOutput.renderResources()
}
if err != nil {
s.Log.ERROR.Printf("Failed to render resources for headless page %q: %s", page, err)
}
}
}
func pageRenderer(s *Site, pages <-chan *Page, results chan<- error, wg *sync.WaitGroup) {
defer wg.Done()