diff --git a/default_environment/templates/html/ast_node.dust b/default_environment/templates/html/ast_node.dust index cb3b7a9..3fef338 100644 --- a/default_environment/templates/html/ast_node.dust +++ b/default_environment/templates/html/ast_node.dust @@ -32,7 +32,8 @@ {@eq value="code"}{>code/}{/eq} {@eq value="verbatim"}{>verbatim/}{/eq} {@eq value="plain_text"}{>plain_text/}{/eq} - {@eq value="regular_link"}{>regular_link/}{/eq} + {@eq value="regular_link_anchor"}{>regular_link_anchor/}{/eq} + {@eq value="regular_link_image"}{>regular_link_image/}{/eq} {@eq value="radio_link"}{>radio_link/}{/eq} {@eq value="radio_target"}{>radio_target/}{/eq} {@eq value="plain_link"}{>plain_link/}{/eq} diff --git a/default_environment/templates/html/object.dust b/default_environment/templates/html/object.dust index 41e026a..8b15582 100644 --- a/default_environment/templates/html/object.dust +++ b/default_environment/templates/html/object.dust @@ -6,7 +6,8 @@ {@eq value="code"}{>code/}{/eq} {@eq value="verbatim"}{>verbatim/}{/eq} {@eq value="plain_text"}{>plain_text/}{/eq} - {@eq value="regular_link"}{>regular_link/}{/eq} + {@eq value="regular_link_anchor"}{>regular_link_anchor/}{/eq} + {@eq value="regular_link_image"}{>regular_link_image/}{/eq} {@eq value="radio_link"}{>radio_link/}{/eq} {@eq value="radio_target"}{>radio_target/}{/eq} {@eq value="plain_link"}{>plain_link/}{/eq} diff --git a/default_environment/templates/html/regular_link.dust b/default_environment/templates/html/regular_link_anchor.dust similarity index 100% rename from default_environment/templates/html/regular_link.dust rename to default_environment/templates/html/regular_link_anchor.dust diff --git a/default_environment/templates/html/regular_link_image.dust b/default_environment/templates/html/regular_link_image.dust new file mode 100644 index 0000000..f8b3bfd --- /dev/null +++ b/default_environment/templates/html/regular_link_image.dust @@ -0,0 +1 @@ +{.alt} diff --git a/src/context/regular_link.rs b/src/context/regular_link.rs index fc77598..fcf9602 100644 --- a/src/context/regular_link.rs +++ b/src/context/regular_link.rs @@ -3,6 +3,7 @@ use serde::Serialize; use super::render_context::RenderContext; use crate::error::CustomError; use crate::intermediate::IRegularLink; +use crate::intermediate::LinkTarget; use super::macros::render; use super::RenderObject; @@ -10,13 +11,29 @@ use super::RenderObject; #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "regular_link")] -pub(crate) struct RenderRegularLink { +pub(crate) enum RenderRegularLink { + #[serde(rename = "regular_link_anchor")] + Anchor(RenderRegularLinkAnchor), + #[serde(rename = "regular_link_image")] + Image(RenderRegularLinkImage), +} + +#[derive(Debug, Serialize)] +pub(crate) struct RenderRegularLinkAnchor { target: String, raw_link: String, children: Vec, post_blank: organic::types::PostBlank, } +#[derive(Debug, Serialize)] +pub(crate) struct RenderRegularLinkImage { + src: String, + alt: String, + raw_link: String, + post_blank: organic::types::PostBlank, +} + render!(RenderRegularLink, IRegularLink, original, render_context, { let children = { let mut ret = Vec::new(); @@ -31,10 +48,22 @@ render!(RenderRegularLink, IRegularLink, original, render_context, { .generate_final_target(render_context.clone())? .unwrap_or_else(|| "".to_owned()); - Ok(RenderRegularLink { - target, - raw_link: original.raw_link.clone(), - children, - post_blank: original.post_blank, - }) + let render_link = match &original.target { + LinkTarget::Raw(_) | LinkTarget::Post { .. } | LinkTarget::Target { .. } => { + RenderRegularLink::Anchor(RenderRegularLinkAnchor { + target, + raw_link: original.raw_link.clone(), + children, + post_blank: original.post_blank, + }) + } + LinkTarget::Image { alt, .. } => RenderRegularLink::Image(RenderRegularLinkImage { + src: target, + alt: alt.clone(), + raw_link: original.raw_link.clone(), + post_blank: original.post_blank, + }), + }; + + Ok(render_link) }); diff --git a/src/intermediate/mod.rs b/src/intermediate/mod.rs index 042e971..44c257f 100644 --- a/src/intermediate/mod.rs +++ b/src/intermediate/mod.rs @@ -123,6 +123,7 @@ pub(crate) use radio_link::IRadioLink; pub(crate) use radio_target::IRadioTarget; pub(crate) use registry::Registry; pub(crate) use regular_link::IRegularLink; +pub(crate) use regular_link::LinkTarget; pub(crate) use section::ISection; pub(crate) use special_block::ISpecialBlock; pub(crate) use src_block::ISrcBlock;