diff options
| author | Ben Bridle <ben@derelict.engineering> | 2025-09-04 08:04:02 +1200 |
|---|---|---|
| committer | Ben Bridle <ben@derelict.engineering> | 2025-09-04 08:04:02 +1200 |
| commit | 8fe9268dc12111ae771a3ba4042c74acd3610116 (patch) | |
| tree | 58c93ed7a7df884afb9ea854c768df46a23bb5c2 | |
| parent | e59f3e9284148101b58c0a16fa5f0a9f052107ad (diff) | |
| download | toaster-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.rs | 19 |
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; } |
