Added back in reference.
This commit is contained in:
		
							parent
							
								
									da6655d4b6
								
							
						
					
					
						commit
						bbc1a24631
					
				| @ -1,8 +1,10 @@ | ||||
| use crate::parser::template; | ||||
| use crate::parser::Body; | ||||
| use crate::parser::DustTag; | ||||
| use crate::parser::Filter; | ||||
| use crate::parser::PartialNameElement; | ||||
| use crate::parser::Path; | ||||
| use crate::parser::Special; | ||||
| use crate::parser::Template; | ||||
| use crate::parser::TemplateElement; | ||||
| use crate::renderer::breadcrumb_tree::BreadcrumbTree; | ||||
| @ -11,6 +13,7 @@ use crate::renderer::context_element::ContextElement; | ||||
| use crate::renderer::context_element::IntoContextElement; | ||||
| 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::tree_walking::walk_path; | ||||
| @ -132,6 +135,32 @@ impl<'a> DustRenderer<'a> { | ||||
|         blocks: &'a BlockContext<'a>, | ||||
|     ) -> Result<String, RenderError> { | ||||
|         match tag { | ||||
|             DustTag::DTComment(_comment) => (), | ||||
|             DustTag::DTSpecial(special) => { | ||||
|                 return Ok(match special { | ||||
|                     Special::Space => " ", | ||||
|                     Special::NewLine => "\n", | ||||
|                     Special::CarriageReturn => "\r", | ||||
|                     Special::LeftCurlyBrace => "{", | ||||
|                     Special::RightCurlyBrace => "}", | ||||
|                 } | ||||
|                 .to_owned()) | ||||
|             } | ||||
|             DustTag::DTLiteralStringBlock(literal) => return Ok((*literal).to_owned()), | ||||
|             DustTag::DTReference(reference) => { | ||||
|                 let val = walk_path(breadcrumbs, &reference.path.keys) | ||||
|                     .map(|ice| ice.into_context_element(self, breadcrumbs)); | ||||
|                 match val { | ||||
|                     Err(WalkError::CantWalk) => return Ok("".to_owned()), | ||||
|                     Ok(final_val) => { | ||||
|                         return if final_val.is_truthy() { | ||||
|                             final_val.render(&Self::preprocess_filters(&reference.filters)) | ||||
|                         } else { | ||||
|                             Ok("".to_owned()) | ||||
|                         }; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             _ => panic!("Unsupported tag"), | ||||
|         } | ||||
|         Ok("".to_owned()) | ||||
| @ -281,6 +310,21 @@ impl<'a> DustRenderer<'a> { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn preprocess_filters(filters: &Vec<Filter>) -> Vec<Filter> { | ||||
|         let mut final_filters: Vec<Filter> = filters | ||||
|             .into_iter() | ||||
|             .filter(|f| f != &&Filter::DisableHtmlEncode) | ||||
|             .map(|f| f.clone()) | ||||
|             .collect(); | ||||
| 
 | ||||
|         // If the user has not specified any escaping filter (|s or
 | ||||
|         // |h), automatically add an html escape filter
 | ||||
|         if !filters.iter().any(|f| f == &Filter::DisableHtmlEncode) { | ||||
|             final_filters.push(Filter::HtmlEncode); | ||||
|         } | ||||
|         final_filters | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| struct BlockContext<'a> { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander