support per-post theme_config in custom metadata
This commit is contained in:
parent
1183250d3b
commit
d6b479ec15
|
@ -71,7 +71,9 @@ pub struct Post {
|
||||||
// We keep the original content here
|
// We keep the original content here
|
||||||
// so that we could make changes to the Markdown parser
|
// so that we could make changes to the Markdown parser
|
||||||
// in the future; we won't be stuck with a parsed version
|
// in the future; we won't be stuck with a parsed version
|
||||||
pub content: String
|
pub content: String,
|
||||||
|
// Some arbitrary data that could be used by the theme
|
||||||
|
pub theme_config: Option<serde_json::Value>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Post {
|
impl Post {
|
||||||
|
|
|
@ -94,7 +94,8 @@ struct PostContext {
|
||||||
title: String,
|
title: String,
|
||||||
url: String,
|
url: String,
|
||||||
timestamp: u64,
|
timestamp: u64,
|
||||||
content: String
|
content: String,
|
||||||
|
theme_config: Option<serde_json::Value>
|
||||||
}
|
}
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
|
@ -228,7 +229,8 @@ pub async fn render_post(url: Url, post: blog::Post) -> MyResult<String> {
|
||||||
title: post.title,
|
title: post.title,
|
||||||
url: post.url,
|
url: post.url,
|
||||||
timestamp: post.timestamp,
|
timestamp: post.timestamp,
|
||||||
content: post_cache.content
|
content: post_cache.content,
|
||||||
|
theme_config: post.theme_config
|
||||||
};
|
};
|
||||||
|
|
||||||
HANDLEBARS.render("post.hbs", &context)
|
HANDLEBARS.render("post.hbs", &context)
|
||||||
|
|
|
@ -96,6 +96,8 @@ struct CustomMetadata {
|
||||||
// `unlist` takes precedence over this alias
|
// `unlist` takes precedence over this alias
|
||||||
unlisted: Option<bool>,
|
unlisted: Option<bool>,
|
||||||
url: Option<String>,
|
url: Option<String>,
|
||||||
|
// Same as Post.theme_config
|
||||||
|
theme_config: Option<serde_json::Value>,
|
||||||
timestamp: Option<String> // Should be something `js_sys::Date::parse` could handle
|
timestamp: Option<String> // Should be something `js_sys::Date::parse` could handle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,11 +189,13 @@ async fn create_or_update_post(req: Request, url: Url) -> MyResult<Response> {
|
||||||
let text = data.items[0].content.text.clone();
|
let text = data.items[0].content.text.clone();
|
||||||
let title = data.items[0].content.title.clone();
|
let title = data.items[0].content.title.clone();
|
||||||
let (custom_metadata, text) = parse_custom_metadata_from_content(text);
|
let (custom_metadata, text) = parse_custom_metadata_from_content(text);
|
||||||
|
let theme_config = custom_metadata.as_ref().and_then(|it| it.theme_config.clone());
|
||||||
let metadata = build_metadata(custom_metadata, &uuid, &title);
|
let metadata = build_metadata(custom_metadata, &uuid, &title);
|
||||||
let post = match blog::Post::find_by_uuid(&uuid).await {
|
let post = match blog::Post::find_by_uuid(&uuid).await {
|
||||||
Ok(mut post) => {
|
Ok(mut post) => {
|
||||||
post.content = text;
|
post.content = text;
|
||||||
post.title = title;
|
post.title = title;
|
||||||
|
post.theme_config = theme_config;
|
||||||
|
|
||||||
// Update metadata if custom ones are present
|
// Update metadata if custom ones are present
|
||||||
if metadata.has_custom_url {
|
if metadata.has_custom_url {
|
||||||
|
@ -210,7 +214,8 @@ async fn create_or_update_post(req: Request, url: Url) -> MyResult<Response> {
|
||||||
uuid: uuid,
|
uuid: uuid,
|
||||||
title: title,
|
title: title,
|
||||||
content: text,
|
content: text,
|
||||||
timestamp: metadata.timestamp
|
timestamp: metadata.timestamp,
|
||||||
|
theme_config: theme_config
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue