Center images when they are the only contents in a paragraph.
Some checks failed
format Build format has succeeded
clippy Build clippy has failed
rust-test Build rust-test has succeeded
build Build build has succeeded

This commit is contained in:
Tom Alexander 2025-02-22 13:15:58 -05:00
parent c371b999d5
commit ae6f18d19c
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
4 changed files with 43 additions and 5 deletions

View File

@ -9,8 +9,9 @@
--blog-post-background-color: #0a0a0a; --blog-post-background-color: #0a0a0a;
--src-font-family: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, --src-font-family:
Consolas, "DejaVu Sans Mono", monospace; ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas,
"DejaVu Sans Mono", monospace;
--src-block-background-color: #141414; --src-block-background-color: #141414;
--src-block-border-color: #84828f; --src-block-border-color: #84828f;
@ -55,8 +56,9 @@
body { body {
color: var(--site-text-color); color: var(--site-text-color);
background-color: var(--site-background-color); background-color: var(--site-background-color);
font-family: source-sans-pro, Seravek, "Gill Sans Nova", Ubuntu, Calibri, font-family:
"DejaVu Sans", sans-serif; source-sans-pro, Seravek, "Gill Sans Nova", Ubuntu, Calibri, "DejaVu Sans",
sans-serif;
a:link, a:link,
a:visited { a:visited {
@ -146,6 +148,10 @@ body {
p { p {
margin: 1rem 0; margin: 1rem 0;
&.image {
text-align: center;
}
} }
.src_block { .src_block {

View File

@ -1,3 +1,3 @@
<p>{#.children} <p class="{?.is_single_image}image{/.is_single_image}">{#.children}
{>object/} {>object/}
{/.children}</p> {/.children}</p>

View File

@ -12,6 +12,7 @@ use super::RenderObject;
#[serde(rename = "paragraph")] #[serde(rename = "paragraph")]
pub(crate) struct RenderParagraph { pub(crate) struct RenderParagraph {
children: Vec<RenderObject>, children: Vec<RenderObject>,
is_single_image: bool,
post_blank: organic::types::PostBlank, post_blank: organic::types::PostBlank,
} }
@ -26,6 +27,7 @@ render!(RenderParagraph, IParagraph, original, render_context, {
Ok(RenderParagraph { Ok(RenderParagraph {
children, children,
is_single_image: original.is_single_image(),
post_blank: original.post_blank, post_blank: original.post_blank,
}) })
}); });

View File

@ -1,3 +1,5 @@
use std::any::Any;
use super::macros::intermediate; use super::macros::intermediate;
use super::IObject; use super::IObject;
use crate::error::CustomError; use crate::error::CustomError;
@ -41,4 +43,32 @@ impl IParagraph {
post_blank, post_blank,
}) })
} }
/// Checks if the paragraph contains nothing but a single image.
///
/// When this happens, we want to center the image.
pub(crate) fn is_single_image(&self) -> bool {
let num_images = self
.children
.iter()
.filter(|c| match c {
IObject::RegularLink(iregular_link) => match &iregular_link.target {
super::LinkTarget::Image { src, alt } => true,
_ => false,
},
_ => false,
})
.count();
num_images == 1
&& self.children.iter().all(|c| match c {
IObject::RegularLink(iregular_link) => match &iregular_link.target {
super::LinkTarget::Image { src, alt } => true,
_ => false,
},
IObject::PlainText(iplain_text) => {
iplain_text.source.chars().all(|c| c.is_ascii_whitespace())
}
_ => false,
})
}
} }