mirror of
https://github.com/zyllian/webdog.git
synced 2025-05-10 10:36:39 -07:00
update embeds for the blog and add them to images
This commit is contained in:
parent
35ac34b69c
commit
750c0c501f
3 changed files with 73 additions and 17 deletions
26
src/blog.rs
26
src/blog.rs
|
@ -1,7 +1,7 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
resource::{ResourceBuilderConfig, ResourceMetadata, ResourceMethods},
|
resource::{EmbedMetadata, ResourceBuilderConfig, ResourceMetadata, ResourceMethods},
|
||||||
Site, SiteConfig,
|
Site, SiteConfig,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -84,19 +84,15 @@ impl ResourceMethods<BlogPostTemplateData> for ResourceMetadata<BlogPostMetadata
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_head_data(&self, site_config: &SiteConfig) -> eyre::Result<String> {
|
fn get_head_data(&self, site_config: &SiteConfig) -> eyre::Result<String> {
|
||||||
// TODO: update this so we're not just doing raw html injection lmao
|
Ok(EmbedMetadata {
|
||||||
Ok(format!(
|
title: self.title.clone(),
|
||||||
r#"
|
site_name: &site_config.title,
|
||||||
<meta property="og:site_name" content="{}">
|
description: Some(self.inner.desc.clone()),
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
image: Some(self.inner.get_header_image(site_config)?),
|
||||||
<meta name="twitter:title" content="{}">
|
url: None,
|
||||||
<meta name="twitter:image" content="{}">
|
theme_color: "rgb(255, 196, 252)".to_string(),
|
||||||
<meta name="og:description" content="{}">
|
large_image: true,
|
||||||
"#,
|
}
|
||||||
site_config.title,
|
.build())
|
||||||
self.title,
|
|
||||||
self.inner.get_header_image(site_config)?,
|
|
||||||
self.inner.desc,
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
resource::{ResourceBuilderConfig, ResourceMetadata, ResourceMethods},
|
resource::{EmbedMetadata, ResourceBuilderConfig, ResourceMetadata, ResourceMethods},
|
||||||
Site, SiteConfig,
|
Site, SiteConfig,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -37,6 +37,12 @@ pub struct ImageMetadata {
|
||||||
pub file: String,
|
pub file: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ImageMetadata {
|
||||||
|
fn get_image_url(&self, site_config: &SiteConfig) -> eyre::Result<String> {
|
||||||
|
Ok(site_config.cdn_url(&self.file)?.to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Template data for a specific image.
|
/// Template data for a specific image.
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
pub struct ImageTemplateData {
|
pub struct ImageTemplateData {
|
||||||
|
@ -55,7 +61,20 @@ impl ResourceMethods<ImageTemplateData> for ResourceMetadata<ImageMetadata> {
|
||||||
site_config: &SiteConfig,
|
site_config: &SiteConfig,
|
||||||
) -> eyre::Result<ImageTemplateData> {
|
) -> eyre::Result<ImageTemplateData> {
|
||||||
Ok(ImageTemplateData {
|
Ok(ImageTemplateData {
|
||||||
src: site_config.cdn_url(&self.inner.file)?.to_string(),
|
src: self.inner.get_image_url(site_config)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_head_data(&self, site_config: &SiteConfig) -> eyre::Result<String> {
|
||||||
|
Ok(EmbedMetadata {
|
||||||
|
title: self.title.clone(),
|
||||||
|
site_name: &site_config.title,
|
||||||
|
description: self.inner.desc.clone(),
|
||||||
|
image: Some(self.inner.get_image_url(site_config)?),
|
||||||
|
url: None,
|
||||||
|
theme_color: "rgb(255, 196, 252)".to_string(),
|
||||||
|
large_image: true,
|
||||||
|
}
|
||||||
|
.build())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,47 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// struct for adding custom meta content embeds
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct EmbedMetadata<'s> {
|
||||||
|
pub title: String,
|
||||||
|
pub site_name: &'s str,
|
||||||
|
pub description: Option<String>,
|
||||||
|
pub url: Option<String>,
|
||||||
|
pub image: Option<String>,
|
||||||
|
pub theme_color: String,
|
||||||
|
pub large_image: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'s> EmbedMetadata<'s> {
|
||||||
|
/// builds the embed html tags
|
||||||
|
pub fn build(self) -> String {
|
||||||
|
let mut s = format!(r#"<meta content="{}" property="og:title">"#, self.title);
|
||||||
|
s = format!(
|
||||||
|
r#"{s}<meta content="{}" property="og:site_name">"#,
|
||||||
|
self.site_name
|
||||||
|
);
|
||||||
|
if let Some(description) = self.description {
|
||||||
|
s = format!(r#"{s}<meta content="{description}" property="og:description">"#);
|
||||||
|
}
|
||||||
|
if let Some(url) = self.url {
|
||||||
|
s = format!(r#"{s}<meta content="{url}" property="og:url">"#);
|
||||||
|
}
|
||||||
|
if let Some(image) = self.image {
|
||||||
|
s = format!(r#"{s}<meta content="{image}" property="og:image">"#);
|
||||||
|
}
|
||||||
|
s = format!(
|
||||||
|
r#"{s}<meta content="{}" name="theme-color">"#,
|
||||||
|
self.theme_color
|
||||||
|
);
|
||||||
|
if self.large_image {
|
||||||
|
s = format!(r#"{s}<meta name="twitter:card" content="summary_large_image">"#);
|
||||||
|
}
|
||||||
|
|
||||||
|
s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
struct ResourceListTemplateData<'r, M, E> {
|
struct ResourceListTemplateData<'r, M, E> {
|
||||||
resources: Vec<&'r ResourceTemplateData<'r, M, E>>,
|
resources: Vec<&'r ResourceTemplateData<'r, M, E>>,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue