diff --git a/src/renderer/inline_partial_tree.rs b/src/renderer/inline_partial_tree.rs
index f436552..7ae0bd9 100644
--- a/src/renderer/inline_partial_tree.rs
+++ b/src/renderer/inline_partial_tree.rs
@@ -4,7 +4,7 @@ use crate::parser::Template;
use crate::parser::TemplateElement;
use std::collections::HashMap;
-struct InlinePartialTreeElement<'a> {
+pub struct InlinePartialTreeElement<'a> {
parent: Option<&'a InlinePartialTreeElement<'a>>,
blocks: HashMap<&'a str, &'a Option
>>,
}
diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs
index 6cd6cb6..9df7f06 100644
--- a/src/renderer/renderer.rs
+++ b/src/renderer/renderer.rs
@@ -8,6 +8,8 @@ use crate::renderer::context_element::ContextElement;
use crate::renderer::errors::CompileError;
use crate::renderer::errors::RenderError;
use crate::renderer::errors::WalkError;
+use crate::renderer::inline_partial_tree::extract_inline_partials;
+use crate::renderer::inline_partial_tree::InlinePartialTreeElement;
use crate::renderer::parameters_context::ParametersContext;
use crate::renderer::walking::walk_path;
use std::collections::HashMap;
@@ -52,6 +54,15 @@ impl<'a> DustRenderer<'a> {
&'a self,
name: &str,
breadcrumbs: &Vec<&'a dyn ContextElement>,
+ ) -> Result {
+ self.render_template(name, breadcrumbs, None)
+ }
+
+ fn render_template(
+ &'a self,
+ name: &str,
+ breadcrumbs: &Vec<&'a dyn ContextElement>,
+ blocks: Option<&'a InlinePartialTreeElement<'a>>,
) -> Result {
let main_template = match self.templates.get(name) {
Some(tmpl) => tmpl,
@@ -59,6 +70,8 @@ impl<'a> DustRenderer<'a> {
return Err(RenderError::TemplateNotFound(name.to_owned()));
}
};
+ let extracted_inline_partials = extract_inline_partials(main_template);
+ let new_blocks = InlinePartialTreeElement::new(blocks, extracted_inline_partials);
self.render_body(&main_template.contents, breadcrumbs)
}
@@ -173,13 +186,13 @@ impl<'a> DustRenderer<'a> {
}
DustTag::DTPartial(partial) => {
if partial.params.is_empty() {
- let rendered_content = self.render(&partial.name, breadcrumbs)?;
+ let rendered_content = self.render_template(&partial.name, breadcrumbs)?;
return Ok(rendered_content);
} else {
let injected_context = ParametersContext::new(breadcrumbs, &partial.params);
let mut new_breadcrumbs = breadcrumbs.clone();
new_breadcrumbs.insert(new_breadcrumbs.len() - 1, &injected_context);
- let rendered_content = self.render(&partial.name, &new_breadcrumbs)?;
+ let rendered_content = self.render_template(&partial.name, &new_breadcrumbs)?;
return Ok(rendered_content);
}
}