aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-10-06 10:11:27 +0200
committermetamuffin <metamuffin@disroot.org>2025-10-06 10:11:27 +0200
commitfeaeca3880f1a17ba6775137b873cee71376b884 (patch)
treee6f09450554c0ee1e6ab265f920a214316cbbb6c
parentd9aa659010f8ffd443133657cca6c541097cc1aa (diff)
downloadhurrycurry-feaeca3880f1a17ba6775137b873cee71376b884.tar
hurrycurry-feaeca3880f1a17ba6775137b873cee71376b884.tar.bz2
hurrycurry-feaeca3880f1a17ba6775137b873cee71376b884.tar.zst
Add table of contents
-rw-r--r--server/tools/src/book.rs17
-rw-r--r--server/tools/src/book_html.rs16
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 {}
}
}