--- trunk/lib/Frey/Web.pm 2008/07/11 19:19:42 100 +++ trunk/lib/Frey/Web.pm 2008/07/17 22:26:21 163 @@ -3,28 +3,99 @@ use Continuity::Widget::DomNode; use Data::Dump qw/dump/; +use Carp qw/confess/; +use File::Slurp; + +has 'head' => ( + is => 'rw', + isa => 'ArrayRef[Str]', + default => sub { [ 'static/frey.css' ] }, +); + +has 'inline_smaller_than' => ( + is => 'rw', + isa => 'Int', + default => 10240, +); sub dom2html { - warn "## dom2html ",dump( @_ ); +# warn "## dom2html ",dump( @_ ); return Continuity::Widget::DomNode->create( @_ )->to_string; } -our @javascript = ( qw' -../lib/Joose.js -'); +sub _inline_path { + my ( $self, $path ) = @_; + -s $path < $self->inline_smaller_than; +} + +sub _head_html { + my $self = shift; + my $out = ''; + foreach my $path ( @{ $self->head } ) { + $path =~ s!^/!!; + if ( $path =~ m/\.js$/ ) { + $out .= $self->_inline_path( $path ) ? + qq|| : + qq||; + } elsif ( $path =~ m/\.css$/ ) { + $out .= $self->_inline_path( $path ) ? + qq|| : + qq||; + } else { + confess "don't know how to render $path"; + } + $out .= "\n"; + } + return $out; +} + +=head2 add_head + + $o->add_head( 'path/to/external.js' ); + + my $size = $o->add_head( 'path/to/external.css' ); + +=cut + +sub add_head { + my ( $self, $path ) = @_; + return if ! defined $path || $path eq ''; + $path =~ s!^/!!; + + if ( -e $path ) { + if ( $path =~ m/\.(?:js|css)$/ ) { + push @{ $self->head }, $path; + } else { + confess "can't add_head( $path ) it's not js or css"; + } + } else { + confess "can't find $path: $!"; + } + + return -s $path; +} + +our $reload_counter = 0; -sub head_javascript { +sub page { my $self = shift; + my $a = {@_}; + + $reload_counter++; - my $js = Continuity::Widget::DomNode->create( - map { - ( script => { type => 'text/javascript', src => $_ } ) - } @javascript - )->to_string; + my $html = qq|| + . $self->_head_html + . '' . ( $a->{title} || ref($self) ) . '' + . ( $a->{head} || '' ) + . '' + . ( $a->{body} || '' ) + . qq|
Frey $Frey::VERSION reload
| + . '' + ; - warn "# >>> js\n$js\n" if $self->debug; + warn "## >>> page ",length($html), " bytes\n" if $self->debug; - return $js; + return $html; } 1;