summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-09-04 08:04:02 +1200
committerBen Bridle <ben@derelict.engineering>2025-09-04 08:04:02 +1200
commit8fe9268dc12111ae771a3ba4042c74acd3610116 (patch)
tree58c93ed7a7df884afb9ea854c768df46a23bb5c2
parente59f3e9284148101b58c0a16fa5f0a9f052107ad (diff)
downloadtoaster-8fe9268dc12111ae771a3ba4042c74acd3610116.zip
Add table of contents sidebar to generated HTML
This is in addition to the existing table of contents at the top of each page.
-rw-r--r--src/generate_html.rs19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/generate_html.rs b/src/generate_html.rs
index af48d2e..4064820 100644
--- a/src/generate_html.rs
+++ b/src/generate_html.rs
@@ -20,7 +20,13 @@ pub fn generate_html(document: &MarkdownDocument, page: &Page, website: &Website
Some(name) => format!("<a id='parent' href='../{}.html'>{name}</a>", make_url_safe(name)),
None => String::new(),
};
- let table_of_contents = get_table_of_contents(page);
+ let toc = get_table_of_contents(page);
+ let toc_main = if page.headings.len() > 3 {
+ format!("<details><summary></summary>\n{toc}</details>\n")
+ } else { String::new() };
+ let toc_side = if page.headings.len() > 3 {
+ format!("<div>{toc}</div>\n")
+ } else { String::new() };
let main = document_to_html(document, page, website); let main = main.trim();
format!("\
@@ -32,6 +38,10 @@ pub fn generate_html(document: &MarkdownDocument, page: &Page, website: &Website
{head}
</head>
<body>
+<nav id='toc-side'>
+{toc_side}
+</nav>
+<div id='page'>
<header>
<nav id='up'>
{home_link}
@@ -39,12 +49,13 @@ pub fn generate_html(document: &MarkdownDocument, page: &Page, website: &Website
</nav>
<h1 id='title'>{page_name}</h1>
<nav id='toc'>
-{table_of_contents}
+{toc_main}
</nav>
</header>
<main>
{main}
</main>
+</div>
</body>
</html>")
}
@@ -90,7 +101,7 @@ pub fn get_table_of_contents(page: &Page) -> String {
if page.headings.len() < 3 {
return String::new();
}
- let mut toc = String::from("<details><summary></summary><ul>\n");
+ let mut toc = String::from("<ul>\n");
let site_name = sanitize_text(&page.name, true);
toc.push_str(&format!("<li class='l1'><a href='#title'>{site_name}</a></li>\n"));
@@ -104,7 +115,7 @@ pub fn get_table_of_contents(page: &Page) -> String {
};
toc.push_str(&format!("<li class='{class}'><a href='#{url}'>{name}</a></li>\n"));
}
- toc.push_str("</ul></details>\n");
+ toc.push_str("</ul>\n");
return toc;
}