···21212222[dependencies]
2323# Gemini
2424-germ = { version = "0.4.0", features = ["ast", "meta"] }
2424+germ = { version = "0.4.1", features = ["ast", "meta"] }
25252626# HTTP
2727actix-web = "4.7.0"
+16
Configuration.md
···163163PRIMARY_COLOUR=red
164164PRIMARY_COLOUR=#ff0000
165165```
166166+167167+## `CONDENSE_LINKS_AT_HEADING`
168168+169169+This configuration option is similar to `CONDENSE_LINKS`, but only condenses
170170+links found under certain headings.
171171+172172+For instance, I condense the few links I have on my index page under the
173173+"# Fuwn[.me]" heading, and I condense my quick links/navigation panel under the
174174+"## Quick Links" heading.
175175+176176+This way, I don't accidentally condense say my entire sitemap, which could be
177177+hundreds of links long, but I do condense my quick links on every page.
178178+179179+```dotenv
180180+CONDENSE_LINKS_AT_HEADINGS="## Quick Links,# Fuwn[.me]"
181181+```
+16-1
src/html.rs
···52525353 links.contains(&url.path().to_string()) || links.contains(&"*".to_string())
5454 };
5555+ let mut in_condense_links_flag_trap = true;
5656+ let condensible_headings_value =
5757+ var("CONDENSE_LINKS_AT_HEADINGS").unwrap_or_default();
5858+ let condensible_headings =
5959+ condensible_headings_value.split(',').collect::<Vec<_>>();
55605661 for node in ast {
5757- if previous_link && (!matches!(node, Node::Link { .. }) || !condense_links)
6262+ if condensible_headings.contains(&node.to_gemtext().as_str()) {
6363+ in_condense_links_flag_trap = true;
6464+ }
6565+6666+ if previous_link
6767+ && (!matches!(node, Node::Link { .. })
6868+ || (!condense_links && !in_condense_links_flag_trap))
5869 {
5970 html.push_str("\n</p>");
6071 previous_link = false;
···173184 ));
174185 }
175186 Node::Heading { level, text } => {
187187+ if !condensible_headings.contains(&node.to_gemtext().as_str()) {
188188+ in_condense_links_flag_trap = false;
189189+ }
190190+176191 if title.is_empty() && *level == 1 {
177192 title = safe(&text.clone()).to_string();
178193 }