diff options
| author | gennyble <gen@nyble.dev> | 2026-09-30 17:24:13 -0500 |
|---|---|---|
| committer | gennyble <gen@nyble.dev> | 2026-09-30 17:24:13 -0500 |
| commit | 8051245952599ce8863fc072dc86034dcfe0d4b8 (patch) | |
| tree | ea4d6668d81771e97504344e7ad1f7b04b813c76 /splorm/src/handler | |
| parent | 6f24a05446cdd98cf1c0371af5852e6d0f12c8eb (diff) | |
use text as <head><title>
Diffstat (limited to 'splorm/src/handler')
| -rw-r--r-- | splorm/src/handler/quark/markup.rs | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/splorm/src/handler/quark/markup.rs b/splorm/src/handler/quark/markup.rs index c6cea04..1f01bc8 100644 --- a/splorm/src/handler/quark/markup.rs +++ b/splorm/src/handler/quark/markup.rs @@ -22,7 +22,8 @@ pub struct PageTemplate<'r> { pub settings: &'r Settings, wikarden: &'r Wikarden, - pub title: &'r str, + pub head_title: &'r str, + pub page_title: &'r str, pub page: &'r str, pub with_tools: bool, pub can_be_deleted: bool, @@ -36,7 +37,8 @@ impl<'r> PageTemplate<'r> { Self { settings, wikarden, - title: Self::no_section(page), + head_title: Self::no_section(page), + page_title: Self::no_section(page), page, with_tools: false, can_be_deleted: false, @@ -50,8 +52,12 @@ impl<'r> PageTemplate<'r> { } } - pub fn set_title(&mut self, title: &'r str) { - self.title = title; + pub fn set_head_title(&mut self, title: &'r str) { + self.head_title = title; + } + + pub fn set_page_title(&mut self, title: &'r str) { + self.page_title = title; } pub fn set_with_tools(mut self, flag: bool) -> Self { @@ -65,8 +71,8 @@ impl<'r> PageTemplate<'r> { } fn apply_title(&self, template: &mut Document) { - template.set("title", self.title); - template.set("page-title", self.title); + template.set("title", self.head_title); + template.set("page-title", self.page_title); } fn apply_tools_flags(&self, template: &mut Document) { @@ -118,7 +124,8 @@ impl<'r> PageTemplate<'r> { let render = render(&am.to_string(), true); if let Some(title) = render.extracted_title.as_ref() { - self.set_title(title); + self.set_head_title(&title.text); + self.set_page_title(&title.html); } self.apply_title(&mut template); @@ -141,8 +148,13 @@ impl<'r> PageTemplate<'r> { } } +pub struct ExtractedTitle { + pub html: String, + pub text: String, +} + pub struct RenderResult { - pub extracted_title: Option<String>, + pub extracted_title: Option<ExtractedTitle>, pub body: String, } @@ -159,7 +171,11 @@ pub fn render(content: &str, extract_title: bool) -> RenderResult { let title = if extract_title && let Some(Block::Header { .. }) = blocks.peek() { match blocks.next() { Some(Block::Header { text, .. }) => { - Some(lineup::process(text, resolver.clone()).html()) + let parsed = lineup::process(text, resolver.clone()); + let text = parsed.as_text(); + let html = parsed.into_html(); + + Some(ExtractedTitle { html, text }) } _ => None, } @@ -172,11 +188,11 @@ pub fn render(content: &str, extract_title: bool) -> RenderResult { match block { Block::Header { level, text } => { let rendered = lineup::process(text, resolver.clone()); - string.push_str(&format!("<h{level}>{}</h{level}>\n", rendered.html())); + string.push_str(&format!("<h{level}>{}</h{level}>\n", rendered.into_html())); } Block::Paragraph(str) => { let rendered = markup::lineup::process(str, resolver.clone()); - string.push_str(&format!("<p>{}</p>\n", rendered.html())); + string.push_str(&format!("<p>{}</p>\n", rendered.into_html())); } Block::Code { language, lines } => { let lang_tag = match language { @@ -190,7 +206,7 @@ pub fn render(content: &str, extract_title: bool) -> RenderResult { string.push_str("<ul>\n"); items.iter().for_each(|li| { let rendered = markup::lineup::process(li.trim(), resolver.clone()); - string.push_str(&format!("\t<li>{}</li>\n", rendered.html())); + string.push_str(&format!("\t<li>{}</li>\n", rendered.into_html())); }); string.push_str("</ul>"); } |
