diff options
author | metamuffin <metamuffin@disroot.org> | 2025-10-06 10:11:27 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-10-06 10:11:27 +0200 |
commit | feaeca3880f1a17ba6775137b873cee71376b884 (patch) | |
tree | e6f09450554c0ee1e6ab265f920a214316cbbb6c | |
parent | d9aa659010f8ffd443133657cca6c541097cc1aa (diff) | |
download | hurrycurry-feaeca3880f1a17ba6775137b873cee71376b884.tar hurrycurry-feaeca3880f1a17ba6775137b873cee71376b884.tar.bz2 hurrycurry-feaeca3880f1a17ba6775137b873cee71376b884.tar.zst |
Add table of contents
-rw-r--r-- | server/tools/src/book.rs | 17 | ||||
-rw-r--r-- | server/tools/src/book_html.rs | 16 |
2 files changed, 23 insertions, 10 deletions
diff --git a/server/tools/src/book.rs b/server/tools/src/book.rs index fc2a1502..ed310fc7 100644 --- a/server/tools/src/book.rs +++ b/server/tools/src/book.rs @@ -43,15 +43,18 @@ pub fn book(data: &Gamedata, serverdata: &Serverdata) -> Result<Book> { let mut pages = Vec::new(); pages.push(BookPage::Contents { table: vec![] }); + let mut toc = Vec::new(); for &RecipePageParams { name, repr_items } in RECIPE_PAGES { let mut diagram = recipe_diagram(data, serverdata, repr_items)?; diagram_layout(&mut diagram)?; + let title = Message::Translation { + id: format!("b.{name}.title"), + params: vec![], + }; + toc.push((title.clone(), pages.len())); pages.push(BookPage::Recipe { - title: Message::Translation { - id: format!("b.{name}.title"), - params: vec![], - }, + title, description: Message::Translation { id: format!("b.{name}.desc"), params: vec![], @@ -60,6 +63,12 @@ pub fn book(data: &Gamedata, serverdata: &Serverdata) -> Result<Book> { }); } + if let BookPage::Contents { table } = &mut pages[0] { + *table = toc; + } else { + unreachable!() + } + Ok(Book { pages }) } diff --git a/server/tools/src/book_html.rs b/server/tools/src/book_html.rs index 4a111538..089fc8f9 100644 --- a/server/tools/src/book_html.rs +++ b/server/tools/src/book_html.rs @@ -36,14 +36,14 @@ markup::define! { title { "Recipe Book - Hurry Curry!" } } body { - @for page in &book.pages { - @PageR { data, page } + @for (index, page) in book.pages.iter().enumerate() { + @PageR { data, page, index } } } } } - PageR<'a>(data: &'a Gamedata, page: &'a BookPage) { - section.pagegroup { + PageR<'a>(index: usize, data: &'a Gamedata, page: &'a BookPage) { + section.pagegroup[id=format!("page{index}")] { @match page { BookPage::Cover => { div.page {} @@ -62,8 +62,12 @@ markup::define! { div.page {} div.page {} } - BookPage::Contents { .. } => { - div.page {} + BookPage::Contents { table } => { + div.page { + ol { @for (label, page) in table { + li { a[href=format!("#page{page}")] { @MessageR { data, message: label } } } + }} + } div.page {} } } |