From d2256b8333396119ebed8aed1dd537667816fa7a Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 23 Feb 2025 12:08:43 -0500 Subject: [PATCH] Add publish filter to blog posts and pages. --- src/command/build/render.rs | 18 ++++++++++++++++-- src/intermediate/page.rs | 5 +++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/command/build/render.rs b/src/command/build/render.rs index 40451a2..b32f63f 100644 --- a/src/command/build/render.rs +++ b/src/command/build/render.rs @@ -85,7 +85,11 @@ impl SiteRenderer { pub(crate) async fn render_pages(&self, config: &Config) -> Result<(), CustomError> { let renderer_integration = self.init_renderer_integration()?; - for page in &self.pages { + for page in self.pages.iter().filter(|page| match page.natter_publish { + PublishStatus::Full => true, + PublishStatus::Unlisted => true, + PublishStatus::Unpublished => false, + }) { let output_path = self.output_directory.join(page.get_output_path()); let dependency_manager = std::sync::Arc::new(std::sync::Mutex::new(DependencyManager::new())); @@ -116,7 +120,17 @@ impl SiteRenderer { pub(crate) async fn render_blog_posts(&self, config: &Config) -> Result<(), CustomError> { let renderer_integration = self.init_renderer_integration()?; - for blog_post in &self.blog_posts { + for blog_post in self.blog_posts.iter().filter(|blog_post| { + match blog_post + .get_index_page() + .expect("Blog posts should have an index page.") + .natter_publish + { + PublishStatus::Full => true, + PublishStatus::Unlisted => true, + PublishStatus::Unpublished => false, + } + }) { for blog_post_page in &blog_post.pages { let output_path = self .output_directory diff --git a/src/intermediate/page.rs b/src/intermediate/page.rs index 6c673c5..a819f1b 100644 --- a/src/intermediate/page.rs +++ b/src/intermediate/page.rs @@ -1,10 +1,12 @@ use super::blog_post_page::get_date; +use super::blog_post_page::get_publish_status; use super::blog_post_page::get_title; use super::footnote_definition::IRealFootnoteDefinition; use super::macros::intermediate; use super::IDocumentElement; use super::IHeading; use super::ISection; +use super::PublishStatus; use crate::error::CustomError; use std::path::PathBuf; @@ -24,6 +26,8 @@ pub(crate) struct IPage { pub(crate) children: Vec, pub(crate) footnotes: Vec, + + pub(crate) natter_publish: PublishStatus, } intermediate!( @@ -69,6 +73,7 @@ intermediate!( date: get_date(original.document), children, footnotes, + natter_publish: get_publish_status(original.document).unwrap_or_default(), }) } );