✨feature: Set nav order via front matter
This commit is contained in:
@@ -3,6 +3,7 @@ title: Go SSG - About
|
|||||||
navTitle: About
|
navTitle: About
|
||||||
description: More About My Go SSG Site.
|
description: More About My Go SSG Site.
|
||||||
date: 2025-04-19
|
date: 2025-04-19
|
||||||
|
navPosition: 2
|
||||||
---
|
---
|
||||||
|
|
||||||
Experimenting with Go. Seems pretty cool so far!
|
Experimenting with Go. Seems pretty cool so far!
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
---
|
---
|
||||||
title: Contact
|
title: Contact
|
||||||
navTitle: Contact
|
navTitle: Contact
|
||||||
|
navPosition: 4
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
---
|
---
|
||||||
title: Go SSG - Home
|
title: Go SSG - Home
|
||||||
navTitle: Home
|
navTitle: Home
|
||||||
|
showInNav: true
|
||||||
|
navPosition: 1
|
||||||
description: My Go SSG Site.
|
description: My Go SSG Site.
|
||||||
date: 2025-04-19
|
date: 2025-04-19
|
||||||
---
|
---
|
||||||
|
|||||||
50
main.go
50
main.go
@@ -21,12 +21,14 @@ import (
|
|||||||
type NavItem struct {
|
type NavItem struct {
|
||||||
Title string
|
Title string
|
||||||
URL string
|
URL string
|
||||||
|
Position int
|
||||||
}
|
}
|
||||||
|
|
||||||
type PageMeta struct {
|
type PageMeta struct {
|
||||||
Title string `yaml:"title"`
|
Title string `yaml:"title"`
|
||||||
NavTitle string `yaml:"navTitle"`
|
NavTitle string `yaml:"navTitle"`
|
||||||
ShowInNav *bool `yaml:"showInNav"`
|
ShowInNav *bool `yaml:"showInNav"`
|
||||||
|
NavPosition *int `yaml:"navPosition"`
|
||||||
Description string `yaml:"description"`
|
Description string `yaml:"description"`
|
||||||
Date string `yaml:"date"`
|
Date string `yaml:"date"`
|
||||||
Categories []string `yaml:"categories"`
|
Categories []string `yaml:"categories"`
|
||||||
@@ -53,6 +55,9 @@ func main() {
|
|||||||
|
|
||||||
entries, _ := os.ReadDir(contentDir)
|
entries, _ := os.ReadDir(contentDir)
|
||||||
nav := buildNav(entries, 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)
|
renderStaticPages(files, contentDir, outputDir, tpl, nav)
|
||||||
blogPosts, categoryMap := processBlogPosts(contentDir, outputDir, tpl, nav)
|
blogPosts, categoryMap := processBlogPosts(contentDir, outputDir, tpl, nav)
|
||||||
renderContactPage(contentDir, outputDir, tpl, nav)
|
renderContactPage(contentDir, outputDir, tpl, nav)
|
||||||
@@ -85,46 +90,53 @@ func buildNav(entries []fs.DirEntry, contentDir string) []NavItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
meta, _ := parseFrontMatter(rawContent)
|
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)
|
title := strings.TrimSpace(meta.NavTitle)
|
||||||
if title == "" {
|
if title == "" {
|
||||||
title = meta.Title
|
title = meta.Title
|
||||||
}
|
}
|
||||||
if title == "" {
|
|
||||||
title = strings.Title(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Respect showInNav: false
|
|
||||||
if meta.ShowInNav != nil && !*meta.ShowInNav {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if title == "" && name == "index" {
|
if title == "" && name == "index" {
|
||||||
title = "Home"
|
title = "Home"
|
||||||
} else if title == "" {
|
} else if title == "" {
|
||||||
title = strings.Title(name)
|
title = strings.Title(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Build URL
|
||||||
url := "/"
|
url := "/"
|
||||||
if name != "index" {
|
if name != "index" {
|
||||||
url = "/" + name + "/"
|
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{
|
||||||
nav = append(nav, NavItem{Title: "Blog", URL: "/blog/"})
|
Title: title,
|
||||||
|
URL: url,
|
||||||
// Optional: order the nav explicitly
|
Position: position,
|
||||||
preferredOrder := map[string]int{
|
})
|
||||||
"Home": 0,
|
|
||||||
"Blog": 1,
|
|
||||||
"About": 2,
|
|
||||||
"Contact": 3,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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 {
|
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
|
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="/">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="/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>
|
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||||
|
|
||||||
</ul>
|
</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="/">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="/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>
|
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||||
|
|
||||||
</ul>
|
</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="/">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="/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>
|
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||||
|
|
||||||
</ul>
|
</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="/">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="/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>
|
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||||
|
|
||||||
</ul>
|
</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="/">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="/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>
|
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||||
|
|
||||||
</ul>
|
</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="/">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="/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>
|
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||||
|
|
||||||
</ul>
|
</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="/">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="/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>
|
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||||
|
|
||||||
</ul>
|
</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="/">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="/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>
|
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||||
|
|
||||||
</ul>
|
</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="/">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="/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>
|
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||||
|
|
||||||
</ul>
|
</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="/">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="/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>
|
<li class="list-none"><a class="text-white hover:text-primary-200" href="/contact/">Contact</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
Reference in New Issue
Block a user