diff options
-rw-r--r-- | Changes | 2 | ||||
-rw-r--r-- | lib/Text/Xslate/Syntax/Handlebars.pm | 7 | ||||
-rw-r--r-- | t/bugs.t | 34 |
3 files changed, 42 insertions, 1 deletions
@@ -1,6 +1,8 @@ Revision history for Text-Handlebars {{$NEXT}} + - fix '{{{' variable references inside block helpers (reported by + belousandrey, #6) 0.04 2014-04-16 - fix '..' in block helpers (reported by Jörg Prante, RT#94792) diff --git a/lib/Text/Xslate/Syntax/Handlebars.pm b/lib/Text/Xslate/Syntax/Handlebars.pm index ce21c68..05b76d5 100644 --- a/lib/Text/Xslate/Syntax/Handlebars.pm +++ b/lib/Text/Xslate/Syntax/Handlebars.pm @@ -105,7 +105,12 @@ sub split_tags { } } if (@raw_text) { - $raw_text[-1] .= $tag_start . $code . $tag_end; + if ($close_tag eq '}}}') { + $raw_text[-1] .= '{{{' . $code . '}}}'; + } + else { + $raw_text[-1] .= $tag_start . $code . $tag_end; + } } if ($code =~ m{^[#^]} || $code eq 'else') { push @raw_text, ''; diff --git a/t/bugs.t b/t/bugs.t new file mode 100644 index 0000000..b7a71a7 --- /dev/null +++ b/t/bugs.t @@ -0,0 +1,34 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use lib 't/lib'; +use Test::More; +use Test::Handlebars; + +my $vars = { + outer => '<em>example</em>', + elements => [ + { inner => '<em>text</em>' }, + { inner => '<h1>text</h1>' }, + ] +}; +my $template = <<EOL; +{{{outer}}} +{{#each elements}} +{{{inner}}} +{{/each}} +EOL +my $expected = <<EOL; +<em>example</em> +<em>text</em> +<h1>text</h1> +EOL + +render_ok( + $template, + $vars, + $expected, + "doy/text-handlebars#6" +); + +done_testing; |