diff options
author | Ben Bridle <ben@derelict.engineering> | 2025-02-01 17:52:47 +1300 |
---|---|---|
committer | Ben Bridle <ben@derelict.engineering> | 2025-02-01 17:52:47 +1300 |
commit | 28b2654579cd24ffbd730560a56c5e6b93986d35 (patch) | |
tree | 9ca4fccc48a7e3fc350c1427b4946e347432571c /src/generate_html.rs | |
parent | df637c29dca6246114621692bdeb36ad31cc9458 (diff) | |
download | toaster-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.rs | 18 |
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>"); }, |