✨feature: Set nav order via front matter
This commit is contained in:
@@ -3,6 +3,7 @@ title: Go SSG - About
|
||||
navTitle: About
|
||||
description: More About My Go SSG Site.
|
||||
date: 2025-04-19
|
||||
navPosition: 2
|
||||
---
|
||||
|
||||
Experimenting with Go. Seems pretty cool so far!
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
---
|
||||
title: Contact
|
||||
navTitle: Contact
|
||||
navPosition: 4
|
||||
---
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
---
|
||||
title: Go SSG - Home
|
||||
navTitle: Home
|
||||
showInNav: true
|
||||
navPosition: 1
|
||||
description: My Go SSG Site.
|
||||
date: 2025-04-19
|
||||
---
|
||||
|
||||
50
main.go
50
main.go
@@ -21,12 +21,14 @@ import (
|
||||
type NavItem struct {
|
||||
Title string
|
||||
URL string
|
||||
Position int
|
||||
}
|
||||
|
||||
type PageMeta struct {
|
||||
Title string `yaml:"title"`
|
||||
NavTitle string `yaml:"navTitle"`
|
||||
ShowInNav *bool `yaml:"showInNav"`
|
||||
NavPosition *int `yaml:"navPosition"`
|
||||
Description string `yaml:"description"`
|
||||
Date string `yaml:"date"`
|
||||
Categories []string `yaml:"categories"`
|
||||
@@ -53,6 +55,9 @@ func main() {
|
||||
|
||||
entries, _ := os.ReadDir(contentDir)
|
||||
nav := buildNav(entries, contentDir)
|
||||
for _, item := range nav {
|
||||
fmt.Printf("Nav: %s (%s) — Pos: %d\n", item.Title, item.URL, item.Position)
|
||||
}
|
||||
renderStaticPages(files, contentDir, outputDir, tpl, nav)
|
||||
blogPosts, categoryMap := processBlogPosts(contentDir, outputDir, tpl, nav)
|
||||
renderContactPage(contentDir, outputDir, tpl, nav)
|
||||
@@ -85,46 +90,53 @@ func buildNav(entries []fs.DirEntry, contentDir string) []NavItem {
|
||||
}
|
||||
|
||||
meta, _ := parseFrontMatter(rawContent)
|
||||
fmt.Printf("meta from %s: %+v\n", entry.Name(), meta)
|
||||
|
||||
// Skip pages with showInNav: false
|
||||
if meta.ShowInNav != nil && !*meta.ShowInNav {
|
||||
continue
|
||||
}
|
||||
|
||||
// Pull title info
|
||||
title := strings.TrimSpace(meta.NavTitle)
|
||||
if title == "" {
|
||||
title = meta.Title
|
||||
}
|
||||
if title == "" {
|
||||
title = strings.Title(name)
|
||||
}
|
||||
|
||||
// Respect showInNav: false
|
||||
if meta.ShowInNav != nil && !*meta.ShowInNav {
|
||||
continue
|
||||
}
|
||||
if title == "" && name == "index" {
|
||||
title = "Home"
|
||||
} else if title == "" {
|
||||
title = strings.Title(name)
|
||||
}
|
||||
|
||||
// Build URL
|
||||
url := "/"
|
||||
if name != "index" {
|
||||
url = "/" + name + "/"
|
||||
}
|
||||
|
||||
nav = append(nav, NavItem{Title: title, URL: url})
|
||||
// Pull nav position regardless of title logic
|
||||
position := 999
|
||||
if meta.NavPosition != nil {
|
||||
position = *meta.NavPosition
|
||||
}
|
||||
|
||||
// Add Blog manually
|
||||
nav = append(nav, NavItem{Title: "Blog", URL: "/blog/"})
|
||||
|
||||
// Optional: order the nav explicitly
|
||||
preferredOrder := map[string]int{
|
||||
"Home": 0,
|
||||
"Blog": 1,
|
||||
"About": 2,
|
||||
"Contact": 3,
|
||||
nav = append(nav, NavItem{
|
||||
Title: title,
|
||||
URL: url,
|
||||
Position: position,
|
||||
})
|
||||
}
|
||||
|
||||
// Optional: add Blog manually (or skip if you handle it as a page)
|
||||
nav = append(nav, NavItem{
|
||||
Title: "Blog",
|
||||
URL: "/blog/",
|
||||
Position: 3,
|
||||
})
|
||||
|
||||
// Sort by position
|
||||
sort.SliceStable(nav, func(i, j int) bool {
|
||||
return preferredOrder[nav[i].Title] < preferredOrder[nav[j].Title]
|
||||
return nav[i].Position < nav[j].Position
|
||||
})
|
||||
|
||||
return nav
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/">Home</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/about/">About</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/">Home</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/about/">About</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/">Home</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/about/">About</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/">Home</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/about/">About</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/">Home</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/about/">About</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/">Home</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/about/">About</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/">Home</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/about/">About</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/">Home</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/about/">About</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/">Home</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/about/">About</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/">Home</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/about/">About</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/blog/">Blog</a></li>
|
||||
|
||||
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
Reference in New Issue
Block a user