Unified the renderers for all the comparison helpers by moving their implementation to perform_comparison_check.
This commit is contained in:
parent
85d36fc516
commit
ed38ce6a38
@ -365,7 +365,12 @@ impl<'a> DustRenderer<'a> {
|
|||||||
),
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
DustTag::DTHelperEquals(parameterized_block) => {
|
DustTag::DTHelperEquals(parameterized_block)
|
||||||
|
| DustTag::DTHelperNotEquals(parameterized_block)
|
||||||
|
| DustTag::DTHelperGreaterThan(parameterized_block)
|
||||||
|
| DustTag::DTHelperLessThan(parameterized_block)
|
||||||
|
| DustTag::DTHelperGreaterThanOrEquals(parameterized_block)
|
||||||
|
| DustTag::DTHelperLessThanOrEquals(parameterized_block) => {
|
||||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||||
breadcrumbs,
|
breadcrumbs,
|
||||||
breadcrumbs,
|
breadcrumbs,
|
||||||
@ -373,35 +378,10 @@ impl<'a> DustRenderer<'a> {
|
|||||||
¶meterized_block.explicit_context,
|
¶meterized_block.explicit_context,
|
||||||
);
|
);
|
||||||
|
|
||||||
let param_map =
|
return self
|
||||||
ParametersContext::new(self, breadcrumbs, ¶meterized_block.params, None);
|
.perform_comparison_check(tag, breadcrumbs, None)
|
||||||
|
.map(|check_result| {
|
||||||
let left_side = self.tap(breadcrumbs, ¶m_map, "key");
|
if check_result {
|
||||||
let right_side = self.tap(breadcrumbs, ¶m_map, "value");
|
|
||||||
|
|
||||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
return match (left_side_ce, right_side_ce) {
|
|
||||||
// If "key" is not present at all, return a blank string
|
|
||||||
(None, _) => Ok("".to_owned()),
|
|
||||||
(Some(_maybe_left_ce), _) => {
|
|
||||||
// Special case: when comparing two RVPaths, if the
|
|
||||||
// path points to the same value then they are
|
|
||||||
// equal. This is particularly important for objects
|
|
||||||
// which compare memory locations rather than contents
|
|
||||||
// (javascript object equality).
|
|
||||||
if Self::are_paths_identical(&left_side_ce, &right_side_ce)
|
|
||||||
|| left_side_ce.unwrap_or(Err(&WalkError::CantWalk))
|
|
||||||
== right_side_ce.unwrap_or(Err(&WalkError::CantWalk))
|
|
||||||
{
|
|
||||||
self.render_maybe_body(
|
self.render_maybe_body(
|
||||||
¶meterized_block.contents,
|
¶meterized_block.contents,
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
||||||
@ -414,224 +394,8 @@ impl<'a> DustRenderer<'a> {
|
|||||||
blocks,
|
blocks,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
};
|
.unwrap_or(Ok("".to_owned()));
|
||||||
}
|
|
||||||
DustTag::DTHelperNotEquals(parameterized_block) => {
|
|
||||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
|
||||||
breadcrumbs,
|
|
||||||
breadcrumbs,
|
|
||||||
None,
|
|
||||||
¶meterized_block.explicit_context,
|
|
||||||
);
|
|
||||||
|
|
||||||
let param_map =
|
|
||||||
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");
|
|
||||||
|
|
||||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
return match (left_side_ce, right_side_ce) {
|
|
||||||
// If "key" is not present at all, return a blank string
|
|
||||||
(None, _) => Ok("".to_owned()),
|
|
||||||
(Some(_maybe_left_ce), _) => {
|
|
||||||
// Special case: when comparing two RVPaths, if the
|
|
||||||
// path points to the same value then they are
|
|
||||||
// equal. This is particularly important for objects
|
|
||||||
// which compare memory locations rather than contents
|
|
||||||
// (javascript object equality).
|
|
||||||
if Self::are_paths_identical(&left_side_ce, &right_side_ce)
|
|
||||||
|| left_side_ce.unwrap_or(Err(&WalkError::CantWalk))
|
|
||||||
== right_side_ce.unwrap_or(Err(&WalkError::CantWalk))
|
|
||||||
{
|
|
||||||
self.render_maybe_body(
|
|
||||||
¶meterized_block.else_contents,
|
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
||||||
blocks,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
self.render_maybe_body(
|
|
||||||
¶meterized_block.contents,
|
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
||||||
blocks,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
DustTag::DTHelperGreaterThan(parameterized_block) => {
|
|
||||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
|
||||||
breadcrumbs,
|
|
||||||
breadcrumbs,
|
|
||||||
None,
|
|
||||||
¶meterized_block.explicit_context,
|
|
||||||
);
|
|
||||||
|
|
||||||
let param_map =
|
|
||||||
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");
|
|
||||||
|
|
||||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
return match (left_side_ce, right_side_ce) {
|
|
||||||
// If "key" is not present at all, return a blank string
|
|
||||||
(None, _) => Ok("".to_owned()),
|
|
||||||
(Some(Ok(left_value)), Some(Ok(right_value))) if left_value > right_value => {
|
|
||||||
self.render_maybe_body(
|
|
||||||
¶meterized_block.contents,
|
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
||||||
blocks,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
_ => self.render_maybe_body(
|
|
||||||
¶meterized_block.else_contents,
|
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
||||||
blocks,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
DustTag::DTHelperGreaterThanOrEquals(parameterized_block) => {
|
|
||||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
|
||||||
breadcrumbs,
|
|
||||||
breadcrumbs,
|
|
||||||
None,
|
|
||||||
¶meterized_block.explicit_context,
|
|
||||||
);
|
|
||||||
|
|
||||||
let param_map =
|
|
||||||
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");
|
|
||||||
|
|
||||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
return match (left_side_ce, right_side_ce) {
|
|
||||||
// If "key" is not present at all, return a blank string
|
|
||||||
(None, _) => Ok("".to_owned()),
|
|
||||||
(Some(Ok(left_value)), Some(Ok(right_value))) if left_value >= right_value => {
|
|
||||||
self.render_maybe_body(
|
|
||||||
¶meterized_block.contents,
|
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
||||||
blocks,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
_ => self.render_maybe_body(
|
|
||||||
¶meterized_block.else_contents,
|
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
||||||
blocks,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
DustTag::DTHelperLessThan(parameterized_block) => {
|
|
||||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
|
||||||
breadcrumbs,
|
|
||||||
breadcrumbs,
|
|
||||||
None,
|
|
||||||
¶meterized_block.explicit_context,
|
|
||||||
);
|
|
||||||
|
|
||||||
let param_map =
|
|
||||||
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");
|
|
||||||
|
|
||||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
return match (left_side_ce, right_side_ce) {
|
|
||||||
// If "key" is not present at all, return a blank string
|
|
||||||
(None, _) => Ok("".to_owned()),
|
|
||||||
(Some(Ok(left_value)), Some(Ok(right_value))) if left_value < right_value => {
|
|
||||||
self.render_maybe_body(
|
|
||||||
¶meterized_block.contents,
|
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
||||||
blocks,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
_ => self.render_maybe_body(
|
|
||||||
¶meterized_block.else_contents,
|
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
||||||
blocks,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
DustTag::DTHelperLessThanOrEquals(parameterized_block) => {
|
|
||||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
|
||||||
breadcrumbs,
|
|
||||||
breadcrumbs,
|
|
||||||
None,
|
|
||||||
¶meterized_block.explicit_context,
|
|
||||||
);
|
|
||||||
|
|
||||||
let param_map =
|
|
||||||
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");
|
|
||||||
|
|
||||||
let left_side_ce = left_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
let right_side_ce = right_side.as_ref().map(|maybe_ice| {
|
|
||||||
maybe_ice
|
|
||||||
.as_ref()
|
|
||||||
.map(|ice| ice.get_context_element_reference())
|
|
||||||
});
|
|
||||||
return match (left_side_ce, right_side_ce) {
|
|
||||||
// If "key" is not present at all, return a blank string
|
|
||||||
(None, _) => Ok("".to_owned()),
|
|
||||||
(Some(Ok(left_value)), Some(Ok(right_value))) if left_value <= right_value => {
|
|
||||||
self.render_maybe_body(
|
|
||||||
¶meterized_block.contents,
|
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
||||||
blocks,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
_ => self.render_maybe_body(
|
|
||||||
¶meterized_block.else_contents,
|
|
||||||
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
||||||
blocks,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
DustTag::DTHelperSep(parameterized_block) => {
|
DustTag::DTHelperSep(parameterized_block) => {
|
||||||
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
let new_breadcrumbs = self.new_breadcrumbs_partial(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user