mantra v0.4.1: SPA-navigated lang toggle + RU core_claim extraction

This commit is contained in:
Alexey 2026-04-24 22:31:50 +05:00
parent eebc876216
commit 301129403f
2 changed files with 15 additions and 6 deletions

View file

@ -235,7 +235,11 @@ fn parse_source(path: &Path, cycle_slug: &str) -> Result<Source> {
.map(|l| l.trim_start_matches("# ").trim().to_string()) .map(|l| l.trim_start_matches("# ").trim().to_string())
.unwrap_or_else(|| slug.clone()); .unwrap_or_else(|| slug.clone());
// Try known heading variants: EN original + RU translation batch
// used «Ключевое утверждение».
let core_claim = extract_section(&body_md, "## Core claim") let core_claim = extract_section(&body_md, "## Core claim")
.or_else(|| extract_section(&body_md, "## Ключевое утверждение"))
.or_else(|| extract_section(&body_md, "## Ключевой тезис"))
.unwrap_or_default() .unwrap_or_default()
.trim() .trim()
.replace('\n', " "); .replace('\n', " ");

View file

@ -1,6 +1,7 @@
//! Shared UI atoms. //! Shared UI atoms.
use leptos::prelude::*; use leptos::prelude::*;
use leptos_router::components::A;
use leptos_router::hooks::{use_location, use_query_map}; use leptos_router::hooks::{use_location, use_query_map};
use crate::corpus::Lang; use crate::corpus::Lang;
@ -8,6 +9,10 @@ use crate::corpus::Lang;
/// Minimal top-right language toggle. Two links; current is dimmed, /// Minimal top-right language toggle. Two links; current is dimmed,
/// the other is hot. Preserves the rest of the URL (path + remaining /// the other is hot. Preserves the rest of the URL (path + remaining
/// query params) so toggling on a deep page keeps you there. /// query params) so toggling on a deep page keeps you there.
///
/// Uses the router's `<A>` component so clicks are SPA-navigated and
/// the `use_query_map` signal updates without a page reload (Resources
/// keyed on lang re-fetch and the view re-renders in place).
#[component] #[component]
pub fn LangToggle(current: Memo<Lang>) -> impl IntoView { pub fn LangToggle(current: Memo<Lang>) -> impl IntoView {
let location = use_location(); let location = use_location();
@ -23,15 +28,15 @@ pub fn LangToggle(current: Memo<Lang>) -> impl IntoView {
view! { view! {
<nav class="lang-toggle"> <nav class="lang-toggle">
<a <A
href=move || make_href(Lang::Ru) href=move || make_href(Lang::Ru)
class:lang-active=move || current.get() == Lang::Ru attr:class=move || if current.get() == Lang::Ru { "lang-active" } else { "" }
>"ru"</a> >"ru"</A>
<span class="lang-dot">"·"</span> <span class="lang-dot">"·"</span>
<a <A
href=move || make_href(Lang::En) href=move || make_href(Lang::En)
class:lang-active=move || current.get() == Lang::En attr:class=move || if current.get() == Lang::En { "lang-active" } else { "" }
>"en"</a> >"en"</A>
</nav> </nav>
} }
} }