--- 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";