summaryrefslogtreecommitdiff
path: root/src/generate_html.rs
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-02-01 17:52:47 +1300
committerBen Bridle <ben@derelict.engineering>2025-02-01 17:52:47 +1300
commit28b2654579cd24ffbd730560a56c5e6b93986d35 (patch)
tree9ca4fccc48a7e3fc350c1427b4946e347432571c /src/generate_html.rs
parentdf637c29dca6246114621692bdeb36ad31cc9458 (diff)
downloadtoaster-28b2654579cd24ffbd730560a56c5e6b93986d35.zip
Implement 'gallery-nav' fragment type
This type is for showing a list of pages as clickable image previews. Each line in the fragment is an internal page link, followed by a '::' separator, followed by the name of an image file. Image files must be stored inside the '/images/thumb/' directory of the generated website.
Diffstat (limited to 'src/generate_html.rs')
-rw-r--r--src/generate_html.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/generate_html.rs b/src/generate_html.rs
index f63614b..dca68f7 100644
--- a/src/generate_html.rs
+++ b/src/generate_html.rs
@@ -212,8 +212,24 @@ pub fn document_to_html(document: &MarkdownDocument, page: &Page, website: &Webs
let thumb = format!("{root}images/thumb/{file}");
html!("<a href='{large}'><img src='{thumb}' /></a>");
}),
+ "gallery-nav" => wrap!("div", "class='gallery-nav'", for line in content.lines() {
+ let line = line.trim();
+ if let Some((name, image)) = line.split_once("::") {
+ let name = name.trim();
+ let image = image.trim();
+ let ParsedLink { path, class, label } = parse_internal_link(name, page, website);
+ if website.has_image(image) {
+ let thumb = format!("{root}images/thumb/{image}");
+ html!("<a href='{path}' class='{class}'><img src='{thumb}'/><p>{label}</p></a>")
+ } else {
+ warn!("Gallery-nav on page {from:?} references nonexistent image {image:?}");
+ }
+ } else {
+ warn!("Gallery-nav on page {from:?} has line without a '::' separator");
+ }
+ }),
_ => {
- html!("<pre class='{}'>", language);
+ html!("<pre class='{language}'>");
html!("{}", sanitize_text(content, false));
html!("</pre>");
},