From 62ffc763761f39ca5a2e469ff680ee0c40746e7a Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Fri, 27 Oct 2023 20:12:56 -0400 Subject: [PATCH] Add basic templates for plain list. --- .../templates/html/plain_list.dust | 7 ++++- .../templates/html/plain_list_item.dust | 6 ++++ src/context/mod.rs | 1 + src/context/plain_list.rs | 30 +++++++++++++++++-- src/context/plain_list_item.rs | 23 ++++++++++++++ src/intermediate/mod.rs | 2 ++ src/intermediate/plain_list.rs | 19 ++++++++++-- src/intermediate/plain_list_item.rs | 15 ++++++++++ 8 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 default_environment/templates/html/plain_list_item.dust create mode 100644 src/context/plain_list_item.rs create mode 100644 src/intermediate/plain_list_item.rs diff --git a/default_environment/templates/html/plain_list.dust b/default_environment/templates/html/plain_list.dust index 56e8975..fdc240e 100644 --- a/default_environment/templates/html/plain_list.dust +++ b/default_environment/templates/html/plain_list.dust @@ -1 +1,6 @@ -plain_list +{@select key=.list_type} + {@eq value="unordered"}{/eq} + {@eq value="ordered"}
    {#.children}{>plain_list_item/}{/.children}
{/eq} + {@eq value="descriptive"}
{#.children}{>plain_list_item/}{/.children}
{/eq} + {@none}{!TODO: make this panic!}ERROR: Unrecognized list type {.list_type}.{/none} +{/select} diff --git a/default_environment/templates/html/plain_list_item.dust b/default_environment/templates/html/plain_list_item.dust new file mode 100644 index 0000000..2e0c0e8 --- /dev/null +++ b/default_environment/templates/html/plain_list_item.dust @@ -0,0 +1,6 @@ +{@select key=list_type} + {@eq value="unordered"}
  • {/eq} + {@eq value="ordered"}
  • {/eq} + {@eq value="descriptive"}
    {/eq} + {@none}{!TODO: make this panic!}ERROR: Unrecognized list type {.list_type}.{/none} +{/select} diff --git a/src/context/mod.rs b/src/context/mod.rs index 7c50714..25ae64c 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -36,6 +36,7 @@ mod org_macro; mod paragraph; mod plain_link; mod plain_list; +mod plain_list_item; mod plain_text; mod planning; mod property_drawer; diff --git a/src/context/plain_list.rs b/src/context/plain_list.rs index 8c239f4..b6b61b9 100644 --- a/src/context/plain_list.rs +++ b/src/context/plain_list.rs @@ -6,10 +6,15 @@ use crate::config::Config; use crate::error::CustomError; use crate::intermediate::IPlainList; +use super::plain_list_item::RenderPlainListItem; + #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "plain_list")] -pub(crate) struct RenderPlainList {} +pub(crate) struct RenderPlainList { + list_type: String, + children: Vec, +} impl RenderPlainList { pub(crate) fn new( @@ -18,6 +23,27 @@ impl RenderPlainList { output_file: &Path, original: &IPlainList, ) -> Result { - Ok(RenderPlainList {}) + let list_type = match original.list_type { + organic::types::PlainListType::Unordered => "unordered".to_owned(), + organic::types::PlainListType::Ordered => "ordered".to_owned(), + organic::types::PlainListType::Descriptive => "descriptive".to_owned(), + }; + let children = { + let mut ret = Vec::new(); + for obj in original.children.iter() { + ret.push(RenderPlainListItem::new( + config, + &output_directory, + &output_file, + obj, + )?); + } + ret + }; + + Ok(RenderPlainList { + list_type, + children, + }) } } diff --git a/src/context/plain_list_item.rs b/src/context/plain_list_item.rs new file mode 100644 index 0000000..b99723c --- /dev/null +++ b/src/context/plain_list_item.rs @@ -0,0 +1,23 @@ +use std::path::Path; + +use serde::Serialize; + +use crate::config::Config; +use crate::error::CustomError; +use crate::intermediate::IPlainListItem; + +#[derive(Debug, Serialize)] +#[serde(tag = "type")] +#[serde(rename = "plain_list_item")] +pub(crate) struct RenderPlainListItem {} + +impl RenderPlainListItem { + pub(crate) fn new( + config: &Config, + output_directory: &Path, + output_file: &Path, + original: &IPlainListItem, + ) -> Result { + Ok(RenderPlainListItem {}) + } +} diff --git a/src/intermediate/mod.rs b/src/intermediate/mod.rs index af8cb43..ac1f411 100644 --- a/src/intermediate/mod.rs +++ b/src/intermediate/mod.rs @@ -37,6 +37,7 @@ mod page; mod paragraph; mod plain_link; mod plain_list; +mod plain_list_item; mod plain_text; mod planning; mod property_drawer; @@ -98,6 +99,7 @@ pub(crate) use page::BlogPostPage; pub(crate) use paragraph::IParagraph; pub(crate) use plain_link::IPlainLink; pub(crate) use plain_list::IPlainList; +pub(crate) use plain_list_item::IPlainListItem; pub(crate) use plain_text::IPlainText; pub(crate) use planning::IPlanning; pub(crate) use property_drawer::IPropertyDrawer; diff --git a/src/intermediate/plain_list.rs b/src/intermediate/plain_list.rs index 3b1eac8..2065403 100644 --- a/src/intermediate/plain_list.rs +++ b/src/intermediate/plain_list.rs @@ -1,15 +1,30 @@ use crate::error::CustomError; use super::registry::Registry; +use super::IPlainListItem; #[derive(Debug)] -pub(crate) struct IPlainList {} +pub(crate) struct IPlainList { + pub(crate) list_type: organic::types::PlainListType, + pub(crate) children: Vec, +} impl IPlainList { pub(crate) async fn new<'parse>( registry: &mut Registry<'parse>, plain_list: &organic::types::PlainList<'parse>, ) -> Result { - Ok(IPlainList {}) + let children = { + let mut ret = Vec::new(); + for obj in plain_list.children.iter() { + ret.push(IPlainListItem::new(registry, obj).await?); + } + ret + }; + + Ok(IPlainList { + list_type: plain_list.list_type, + children, + }) } } diff --git a/src/intermediate/plain_list_item.rs b/src/intermediate/plain_list_item.rs new file mode 100644 index 0000000..f9cd396 --- /dev/null +++ b/src/intermediate/plain_list_item.rs @@ -0,0 +1,15 @@ +use crate::error::CustomError; + +use super::registry::Registry; + +#[derive(Debug)] +pub(crate) struct IPlainListItem {} + +impl IPlainListItem { + pub(crate) async fn new<'parse>( + registry: &mut Registry<'parse>, + plain_list_item: &organic::types::PlainListItem<'parse>, + ) -> Result { + Ok(IPlainListItem {}) + } +}