From f25e3befc4636cd96f2a53a93e60296b465b766a Mon Sep 17 00:00:00 2001 From: Fuwn Date: Wed, 19 Jun 2024 07:52:02 +0000 Subject: feat: CONDENSE_LINKS_AT_HEADINGS configuration option --- Cargo.toml | 2 +- Configuration.md | 16 ++++++++++++++++ src/html.rs | 17 ++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index cbd7623..2c3d80e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ opt-level = 3 [dependencies] # Gemini -germ = { version = "0.4.0", features = ["ast", "meta"] } +germ = { version = "0.4.1", features = ["ast", "meta"] } # HTTP actix-web = "4.7.0" diff --git a/Configuration.md b/Configuration.md index f58d2c7..8a15428 100644 --- a/Configuration.md +++ b/Configuration.md @@ -163,3 +163,19 @@ PRIMARY_COLOUR=var(--base09) PRIMARY_COLOUR=red PRIMARY_COLOUR=#ff0000 ``` + +## `CONDENSE_LINKS_AT_HEADING` + +This configuration option is similar to `CONDENSE_LINKS`, but only condenses +links found under certain headings. + +For instance, I condense the few links I have on my index page under the +"# Fuwn[.me]" heading, and I condense my quick links/navigation panel under the +"## Quick Links" heading. + +This way, I don't accidentally condense say my entire sitemap, which could be +hundreds of links long, but I do condense my quick links on every page. + +```dotenv +CONDENSE_LINKS_AT_HEADINGS="## Quick Links,# Fuwn[.me]" +``` diff --git a/src/html.rs b/src/html.rs index 07d979e..ae7dc41 100644 --- a/src/html.rs +++ b/src/html.rs @@ -52,9 +52,20 @@ pub fn from_gemini( links.contains(&url.path().to_string()) || links.contains(&"*".to_string()) }; + let mut in_condense_links_flag_trap = true; + let condensible_headings_value = + var("CONDENSE_LINKS_AT_HEADINGS").unwrap_or_default(); + let condensible_headings = + condensible_headings_value.split(',').collect::>(); for node in ast { - if previous_link && (!matches!(node, Node::Link { .. }) || !condense_links) + if condensible_headings.contains(&node.to_gemtext().as_str()) { + in_condense_links_flag_trap = true; + } + + if previous_link + && (!matches!(node, Node::Link { .. }) + || (!condense_links && !in_condense_links_flag_trap)) { html.push_str("\n

"); previous_link = false; @@ -173,6 +184,10 @@ pub fn from_gemini( )); } Node::Heading { level, text } => { + if !condensible_headings.contains(&node.to_gemtext().as_str()) { + in_condense_links_flag_trap = false; + } + if title.is_empty() && *level == 1 { title = safe(&text.clone()).to_string(); } -- cgit v1.2.3