From 008193f673ce7f19866c6906a5679e297b9e9162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maro=C5=A1=20Grego?= Date: Sun, 23 May 2021 22:25:04 +0200 Subject: [PATCH] Add alternative_paths variable to pages --- src/page.rs | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/page.rs b/src/page.rs index 7f1fbb4..7dfe965 100644 --- a/src/page.rs +++ b/src/page.rs @@ -34,6 +34,8 @@ pub struct Page<'p> { #[serde(borrow, default)] path: Ancestors<'p>, #[serde(default)] + alternative_paths: Cow<'p, [&'p str]>, + #[serde(default)] #[ramhorns(skip)] pub(crate) weight: i64, #[serde(borrow, default)] @@ -281,7 +283,7 @@ impl<'p> Page<'p> { /// they will be rendered to. #[inline] pub fn prepare(mut pages: Vec, config: &Config) -> Result> { - let output = Path::new(config.output_dir.as_ref()); + let output_dir = Path::new(config.output_dir.as_ref()); for i in 0..pages.len() { let page = &pages[i]; @@ -313,11 +315,16 @@ impl<'p> Page<'p> { let page = &pages[i]; if page.is_section || !page.pictures.is_empty() { - let mut path = output.join(page.path.as_ref()); + let mut path = output_dir.join(page.path.as_ref()); path.push(page.slug.as_ref()); create_dir_all(path)?; } + for path in page.alternative_paths.iter() { + let path = output_dir.join(path); + create_dir_all(path)?; + } + // Assign a unique identifier pages[i].id = i; } @@ -377,7 +384,8 @@ impl<'p> Page<'p> { classification: &Classification<'p, '_>, rendered: &MutSet, ) -> Result { - let mut output = Path::new(config.output_dir.as_ref()).join(self.path.as_ref()); + let output_dir = Path::new(config.output_dir.as_ref()); + let mut output = output_dir.join(self.path.as_ref()); output.push(self.slug.as_ref()); if self.is_section { output.push("index"); @@ -399,7 +407,7 @@ impl<'p> Page<'p> { let by = self.paginate_by.map(NonZeroUsize::get).unwrap_or(0); if by > 0 && self.pages.len() > by { let (start, end) = (self.pages.start, self.pages.end); - page.render_paginated(start, end, by, &mut output, &template, rendered) + page.render_paginated(start, end, by, &mut output, &template, rendered)? } else if !self.pictures.is_empty() { render(template, &output, &page, rendered)?; @@ -428,10 +436,16 @@ impl<'p> Page<'p> { render(template, &output, &page, rendered)?; output.pop(); } - Ok(()) } else { - render(template, output, &page, rendered) + render(template, output, &page, rendered)?; } + + for path in self.alternative_paths.iter() { + let mut output = output_dir.join(path); + output.push("index.html"); + render(template, output, &page, rendered)?; + } + Ok(()) } }