Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5eb362c87 | ||
|
|
7f10ba20d3 |
Generated
+1
-1
@@ -2948,7 +2948,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "portal"
|
name = "portal"
|
||||||
version = "0.3.18"
|
version = "0.3.19"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "portal"
|
name = "portal"
|
||||||
version = "0.3.18"
|
version = "0.3.19"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
|||||||
@@ -199,6 +199,18 @@ pub fn render_inline_markdown(text: &str) -> String {
|
|||||||
in_link -= 1;
|
in_link -= 1;
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
// Images take the same gate as links: https or same-origin
|
||||||
|
// only - no data:, no plain http.
|
||||||
|
Event::Start(Tag::Image { dest_url, .. })
|
||||||
|
if !(dest_url.starts_with("https://") || dest_url.starts_with('/')) =>
|
||||||
|
{
|
||||||
|
in_link += 1;
|
||||||
|
None
|
||||||
|
}
|
||||||
|
Event::End(TagEnd::Image) if in_link > 0 => {
|
||||||
|
in_link -= 1;
|
||||||
|
None
|
||||||
|
}
|
||||||
other => Some(other),
|
other => Some(other),
|
||||||
});
|
});
|
||||||
let mut out = String::new();
|
let mut out = String::new();
|
||||||
@@ -2026,6 +2038,15 @@ alternatives:
|
|||||||
fn markdown_drops_html_and_unsafe_links() {
|
fn markdown_drops_html_and_unsafe_links() {
|
||||||
assert_eq!(render_inline_markdown("x <script>y</script> z"), "x y z");
|
assert_eq!(render_inline_markdown("x <script>y</script> z"), "x y z");
|
||||||
assert_eq!(render_inline_markdown("[bad](javascript:alert(1))"), "bad");
|
assert_eq!(render_inline_markdown("[bad](javascript:alert(1))"), "bad");
|
||||||
|
assert_eq!(
|
||||||
|
render_inline_markdown(""),
|
||||||
|
"<img src=\"https://x.no/a.jpg\" alt=\"site\" />"
|
||||||
|
);
|
||||||
|
assert_eq!(render_inline_markdown(""), "");
|
||||||
|
assert_eq!(
|
||||||
|
render_inline_markdown(""),
|
||||||
|
"<img src=\"/images/a.jpg\" alt=\"local\" />"
|
||||||
|
);
|
||||||
assert_eq!(render_inline_markdown("[ok](/shape)"), "<a href=\"/shape\">ok</a>");
|
assert_eq!(render_inline_markdown("[ok](/shape)"), "<a href=\"/shape\">ok</a>");
|
||||||
assert_eq!(render_inline_markdown("[mail](mailto:bl@uhhm.no)"), "<a href=\"mailto:bl@uhhm.no\">mail</a>");
|
assert_eq!(render_inline_markdown("[mail](mailto:bl@uhhm.no)"), "<a href=\"mailto:bl@uhhm.no\">mail</a>");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -536,6 +536,18 @@ main.not-found {
|
|||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* images inside markdown descriptions: full-width figures in the
|
||||||
|
card's flow, framed like the rest of the press sheet */
|
||||||
|
.alt-description img,
|
||||||
|
.item-card-description img,
|
||||||
|
.feature p img {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0.6rem 0 0.2rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
border: 0.06rem solid var(--line);
|
||||||
|
}
|
||||||
|
|
||||||
.alt-description code,
|
.alt-description code,
|
||||||
.feature p code {
|
.feature p code {
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
|
|||||||
Reference in New Issue
Block a user