From 0fac063c8d3526de37449c32b0cec37f69e37c65 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 7 Jun 2020 18:52:09 -0400 Subject: [PATCH] Implemented none and any, but I need to implement early termination. --- js/test_cases/helpers_select/main.dust | 8 ++++++ src/renderer/renderer.rs | 36 ++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/js/test_cases/helpers_select/main.dust b/js/test_cases/helpers_select/main.dust index 59cdf2d..30a8971 100644 --- a/js/test_cases/helpers_select/main.dust +++ b/js/test_cases/helpers_select/main.dust @@ -100,3 +100,11 @@ Early termination stand-alone comparison{~n} If your pet was a {type} we'd name it {pet_name}{~n} {/pet_names} {/select}{~n} + +@any alone{~n} +=========={~n} +{@any}{person} has a pet!{~n}{/any} + +@none alone{~n} +==========={~n} +{@none}I don't know what to name {person}'s pet...{~n}{/none} diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index 6de6111..071b032 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -601,8 +601,40 @@ impl<'a> DustRenderer<'a> { } } } - DustTag::DTHelperAny(parameterized_block) => todo!(), - DustTag::DTHelperNone(parameterized_block) => todo!(), + DustTag::DTHelperAny(parameterized_block) => match select_context { + Some(sc) if sc.were_any_true => { + let new_breadcrumbs = self.new_breadcrumbs_partial( + breadcrumbs, + breadcrumbs, + None, + ¶meterized_block.explicit_context, + ); + return self.render_maybe_body( + ¶meterized_block.contents, + new_breadcrumbs.as_ref().unwrap_or(breadcrumbs), + blocks, + None, + ); + } + _ => return Ok("".to_owned()), + }, + DustTag::DTHelperNone(parameterized_block) => match select_context { + Some(sc) if !sc.were_any_true => { + let new_breadcrumbs = self.new_breadcrumbs_partial( + breadcrumbs, + breadcrumbs, + None, + ¶meterized_block.explicit_context, + ); + return self.render_maybe_body( + ¶meterized_block.contents, + new_breadcrumbs.as_ref().unwrap_or(breadcrumbs), + blocks, + None, + ); + } + _ => return Ok("".to_owned()), + }, } Ok("".to_owned())