mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-14 20:33:59 +02:00
hubolib: Refactor site rendering with an "output format context"
Fixes #3397
This commit is contained in:
@@ -22,6 +22,7 @@ import (
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
@@ -118,12 +119,42 @@ type Site struct {
|
||||
outputFormatsConfig output.Formats
|
||||
mediaTypesConfig media.Types
|
||||
|
||||
// We render each site for all the relevant output formats in serial with
|
||||
// this rendering context pointing to the current one.
|
||||
rc *siteRenderingContext
|
||||
|
||||
// The output formats that we need to render this site in. This slice
|
||||
// will be fixed once set.
|
||||
// This will be the union of Site.Pages' outputFormats.
|
||||
// This slice will be sorted.
|
||||
renderFormats output.Formats
|
||||
|
||||
// Logger etc.
|
||||
*deps.Deps `json:"-"`
|
||||
|
||||
siteStats *siteStats
|
||||
}
|
||||
|
||||
type siteRenderingContext struct {
|
||||
output.Format
|
||||
}
|
||||
|
||||
func (s *Site) initRenderFormats() {
|
||||
formatSet := make(map[string]bool)
|
||||
formats := output.Formats{}
|
||||
for _, p := range s.Pages {
|
||||
for _, f := range p.outputFormats {
|
||||
if !formatSet[f.Name] {
|
||||
formats = append(formats, f)
|
||||
formatSet[f.Name] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sort.Sort(formats)
|
||||
s.renderFormats = formats
|
||||
}
|
||||
|
||||
type siteStats struct {
|
||||
pageCount int
|
||||
pageCountRegular int
|
||||
@@ -971,8 +1002,13 @@ func (s *Site) render() (err error) {
|
||||
}
|
||||
s.timerStep("render and write aliases")
|
||||
|
||||
if err = s.renderPages(); err != nil {
|
||||
return
|
||||
// TODO(bep) render consider this, ref. render404 etc.
|
||||
s.initRenderFormats()
|
||||
for _, rf := range s.renderFormats {
|
||||
s.rc = &siteRenderingContext{Format: rf}
|
||||
if err = s.renderPages(); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
s.timerStep("render and write pages")
|
||||
|
||||
|
Reference in New Issue
Block a user