feat(nav): complete Tier 1 hierarchical navigation

Add config option [nav] nested (defaults false), update base.html
template with nested nav rendering, and add .nav-children CSS styling
for indented section children.

- Add NavConfig struct with nested: bool
- Template renders item.children in .nav-children div
- CSS: left border + indent for nested items
This commit is contained in:
Timothy DeHerrera
2026-02-01 09:04:15 -07:00
parent b3a540651a
commit 7f765b32e1
5 changed files with 41 additions and 2 deletions

View File

@@ -7,3 +7,6 @@ content = "content"
output = "public"
static = "static"
templates = "templates"
[nav]
nested = true

13
docs/static/style.css vendored
View File

@@ -94,6 +94,19 @@ body {
color: var(--bg);
}
.sidebar .nav-children {
margin-left: 1rem;
padding-left: 0.5rem;
border-left: 1px solid var(--border);
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.sidebar .nav-children a {
font-size: 0.9rem;
}
.sidebar-footer {
margin-top: auto;
padding-top: 1rem;

View File

@@ -34,8 +34,17 @@
</label>
</header>
<nav>
{% for item in nav %}<a href="{{ prefix }}{{ item.path }}" {% if page_path==item.path %} class="active" {% endif
%}>{{ item.label }}</a>{% endfor %}
{% for item in nav %}
<a href="{{ prefix }}{{ item.path }}" {% if page_path==item.path %}class="active" {% endif %}>{{ item.label }}</a>
{% if config.nested_nav and item.children %}
<div class="nav-children">
{% for child in item.children %}
<a href="{{ prefix }}{{ child.path }}" {% if page_path==child.path %}class="active" {% endif %}>{{ child.label
}}</a>
{% endfor %}
</div>
{% endif %}
{% endfor %}
</nav>
<footer class="sidebar-footer">
<a href="https://github.com/nrdxp/sukr">GitHub</a>

View File

@@ -17,6 +17,17 @@ pub struct SiteConfig {
/// Path configuration (all optional with defaults).
#[serde(default)]
pub paths: PathsConfig,
/// Navigation configuration.
#[serde(default)]
pub nav: NavConfig,
}
/// Navigation configuration.
#[derive(Debug, Deserialize, Default)]
#[serde(default)]
pub struct NavConfig {
/// Whether to display nested navigation (default: false).
pub nested: bool,
}
/// Path configuration with sensible defaults.

View File

@@ -121,6 +121,8 @@ pub struct ConfigContext {
pub title: String,
pub author: String,
pub base_url: String,
/// Whether to display nested navigation
pub nested_nav: bool,
}
impl From<&SiteConfig> for ConfigContext {
@@ -129,6 +131,7 @@ impl From<&SiteConfig> for ConfigContext {
title: config.title.clone(),
author: config.author.clone(),
base_url: config.base_url.clone(),
nested_nav: config.nav.nested,
}
}
}