|
|
|
@ -20,6 +20,7 @@ use crate::renderer::inline_partial_tree::extract_inline_partials;
|
|
|
|
|
use crate::renderer::inline_partial_tree::InlinePartialTreeElement;
|
|
|
|
|
use crate::renderer::iteration_context::IterationContext;
|
|
|
|
|
use crate::renderer::parameters_context::ParametersContext;
|
|
|
|
|
use crate::renderer::select_context::SelectContext;
|
|
|
|
|
use crate::renderer::walking::walk_path;
|
|
|
|
|
use std::borrow::Borrow;
|
|
|
|
|
use std::collections::HashMap;
|
|
|
|
@ -75,7 +76,12 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
breadcrumbs: breadcrumbs,
|
|
|
|
|
blocks: &new_blocks,
|
|
|
|
|
};
|
|
|
|
|
self.render_body(&main_template.contents, breadcrumbs, &new_block_context)
|
|
|
|
|
self.render_body(
|
|
|
|
|
&main_template.contents,
|
|
|
|
|
breadcrumbs,
|
|
|
|
|
&new_block_context,
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn render_maybe_body(
|
|
|
|
@ -83,10 +89,11 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
body: &'a Option<Body>,
|
|
|
|
|
breadcrumbs: &'a Vec<BreadcrumbTreeElement<'a>>,
|
|
|
|
|
blocks: &'a BlockContext<'a>,
|
|
|
|
|
select_context: Option<&'a SelectContext<'a>>,
|
|
|
|
|
) -> Result<String, RenderError> {
|
|
|
|
|
match body {
|
|
|
|
|
None => Ok("".to_owned()),
|
|
|
|
|
Some(body) => Ok(self.render_body(body, breadcrumbs, blocks)?),
|
|
|
|
|
Some(body) => Ok(self.render_body(body, breadcrumbs, blocks, select_context)?),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -95,6 +102,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
body: &'a Body,
|
|
|
|
|
breadcrumbs: &'a Vec<BreadcrumbTreeElement<'a>>,
|
|
|
|
|
blocks: &'a BlockContext<'a>,
|
|
|
|
|
select_context: Option<&'a SelectContext<'a>>,
|
|
|
|
|
) -> Result<String, RenderError> {
|
|
|
|
|
let mut output = String::new();
|
|
|
|
|
for elem in &body.elements {
|
|
|
|
@ -102,7 +110,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
TemplateElement::TEIgnoredWhitespace(_) => {}
|
|
|
|
|
TemplateElement::TESpan(span) => output.push_str(span.contents),
|
|
|
|
|
TemplateElement::TETag(dt) => {
|
|
|
|
|
output.push_str(&self.render_tag(dt, breadcrumbs, blocks)?);
|
|
|
|
|
output.push_str(&self.render_tag(dt, breadcrumbs, blocks, select_context)?);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -130,6 +138,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
},
|
|
|
|
|
breadcrumbs,
|
|
|
|
|
&empty_block_context,
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -138,6 +147,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
tag: &'a DustTag,
|
|
|
|
|
breadcrumbs: &'a Vec<BreadcrumbTreeElement<'a>>,
|
|
|
|
|
blocks: &'a BlockContext<'a>,
|
|
|
|
|
select_context: Option<&'a SelectContext<'a>>,
|
|
|
|
|
) -> Result<String, RenderError> {
|
|
|
|
|
match tag {
|
|
|
|
|
DustTag::DTComment(_comment) => (),
|
|
|
|
@ -186,6 +196,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
&container.else_contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
Ok(Some(final_val)) => {
|
|
|
|
@ -209,6 +220,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
body,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
} else {
|
|
|
|
|
// Array-like value
|
|
|
|
@ -234,6 +246,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
.as_ref()
|
|
|
|
|
.unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
.collect();
|
|
|
|
@ -258,6 +271,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
&container.else_contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
@ -278,11 +292,13 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
&container.contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
_ => self.render_maybe_body(
|
|
|
|
|
&container.else_contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
@ -301,11 +317,13 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
&container.else_contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
_ => self.render_maybe_body(
|
|
|
|
|
&container.contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
@ -357,11 +375,13 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
&named_block.contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
Some(inline_partial) => self.render_maybe_body(
|
|
|
|
|
inline_partial,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
@ -379,19 +399,25 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return self
|
|
|
|
|
.perform_comparison_check(tag, breadcrumbs, None)
|
|
|
|
|
.perform_comparison_check(
|
|
|
|
|
tag,
|
|
|
|
|
breadcrumbs,
|
|
|
|
|
select_context.map(|sc| sc.select_parameters),
|
|
|
|
|
)
|
|
|
|
|
.map(|check_result| {
|
|
|
|
|
if check_result {
|
|
|
|
|
self.render_maybe_body(
|
|
|
|
|
¶meterized_block.contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
} else {
|
|
|
|
|
self.render_maybe_body(
|
|
|
|
|
¶meterized_block.else_contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
@ -413,6 +439,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
¶meterized_block.contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
(Ok(index_resolved), Ok(len_resolved)) => {
|
|
|
|
@ -437,6 +464,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
¶meterized_block.contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -471,6 +499,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
¶meterized_block.contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -513,6 +542,7 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
¶meterized_block.contents,
|
|
|
|
|
new_breadcrumbs.as_ref().unwrap_or(breadcrumbs),
|
|
|
|
|
blocks,
|
|
|
|
|
None,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -561,6 +591,13 @@ impl<'a> DustRenderer<'a> {
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
.any(|check_result| check_result.unwrap_or(false));
|
|
|
|
|
let select_context = SelectContext::new(¶m_map, are_any_checks_true);
|
|
|
|
|
return self.render_maybe_body(
|
|
|
|
|
¶meterized_block.contents,
|
|
|
|
|
new_breadcrumbs_ref,
|
|
|
|
|
blocks,
|
|
|
|
|
Some(&select_context),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|