package Jifty::View; use strict; use warnings; use base qw/Jifty::Object/; =head1 NAME Jifty::View - Base class for view modules =head1 DESCRIPTION This is the base class for L and L, which are the two view plugins shipped with Jifty. Other view plugins can be built by extending this class. =head1 METHODS =head2 auto_send_headers Doesn't send headers if this is a subrequest (according to the current L). =cut sub auto_send_headers { return not Jifty->web->request->is_subrequest; } =head2 out_method The default output method. Sets the content-type to C unless a content type has already been set, and then sends a header if need be. =cut sub out_method { Jifty->web->session->set_cookie; my $r = Jifty->handler->apache; # Send a header $r->content_type || $r->content_type('text/html; charset=utf-8'); # Set up a default unless ( $r->http_header_sent or not __PACKAGE__->auto_send_headers ) { Jifty->handler->send_http_header; } binmode *STDOUT; # We now install a new, faster out_method that doesn't have to # keep checking whether headers have been sent. my $content; if ( my ($enc) = $r->content_type =~ /charset=([\w-]+)$/ ) { $content = sub { print STDOUT map Encode::encode($enc, $_), @_; }; } else { $content = sub { print STDOUT @_; }; } Jifty->handler->buffer->out_method( $content ); $content->(@_); } =head1 SEE ALSO L, L, L =head1 LICENSE Jifty is Copyright 2005-2007 Best Practical Solutions, LLC. Jifty is distributed under the same terms as Perl itself. =cut 1;