I think I have the code for the select tag finished, but I haven't yet implemented any or none.
This commit is contained in:
		
							parent
							
								
									576d94780a
								
							
						
					
					
						commit
						f1b868ce33
					
				| @ -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), | ||||
|                         ); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
| @ -2,8 +2,8 @@ use crate::renderer::parameters_context::ParametersContext; | ||||
| 
 | ||||
| #[derive(Debug)] | ||||
| pub struct SelectContext<'a> { | ||||
|     select_parameters: &'a ParametersContext<'a>, | ||||
|     were_any_true: bool, | ||||
|     pub select_parameters: &'a ParametersContext<'a>, | ||||
|     pub were_any_true: bool, | ||||
| } | ||||
| 
 | ||||
| impl<'a> SelectContext<'a> { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander