Catalyst-View-Template-Pure
view release on metacpan or search on metacpan
lib/Catalyst/View/Template/Pure.pm view on Meta::CPAN
my $res = $self->{ctx}->res;
$status = $res->status if $res->status != 200;
if(ref($proto[0]) eq 'ARRAY') {
my @headers = @{shift @proto};
$res->headers->push_header(@headers);
}
$res->content_type('text/html') unless $res->content_type;
my $body = $res->body($self->render);
return $self;
}
sub detach { shift->{ctx}->detach }
sub render {
my ($self, $data) = @_;
$self->{ctx}->stats->profile(begin => "=> ".Catalyst::Utils::class2classsuffix($self->catalyst_component_name)."->Render");
# quite possible I should do something with $data...
my $string = $self->{pure}->render($self);
$self->{ctx}->stats->profile(end => "=> ".Catalyst::Utils::class2classsuffix($self->catalyst_component_name)."->Render");
return $string;
}
sub TO_HTML {
my ($self, $pure, $dom, $data) = @_;
return $self->{pure}->encoded_string(
$self->render($self));
}
sub Views {
my $self = shift;
my %views = (
map {
my $v = $_;
$v => sub {
my ($pure, $dom, $data) = @_;
# TODO $data can be an object....
$self->{ctx}->view($v, %$data);
}
} ($self->{ctx}->views)
);
return \%views;
}
# Proxy these here for now. I assume eventually will nee
# a subclass just for components
#sub prepare_render_callback { shift->{pure}->prepare_render_callback }
sub prepare_render_callback {
my $self = shift;
return sub {
my ($t, $dom, $data) = @_;
$self->{pure}->process_root($dom->root, $data);
$t->encoded_string($self->render($data));
};
}
sub style_fragment { shift->{pure}->style_fragment }
sub script_fragment { shift->{pure}->script_fragment }
sub ctx { return shift->{ctx} }
sub process {
my ($self, $c, @args) = @_;
$self->response(200, @args);
}
sub headers {
# TODO let you add headders
}
1;
=head1 NAME
Catalyst::View::Template::Pure - Catalyst view adaptor for Template::Pure
=head1 SYNOPSIS
package MyApp::View::Story;
use Moose;
use HTTP::Status qw(:constants);
extends 'Catalyst::View::Template::Pure';
has [qw/title body timestamp/] => (is=>'ro', required=>1);
sub current { scalar localtime }
__PACKAGE__->config(
timestamp => scalar(localtime),
returns_status => [HTTP_OK],
template => q[
<!doctype html>
<html lang="en">
<head>
<title>Title Goes Here</title>
</head>
<body>
<div id="main">Content goes here!</div>
<div id="current">Current Localtime: </div>
<div id="timestamp">Server Started on: </div>
</body>
</html>
],
directives => [
'title' => 'title',
'#main' => 'body',
'#current+' => 'current',
'#timestamp+' => 'timestamp',
],
);
__PACKAGE__->meta->make_immutable
Create a controller that uses this view:
package MyApp::Controller::Story;
use Moose;
( run in 1.071 second using v1.01-cache-2.11-cpan-364913b4093 )