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 @@
+
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;