Integrate new_breadcrumbs into the helpers.

This commit is contained in:
Tom Alexander 2020-05-25 18:08:29 -04:00
parent 400602124e
commit 83623897af
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE

View File

@ -110,6 +110,7 @@ impl<'a> DustRenderer<'a> {
Ok(output) Ok(output)
} }
/// For rendering a dynamic partial's name
fn render_partial_name( fn render_partial_name(
&'a self, &'a self,
body: &'a Vec<PartialNameElement>, body: &'a Vec<PartialNameElement>,
@ -324,6 +325,12 @@ impl<'a> DustRenderer<'a> {
}; };
} }
DustTag::DTHelperEquals(parameterized_block) => { DustTag::DTHelperEquals(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs(
breadcrumbs,
None,
&parameterized_block.explicit_context,
None,
);
let param_map: HashMap<&str, &RValue<'a>> = let param_map: HashMap<&str, &RValue<'a>> =
Self::get_rval_map(&parameterized_block.params); Self::get_rval_map(&parameterized_block.params);
// Special case: when comparing two RVPaths, if the // Special case: when comparing two RVPaths, if the
@ -334,7 +341,11 @@ impl<'a> DustRenderer<'a> {
return match &parameterized_block.contents { return match &parameterized_block.contents {
None => Ok("".to_owned()), None => Ok("".to_owned()),
Some(body) => { Some(body) => {
let rendered_content = self.render_body(body, breadcrumbs, blocks)?; let rendered_content = self.render_body(
body,
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks,
)?;
Ok(rendered_content) Ok(rendered_content)
} }
}; };
@ -348,21 +359,28 @@ impl<'a> DustRenderer<'a> {
let right_side: Result<&dyn ContextElement, WalkError> = let right_side: Result<&dyn ContextElement, WalkError> =
Self::get_rval(breadcrumbs, &param_map, "value") Self::get_rval(breadcrumbs, &param_map, "value")
.unwrap_or(Err(WalkError::CantWalk)); .unwrap_or(Err(WalkError::CantWalk));
if left_side == right_side { if left_side == right_side {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.contents, &parameterized_block.contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} else { } else {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.else_contents, &parameterized_block.else_contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} }
} }
DustTag::DTHelperNotEquals(parameterized_block) => { DustTag::DTHelperNotEquals(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs(
breadcrumbs,
None,
&parameterized_block.explicit_context,
None,
);
let param_map: HashMap<&str, &RValue<'a>> = let param_map: HashMap<&str, &RValue<'a>> =
Self::get_rval_map(&parameterized_block.params); Self::get_rval_map(&parameterized_block.params);
// Special case: when comparing two RVPaths, if the // Special case: when comparing two RVPaths, if the
@ -373,7 +391,11 @@ impl<'a> DustRenderer<'a> {
return match &parameterized_block.else_contents { return match &parameterized_block.else_contents {
None => Ok("".to_owned()), None => Ok("".to_owned()),
Some(body) => { Some(body) => {
let rendered_content = self.render_body(body, breadcrumbs, blocks)?; let rendered_content = self.render_body(
body,
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks,
)?;
Ok(rendered_content) Ok(rendered_content)
} }
}; };
@ -390,18 +412,24 @@ impl<'a> DustRenderer<'a> {
if left_side != right_side { if left_side != right_side {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.contents, &parameterized_block.contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} else { } else {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.else_contents, &parameterized_block.else_contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} }
} }
DustTag::DTHelperGreaterThan(parameterized_block) => { DustTag::DTHelperGreaterThan(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs(
breadcrumbs,
None,
&parameterized_block.explicit_context,
None,
);
let param_map: HashMap<&str, &RValue<'a>> = let param_map: HashMap<&str, &RValue<'a>> =
Self::get_rval_map(&parameterized_block.params); Self::get_rval_map(&parameterized_block.params);
let left_side: Result<&dyn ContextElement, WalkError> = let left_side: Result<&dyn ContextElement, WalkError> =
@ -416,7 +444,7 @@ impl<'a> DustRenderer<'a> {
(Err(_), _) | (_, Err(_)) => { (Err(_), _) | (_, Err(_)) => {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.else_contents, &parameterized_block.else_contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
) )
} }
@ -424,13 +452,13 @@ impl<'a> DustRenderer<'a> {
if left_side_unwrapped > right_side_unwrapped { if left_side_unwrapped > right_side_unwrapped {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.contents, &parameterized_block.contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} else { } else {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.else_contents, &parameterized_block.else_contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} }
@ -438,6 +466,12 @@ impl<'a> DustRenderer<'a> {
} }
} }
DustTag::DTHelperGreaterThanOrEquals(parameterized_block) => { DustTag::DTHelperGreaterThanOrEquals(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs(
breadcrumbs,
None,
&parameterized_block.explicit_context,
None,
);
let param_map: HashMap<&str, &RValue<'a>> = let param_map: HashMap<&str, &RValue<'a>> =
Self::get_rval_map(&parameterized_block.params); Self::get_rval_map(&parameterized_block.params);
let left_side: Result<&dyn ContextElement, WalkError> = let left_side: Result<&dyn ContextElement, WalkError> =
@ -452,7 +486,7 @@ impl<'a> DustRenderer<'a> {
(Err(_), _) | (_, Err(_)) => { (Err(_), _) | (_, Err(_)) => {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.else_contents, &parameterized_block.else_contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
) )
} }
@ -460,13 +494,13 @@ impl<'a> DustRenderer<'a> {
if left_side_unwrapped >= right_side_unwrapped { if left_side_unwrapped >= right_side_unwrapped {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.contents, &parameterized_block.contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} else { } else {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.else_contents, &parameterized_block.else_contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} }
@ -474,6 +508,12 @@ impl<'a> DustRenderer<'a> {
} }
} }
DustTag::DTHelperLessThan(parameterized_block) => { DustTag::DTHelperLessThan(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs(
breadcrumbs,
None,
&parameterized_block.explicit_context,
None,
);
let param_map: HashMap<&str, &RValue<'a>> = let param_map: HashMap<&str, &RValue<'a>> =
Self::get_rval_map(&parameterized_block.params); Self::get_rval_map(&parameterized_block.params);
let left_side: Result<&dyn ContextElement, WalkError> = let left_side: Result<&dyn ContextElement, WalkError> =
@ -488,7 +528,7 @@ impl<'a> DustRenderer<'a> {
(Err(_), _) | (_, Err(_)) => { (Err(_), _) | (_, Err(_)) => {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.else_contents, &parameterized_block.else_contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
) )
} }
@ -496,13 +536,13 @@ impl<'a> DustRenderer<'a> {
if left_side_unwrapped < right_side_unwrapped { if left_side_unwrapped < right_side_unwrapped {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.contents, &parameterized_block.contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} else { } else {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.else_contents, &parameterized_block.else_contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} }
@ -510,6 +550,12 @@ impl<'a> DustRenderer<'a> {
} }
} }
DustTag::DTHelperLessThanOrEquals(parameterized_block) => { DustTag::DTHelperLessThanOrEquals(parameterized_block) => {
let new_breadcrumbs = Self::new_breadcrumbs(
breadcrumbs,
None,
&parameterized_block.explicit_context,
None,
);
let param_map: HashMap<&str, &RValue<'a>> = let param_map: HashMap<&str, &RValue<'a>> =
Self::get_rval_map(&parameterized_block.params); Self::get_rval_map(&parameterized_block.params);
let left_side: Result<&dyn ContextElement, WalkError> = let left_side: Result<&dyn ContextElement, WalkError> =
@ -524,7 +570,7 @@ impl<'a> DustRenderer<'a> {
(Err(_), _) | (_, Err(_)) => { (Err(_), _) | (_, Err(_)) => {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.else_contents, &parameterized_block.else_contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
) )
} }
@ -532,13 +578,13 @@ impl<'a> DustRenderer<'a> {
if left_side_unwrapped <= right_side_unwrapped { if left_side_unwrapped <= right_side_unwrapped {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.contents, &parameterized_block.contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} else { } else {
return self.render_maybe_body( return self.render_maybe_body(
&parameterized_block.else_contents, &parameterized_block.else_contents,
breadcrumbs, new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
blocks, blocks,
); );
} }
@ -629,7 +675,7 @@ impl<'a> DustRenderer<'a> {
/// ///
/// If explicit_context is not None, then the final breadcrumb stack will be: /// If explicit_context is not None, then the final breadcrumb stack will be:
/// ///
/// ``` /// ```text
/// breadcrumbs /// breadcrumbs
/// injected_context /// injected_context
/// new_context_element /// new_context_element
@ -639,7 +685,7 @@ impl<'a> DustRenderer<'a> {
/// breadcrumbs are omitted, leading to the new breadcrumb stack /// breadcrumbs are omitted, leading to the new breadcrumb stack
/// as: /// as:
/// ///
/// ``` /// ```text
/// injected_context /// injected_context
/// explicit_context /// explicit_context
/// new_context_element /// new_context_element