--- trunk/lib/HTML.pm 2008/06/29 12:55:39 19 +++ trunk/lib/Frey/HTML.pm 2008/06/29 20:52:33 32 @@ -1,24 +1,44 @@ -package HTML; +package Frey::HTML; use strict; use warnings; use Time::HiRes qw/time/; use Data::Dump qw/dump/; -use Carp qw/confess/; +use Carp qw/confess carp/; + +=head1 NAME + +Frey::HTML - generate html pages + +=head2 METHODS + +=cut # FIXME -use View; -use Strix::View; -use Frey::REST; + +our @view_classes = qw( + Frey::View + Strix::View +); + +warn "Using view classes ", dump( @view_classes ); + +foreach ( @view_classes ) { + my $path = $_; + $path =~ s!::!/!g; + $path .= '.pm'; + require $path or warn "Can't require $_ from $path: $!"; +} warn "available templates = ",dump( Template::Declare->templates ); our @javascript; +our $debug = 0; use Template::Declare; use Template::Declare::Tags; # defaults to 'HTML' -Template::Declare->init( roots => ['HTML','View'], around_template => sub { +Template::Declare->init( roots => \@view_classes, around_template => sub { my ($orig, $path, $args, $code) = @_; my $t = time; html { @@ -26,29 +46,51 @@ title { $path } link { { rel is 'stylesheet' } - { href is 'static/app.css' } + { href is '/static/app.css' } { type is 'text/css' } { media is 'screen' } }; foreach my $js ( @javascript ) { script { { type is 'text/javascript' } - { src is $js } + { src is "/$js" } } - } + }; } body { $orig->(); } - } - warn "TEMPLATE $path ",dump($args),sprintf(" in %.4fs\n",time - $t); + }; + warn "TEMPLATE $path ",dump($args),sprintf(" in %.4fs\n",time - $t) if $debug; }); -sub view { - my $self = shift; - return Template::Declare->show( @_ ); +=head2 page + +Wrap template into html page + + Frey::HTML->page( 'template_name', $req, $args ); + +=cut + +sub page { + my ( $self, $page, $req, $args ) = @_; + warn "## page $page ",dump($args),"\n"; + my $out = eval { Template::Declare->show( $page, $req, $args ) }; + if ( $@ ) { + carp "ERROR: $@"; + $out = Template::Declare->show( 'error', $req, "page $page " . dump($args) . ": $@" ); + } + return $out; } +=head2 add_javascript + +Add javascript to current page + + Frey::HTML->add_javascript( 'static/javascript.js' ); + +=cut + sub add_javascript { my $self = shift; my $js = shift or confess "no JavaScript path";