package Miril::View;
use strict;
use warnings;
use autodie;
use HTML::Template::Pluggable;
use HTML::Template::Plugin::Dot;
### ACCESSORS ###
use Object::Tiny qw(theme pager is_authenticated fatal miril);
### CONSTRUCTOR ###
sub new {
my $class = shift;
return bless { @_ }, $class;
}
### PUBLIC METHODS ###
sub load {
my $self = shift;
my $name = shift;
my %options = @_;
my $text = $self->theme->get($name);
# get css
my $css_text = $self->theme->get('css');
my $css = HTML::Template::Pluggable->new( scalarref => \$css_text, die_on_bad_params => 0 );
# get header
my $header_text = $self->theme->get('header');
my $header = HTML::Template::Pluggable->new( scalarref => \$header_text, die_on_bad_params => 0 );
$header->param('authenticated', $self->is_authenticated ? 1 : 0);
$header->param('css', $css->output);
if ($self->miril->warnings or $self->fatal) {
$header->param('has_error', 1 );
$header->param('warnings', [$self->miril->warnings] ) if $self->miril->warnings;
$header->param('fatals', [$self->fatal] ) if $self->fatal;
}
# get sidebar
my $sidebar_text = $self->theme->get('sidebar');
my $sidebar = HTML::Template::Pluggable->new( scalarref => \$sidebar_text, die_on_bad_params => 0 );
$sidebar->param('latest', $self->miril->store->get_latest);
# get footer
my $footer_text = $self->theme->get('footer');
my $footer = HTML::Template::Pluggable->new( scalarref => \$footer_text, die_on_bad_params => 0 );
$footer->param('authenticated', $self->is_authenticated ? 1 : 0);
$footer->param('sidebar', $sidebar->output);
my $tmpl = HTML::Template::Pluggable->new( scalarref => \$text, die_on_bad_params => 0, case_sensitive => 1);
$tmpl->param('authenticated', $self->is_authenticated ? 1 : 0);
$tmpl->param('header' => $header->output, 'footer' => $footer->output );
if ($self->pager) {
my $pager_text = $self->theme->get('pager');
my $pager = HTML::Template::Pluggable->new( scalarref => \$pager_text, die_on_bad_params => 0 );
$pager->param('first', $self->pager->{first});
$pager->param('last', $self->pager->{last});
$pager->param('previous', $self->pager->{previous});
$pager->param('next', $self->pager->{next});
$tmpl->param('pager' => $pager->output );
}
return $tmpl;
}
1;