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