Add markdown.rs viewer
This commit is contained in:
49
src/viewer/markdown.rs
Normal file
49
src/viewer/markdown.rs
Normal 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())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user