///|
pub(all) struct NavItem {
title : String
route : String
depth : Int
}
///|
pub fn navigation_from_pages(pages : Array[PagePlan]) -> Array[NavItem] {
let items : Array[NavItem] = []
for page in pages {
items.push({
title: page.title,
route: page.route,
depth: route_depth(page.route),
})
}
items
}
///|
pub fn route_depth(route : String) -> Int {
if route == "/" {
0
} else {
let parts = route.split("/")
let mut depth = 0
for part in parts {
if part.trim() != "" {
depth = depth + 1
}
}
depth - 1
}
}
///|
pub fn render_sidebar(items : Array[NavItem]) -> String {
render_sidebar_for_lang(items, "en")
}
///|
pub fn render_sidebar_for_lang(items : Array[NavItem], lang : String) -> String {
let mut html = "\n"
}
///|
pub fn render_language_switcher(
current_lang : String,
route : String,
) -> String {
let en_href = if route == "/" { "/" } else { route }
let zh_href = if route == "/" { "/zh/" } else { "/zh" + route }
let en_class = if current_lang == "en" { " active" } else { "" }
let zh_class = if current_lang == "zh" { " active" } else { "" }
"\n"
}
///|
pub fn localized_href(lang : String, route : String) -> String {
if lang == "en" {
route
} else if route == "/" {
"/" + lang + "/"
} else {
"/" + lang + route
}
}