summaryrefslogtreecommitdiff
path: root/lib/Dancer/Template
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Dancer/Template')
-rw-r--r--lib/Dancer/Template/Xslate.pm19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/Dancer/Template/Xslate.pm b/lib/Dancer/Template/Xslate.pm
index 939bbb8..d3b062b 100644
--- a/lib/Dancer/Template/Xslate.pm
+++ b/lib/Dancer/Template/Xslate.pm
@@ -6,6 +6,8 @@ use strict;
use warnings;
use Text::Xslate;
+use Dancer::App;
+use File::Spec;
use base 'Dancer::Template::Abstract';
@@ -20,11 +22,28 @@ sub init {
%{$self->config},
);
+ ## set default path for header/footer etc.
+ $args{path} ||= [];
+ my $view_dir = Dancer::App->current->setting('views');
+ push @{$args{path}}, $view_dir unless grep { $_ eq $view_dir } @{$args{path}};
+
+ ## for those people read Text::Xslate instead of Dancer::Template::Abstract
+ $self->config->{extension} = $args{suffix} if exists $args{suffix};
+ # avoid 'Text::Xslate: Unknown option(s): extension'
+ $args{suffix} = delete $args{extension} if exists $args{extension};
+
$_engine = Text::Xslate->new(%args);
}
sub render {
my ($self, $template, $tokens) = @_;
+
+ # absolute filename will never work under Windows even we hard set path as ['/']
+ my $view_dir = Dancer::App->current->setting('views');
+ if ( $view_dir ) {
+ $view_dir = File::Spec->catdir( File::Spec->splitdir($view_dir) ) if $^O eq 'MSWin32'; # dirty Win32 fixes for / \
+ $template =~ s/^\Q$view_dir\E//;
+ }
my $content = eval {
$_engine->render($template, $tokens)