Made some changes to how index pages are made
This commit is contained in:
parent
ba12398d2f
commit
573517565d
14 changed files with 259 additions and 56 deletions
|
|
@ -27,7 +27,17 @@ func (s *Service) WritePage(site models.Site, bundle models.Bundle, page models.
|
|||
return fmt.Errorf("theme %s not found in themes", site.Theme)
|
||||
}
|
||||
|
||||
if err := s.writePage(site, themeMeta, bundle, page); err != nil {
|
||||
bundleInfo, err := s.db.GetSiteBundleInfo(ctx, site.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := s.writePage(pageBuildInfo{
|
||||
site: site,
|
||||
themeMeta: themeMeta,
|
||||
bundle: bundle,
|
||||
bundleInfo: bundleInfo,
|
||||
}, page); err != nil {
|
||||
return err
|
||||
}
|
||||
return s.publish(ctx, site)
|
||||
|
|
@ -45,8 +55,23 @@ func (s *Service) DeletePage(site models.Site, page models.Page) models.Job {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
themeMeta, ok := s.themes.Lookup(site.Theme)
|
||||
if !ok {
|
||||
return fmt.Errorf("theme %s not found in themes", site.Theme)
|
||||
}
|
||||
|
||||
postFilename := s.pageFilename(site, bundle, page)
|
||||
bundleInfo, err := s.db.GetSiteBundleInfo(ctx, site.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
postFilename := s.pageFilename(pageBuildInfo{
|
||||
site: site,
|
||||
themeMeta: themeMeta,
|
||||
bundle: bundle,
|
||||
bundleInfo: bundleInfo,
|
||||
}, page)
|
||||
|
||||
if os.Remove(postFilename) != nil {
|
||||
return nil
|
||||
|
|
@ -71,6 +96,11 @@ func (s *Service) writeAllPages(ctx context.Context, site models.Site) error {
|
|||
|
||||
bundlesByID := momap.FromSlice(bundles, func(b models.Bundle) (int64, models.Bundle) { return b.ID, b })
|
||||
|
||||
bundleInfo, err := s.db.GetSiteBundleInfo(ctx, site.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var startId int64
|
||||
for {
|
||||
pages, err := s.db.ListPublishablePages(ctx, int64(startId), site.ID)
|
||||
|
|
@ -81,7 +111,12 @@ func (s *Service) writeAllPages(ctx context.Context, site models.Site) error {
|
|||
}
|
||||
|
||||
for _, page := range pages {
|
||||
if err := s.writePage(site, themeMeta, bundlesByID[page.BundleID], page); err != nil {
|
||||
if err := s.writePage(pageBuildInfo{
|
||||
site: site,
|
||||
themeMeta: themeMeta,
|
||||
bundle: bundlesByID[page.BundleID],
|
||||
bundleInfo: bundleInfo,
|
||||
}, page); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
@ -89,17 +124,24 @@ func (s *Service) writeAllPages(ctx context.Context, site models.Site) error {
|
|||
}
|
||||
}
|
||||
|
||||
func (s *Service) writePage(site models.Site, themeMeta models.ThemeMeta, bundle models.Bundle, page models.Page) error {
|
||||
postFilename := s.pageFilename(site, bundle, page)
|
||||
func (s *Service) writePage(bi pageBuildInfo, page models.Page) error {
|
||||
postFilename := s.pageFilename(bi, page)
|
||||
|
||||
frontMatter := map[string]any{
|
||||
"date": page.PublishDate.Format(time.RFC3339),
|
||||
}
|
||||
if page.Title != "" {
|
||||
frontMatter["title"] = page.Title
|
||||
} else if themeMeta.PreferTitle {
|
||||
} else if bi.themeMeta.PreferTitle {
|
||||
frontMatter["title"] = page.PublishDate.Format(time.ANSIC)
|
||||
}
|
||||
|
||||
return s.writeMarkdownFile(postFilename, frontMatter, page.Body)
|
||||
}
|
||||
|
||||
type pageBuildInfo struct {
|
||||
site models.Site
|
||||
themeMeta models.ThemeMeta
|
||||
bundle models.Bundle
|
||||
bundleInfo map[int64]models.BundleInfo
|
||||
}
|
||||
|
|
|
|||
|
|
@ -151,12 +151,32 @@ func (s *Service) postFilename(site models.Site, themeMeta models.ThemeMeta, pos
|
|||
return filepath.Join(s.hugo.SiteStagingDir(site, hugo.ContentSiteDir), themeMeta.BlogPostBundle, post.CreatedAt.Format("2006-01-02-150405.md"))
|
||||
}
|
||||
|
||||
func (s *Service) pageFilename(site models.Site, bundle models.Bundle, page models.Page) string {
|
||||
bundleDir := ""
|
||||
if bundle.Name != models.RootBundleName {
|
||||
bundleDir = bundle.Name
|
||||
func (s *Service) pageFilename(bi pageBuildInfo, page models.Page) string {
|
||||
isIndex := false
|
||||
isLeafBundle := true
|
||||
|
||||
thisBundleInfo := bi.bundleInfo[bi.bundle.ID]
|
||||
if thisBundleInfo.PageCount > 1 {
|
||||
isLeafBundle = false
|
||||
isIndex = thisBundleInfo.IndexPageID == page.ID
|
||||
} else {
|
||||
isIndex = true
|
||||
}
|
||||
|
||||
pageName := page.Name + ".md"
|
||||
return filepath.Join(s.hugo.SiteStagingDir(site, hugo.ContentSiteDir), bundleDir, pageName)
|
||||
bundleDir := ""
|
||||
if bi.bundle.Name != models.RootBundleName {
|
||||
bundleDir = bi.bundle.Name
|
||||
}
|
||||
|
||||
pageName := page.Name
|
||||
if isIndex {
|
||||
if isLeafBundle {
|
||||
pageName = "index"
|
||||
} else {
|
||||
pageName = "_index"
|
||||
}
|
||||
}
|
||||
|
||||
pageName += ".md"
|
||||
return filepath.Join(s.hugo.SiteStagingDir(bi.site, hugo.ContentSiteDir), bundleDir, pageName)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue