Add a parent to ParametersContext so we can chain parameters contexts for use with the select helper.
This commit is contained in:
@@ -169,7 +169,8 @@ impl<'a> DustRenderer<'a> {
|
||||
}
|
||||
}
|
||||
DustTag::DTSection(container) => {
|
||||
let injected_context = ParametersContext::new(self, breadcrumbs, &container.params);
|
||||
let injected_context =
|
||||
ParametersContext::new(self, breadcrumbs, &container.params, None);
|
||||
let val = walk_path(breadcrumbs, &container.path.keys)
|
||||
.map(|ice| ice.into_context_element(self, breadcrumbs));
|
||||
match val {
|
||||
@@ -325,7 +326,7 @@ impl<'a> DustRenderer<'a> {
|
||||
return Ok(rendered_content);
|
||||
} else {
|
||||
let injected_context =
|
||||
ParametersContext::new(self, breadcrumbs, &partial.params);
|
||||
ParametersContext::new(self, breadcrumbs, &partial.params, None);
|
||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||
breadcrumbs,
|
||||
breadcrumbs,
|
||||
@@ -373,7 +374,7 @@ impl<'a> DustRenderer<'a> {
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params);
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
@@ -425,7 +426,7 @@ impl<'a> DustRenderer<'a> {
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params);
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
@@ -477,7 +478,7 @@ impl<'a> DustRenderer<'a> {
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params);
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
@@ -518,7 +519,7 @@ impl<'a> DustRenderer<'a> {
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params);
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
@@ -559,7 +560,7 @@ impl<'a> DustRenderer<'a> {
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params);
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
@@ -600,7 +601,7 @@ impl<'a> DustRenderer<'a> {
|
||||
);
|
||||
|
||||
let param_map =
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params);
|
||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
||||
|
||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
||||
@@ -756,7 +757,31 @@ impl<'a> DustRenderer<'a> {
|
||||
}
|
||||
}
|
||||
}
|
||||
DustTag::DTHelperSelect(parameterized_block) => todo!(),
|
||||
DustTag::DTHelperSelect(parameterized_block) => {
|
||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||
breadcrumbs,
|
||||
breadcrumbs,
|
||||
None,
|
||||
¶meterized_block.explicit_context,
|
||||
);
|
||||
match ¶meterized_block.contents {
|
||||
None => return Ok("".to_owned()),
|
||||
Some(body) => {
|
||||
let comparison_helpers = body.elements.iter().filter_map(|te| match te {
|
||||
TemplateElement::TETag(dt) => match dt {
|
||||
DustTag::DTHelperEquals(_)
|
||||
| DustTag::DTHelperNotEquals(_)
|
||||
| DustTag::DTHelperGreaterThan(_)
|
||||
| DustTag::DTHelperLessThan(_)
|
||||
| DustTag::DTHelperGreaterThanOrEquals(_)
|
||||
| DustTag::DTHelperLessThanOrEquals(_) => Some(dt),
|
||||
_ => None,
|
||||
},
|
||||
_ => None,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
DustTag::DTHelperAny(parameterized_block) => todo!(),
|
||||
DustTag::DTHelperNone(parameterized_block) => todo!(),
|
||||
}
|
||||
@@ -944,6 +969,24 @@ impl<'a> DustRenderer<'a> {
|
||||
!std::borrow::Borrow::<dyn IntoContextElement + 'b>::borrow(b).is_pseudo_element()
|
||||
})
|
||||
}
|
||||
|
||||
fn perform_comparison_check(
|
||||
&'a self,
|
||||
tag: &'a DustTag,
|
||||
breadcrumbs: &'a Vec<BreadcrumbTreeElement<'a>>,
|
||||
select_parameters: Option<&'a ParametersContext<'a>>,
|
||||
) -> bool {
|
||||
let param_map = match tag {
|
||||
DustTag::DTHelperEquals(parameterized_block)
|
||||
| DustTag::DTHelperNotEquals(parameterized_block)
|
||||
| DustTag::DTHelperGreaterThan(parameterized_block)
|
||||
| DustTag::DTHelperLessThan(parameterized_block)
|
||||
| DustTag::DTHelperGreaterThanOrEquals(parameterized_block)
|
||||
| DustTag::DTHelperLessThanOrEquals(parameterized_block) => ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, select_parameters),
|
||||
_ => panic!("perform_comparison_check only implemented for comparison helpers (eq, ne, gt, gte, lt, lte)")
|
||||
};
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
struct BlockContext<'a> {
|
||||
|
||||
Reference in New Issue
Block a user