fix: preserve data URI in img src during markdown rendering
ammonia's default url_schemes whitelist excludes 'data', causing data:image/* URLs to be stripped from img src attributes. Add 'data' to allowed schemes. Also skip data: URIs in JS thumbnail logic.
This commit is contained in:
parent
3974856f3d
commit
42b39266a6
@ -15,6 +15,7 @@ pub fn clean_html(input: &str) -> String {
|
|||||||
])
|
])
|
||||||
.add_tags(&["details", "summary"])
|
.add_tags(&["details", "summary"])
|
||||||
.url_relative(ammonia::UrlRelative::PassThrough)
|
.url_relative(ammonia::UrlRelative::PassThrough)
|
||||||
|
.add_url_schemes(&["data"])
|
||||||
.add_tag_attributes("a", &["class", "aria-hidden", "aria-label"])
|
.add_tag_attributes("a", &["class", "aria-hidden", "aria-label"])
|
||||||
.add_tag_attributes("span", &["class"])
|
.add_tag_attributes("span", &["class"])
|
||||||
.add_tag_attributes("h1", &["id", "class"])
|
.add_tag_attributes("h1", &["id", "class"])
|
||||||
@ -384,4 +385,11 @@ mod tests {
|
|||||||
assert!(result.html.contains("<pre><code>"));
|
assert!(result.html.contains("<pre><code>"));
|
||||||
assert!(result.html.contains("main"));
|
assert!(result.html.contains("main"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn render_markdown_data_uri_image() {
|
||||||
|
let result = render_markdown_enhanced("");
|
||||||
|
assert!(result.html.contains("data:image/svg+xml"), "data URI should be preserved in img src, got: {}", result.html);
|
||||||
|
assert!(result.html.contains("alt=\"alt\""));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,6 +46,10 @@ pub fn PostContent(content_html: String) -> Element {
|
|||||||
let original_src = img_element.src();
|
let original_src = img_element.src();
|
||||||
let alt = img_element.alt();
|
let alt = img_element.alt();
|
||||||
|
|
||||||
|
if original_src.starts_with("data:") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Replace src with thumbnail version (add ?w=800)
|
// Replace src with thumbnail version (add ?w=800)
|
||||||
let thumb_src = if original_src.contains('?') {
|
let thumb_src = if original_src.contains('?') {
|
||||||
format!("{}&w=800", original_src)
|
format!("{}&w=800", original_src)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user