about summary refs log tree commit diff
path: root/splorm/src/handler
diff options
context:
space:
mode:
authorgennyble <gen@nyble.dev>2026-09-30 17:24:13 -0500
committergennyble <gen@nyble.dev>2026-09-30 17:24:13 -0500
commit8051245952599ce8863fc072dc86034dcfe0d4b8 (patch)
treeea4d6668d81771e97504344e7ad1f7b04b813c76 /splorm/src/handler
parent6f24a05446cdd98cf1c0371af5852e6d0f12c8eb (diff)
use text as <head><title>
Diffstat (limited to 'splorm/src/handler')
-rw-r--r--splorm/src/handler/quark/markup.rs40
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>");
 			}