yggdrasil/components/post/
post_cover.rs1use dioxus::prelude::*;
7
8#[component]
17pub fn PostCover(src: String) -> Element {
18 let ar_style = {
20 #[cfg_attr(not(feature = "server"), allow(unused_mut))]
21 let mut s = String::new();
22 #[cfg(feature = "server")]
23 {
24 if let Some(rel) = src
25 .strip_prefix("/uploads/")
26 .map(|p| p.split('?').next().unwrap_or(p))
27 {
28 if let Some((w, h)) = crate::api::image::get_image_dimensions(rel) {
29 s = format!("--ar:{} / {};", w, h);
31 }
32 }
33 }
34 s
35 };
36
37 let placeholder_src = if src.contains('?') {
39 format!("{}&w=20", src.split('?').next().unwrap_or(&src))
40 } else {
41 format!("{}?w=20", src)
42 };
43 let full_src = if src.contains('?') {
44 format!("{}&w=1200", src.split('?').next().unwrap_or(&src))
45 } else {
46 format!("{}?w=1200", src)
47 };
48
49 rsx! {
50 figure { class: "entry-cover",
51 span {
52 class: "blur-img entry-cover-blur lightbox-single",
53 style: "{ar_style}",
54 img {
55 class: "blur-img-placeholder",
56 src: "{placeholder_src}",
57 alt: "封面图片",
58 }
59 img {
60 class: "blur-img-full",
61 "data-src": "{full_src}",
62 alt: "封面图片",
63 }
64 }
65 }
66 }
67}