Add markdown.rs viewer

This commit is contained in:
2026-03-19 00:32:06 +08:00
parent af58582274
commit 791da004f2

49
src/viewer/markdown.rs Normal file
View File

@@ -0,0 +1,49 @@
//! Markdown 檢視器
use anyhow::Result;
pub struct MarkdownViewer {
content: Option<String>,
}
impl MarkdownViewer {
pub fn new() -> Self {
Self { content: None }
}
pub fn load(&mut self, content: &str) -> Result<String> {
self.content = Some(content.to_string());
self.render()
}
pub fn render(&self) -> Result<String> {
let content = self.content.as_ref()
.ok_or_else(|| anyhow::anyhow!("No content loaded"))?;
let parser = pulldown_cmark::Parser::new(content);
let mut html = String::new();
pulldown_cmark::html::push_html(&mut html, parser);
Ok(html)
}
pub fn get_html_template(&self) -> String {
r#"
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body { font-family: system-ui; padding: 20px; max-width: 800px; margin: 0 auto; }
pre { background: #f4f4f4; padding: 10px; border-radius: 4px; overflow-x: auto; }
code { background: #f4f4f4; padding: 2px 6px; border-radius: 3px; }
img { max-width: 100%; }
</style>
</head>
<body>
<div id="content">CONTENT_PLACEHOLDER</div>
</body>
</html>
"#.replace("CONTENT_PLACEHOLDER", &self.render().unwrap_or_default())
}
}