--- trunk/lib/Frey/Web.pm 2008/07/13 12:22:14 106 +++ trunk/lib/Frey/Web.pm 2008/11/05 21:40:02 316 @@ -3,28 +3,126 @@ 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' ] }, +); + +=head2 inline_smaller_than + +Inline JavaScript and CSS smaller than this size into page reducing +round-trips to server. + +=cut + +has 'inline_smaller_than' => ( + is => 'rw', + isa => 'Int', + default => 10240, +); sub dom2html { # 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_javascript { +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; + + +=head2 page + + $self->page( + title => 'page title', + head => '', + body => 'Page Body', + ); + +=cut + +use Frey::Bookmarklet; +use Frey::ClassBrowser; + +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 + | . dump( $ENV{'REQUEST_URI'} ) . qq| + Bookmarklets| . Frey::Bookmarklet->markup . qq| + ClassBrowser| . Frey::ClassBrowser->markup . qq| + ENV| . dump( %ENV ) . qq| +
+ + |; - warn "# >>> js\n$js\n" if $self->debug; + warn "## >>> page ",length($html), " bytes\n" if $self->debug; - return $js; + return $html; } 1;