--- trunk/lib/HTML.pm 2008/06/29 13:12:59 21
+++ trunk/lib/Frey/HTML.pm 2008/06/30 20:02:08 38
@@ -1,17 +1,24 @@
-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
our @view_classes = qw(
Frey::View
- Frey::REST
Strix::View
);
@@ -27,40 +34,72 @@
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 => \@view_classes, around_template => sub {
my ($orig, $path, $args, $code) = @_;
+ my $from = (caller(1))[3];
+ my $package = __PACKAGE__;
+ if ( $from !~ m/$package/ ) {
+ warn "SKIP around_template for $path from $from\n";
+ return $orig->();
+ } else {
+ warn "WRAP around_temolate for $path from $from\n";
+ }
+
my $t = time;
html {
head {
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";