diff options
-rw-r--r-- | src/generate_html.rs | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/src/generate_html.rs b/src/generate_html.rs index 19cf9a5..d48e3fe 100644 --- a/src/generate_html.rs +++ b/src/generate_html.rs @@ -13,27 +13,16 @@ pub fn generate_html(document: &MarkdownDocument, page: &Page, website: &Website parent_url.push_str(&make_url_safe(segment)); parent_url.push('/'); } parent_url.pop(); - let parent_name = match page.parents.get(page.parents.len()-1) { - Some(parent) => parent.to_string(), + let home_link = format!("<a id='home' href='{root}index.html'>{site_name}</a>"); + let parent_link = match page.parents.get(page.parents.len()-1) { + Some(name) => format!("<a id='parent' href='../{parent_url}.html'>{name}</a>"), None => String::new(), }; let head = get_html_head(document, page); let head = head.trim(); - let mut home = format!("<a id='home' href='{root}index.html'>{site_name}</a>"); - let mut parent = format!("<a id='parent' href='../{parent_url}.html'>{parent_name}</a>"); - let mut title = format!("<h1 id='title'>{page_name}</h1>"); - let mut toc = get_table_of_contents(page); + let table_of_contents = get_table_of_contents(page); let main = document_to_html(document, page, website); let main = main.trim(); - if page.parents.is_empty() { - parent.clear(); - if page.name_url == "index" { - home.clear(); - title.clear(); - toc.clear(); - } - } - format!("\ <!DOCTYPE html> <head> @@ -45,11 +34,13 @@ pub fn generate_html(document: &MarkdownDocument, page: &Page, website: &Website <body> <header> <nav id='up'> -{home} -{parent} +{home_link} +{parent_link} +</nav> +<h1 id='title'>{page_name}</h1> +<nav id='toc'> +{table_of_contents} </nav> -{title} -{toc} </header> <main> {main} @@ -78,7 +69,10 @@ pub fn get_table_of_contents(page: &Page) -> String { if page.headings.len() < 3 { return String::new(); } - let mut toc = String::from("<nav id='toc'><details><summary></summary><ul>\n"); + let mut toc = String::from("<details><summary></summary><ul>\n"); + let site_name = &page.name; + toc.push_str(&format!("<li class='l1'><a href='#title'>{site_name}</a></li>\n")); + for heading in &page.headings { let name = &heading.name; let url = &heading.url; @@ -87,9 +81,9 @@ pub fn get_table_of_contents(page: &Page) -> String { Level::Heading2 => "l2", Level::Heading3 => "l3", }; - toc.push_str(&format!("<li><a href='#{url}' class='{class}'>{name}</a></li>\n")); + toc.push_str(&format!("<li class='{class}'><a href='#{url}'>{name}</a></li>\n")); } - toc.push_str("</ul></details></nav>\n"); + toc.push_str("</ul></details>\n"); return toc; } |