+
reload
$exit
@@ -277,14 +312,28 @@
my $revision = $svk->info->{Revision} || '';
$revision = $1 if $info->{'Mirrored From'} =~ m{Rev\.\s+(\d+)};
- $self->add_icon unless $icon_html;
+ $self->add_icon;
+
+ my $title = undef
+ || $a->{title}
+ || $self->title
+ || ref($self)
+ ;
+
+# $title =~ s{(\w)\w+::}{$1:}g; # XXX compress names of classes
+
+ $self->add_css(qq|
+ body {
+ padding-bottom: 3em; /* don't overlap status line */
+ }
+ |);
my $html = join("\n",
qq||,
$self->_head_html,
- '' . ( $self->title || $a->{title} || ref($self) ) . '',
+ qq|$title|,
'',
- ( $icon_html || '' ),
+ ( $self->icon_html ),
( $a->{head} || '' ),
qq|
@@ -364,6 +413,13 @@
return $error;
}
+sub html_self {
+ my $self = shift;
+ my $html = $self;
+ $html =~ s{([\w:]+)=}{$1=}gsm;
+ return $html;
+}
+
=head2 error
This method will return error to browser and backtrace unless
@@ -376,20 +432,22 @@
my $error = join(" ", @_);
my $fatal = '';
+ my $backtrace = '';
if ( $error !~ m{\n$} ) {
if ( my @backtrace = $self->backtrace ) {
- $error .= "\n\t" . join( "\n\t", @backtrace );
+ $backtrace =
+ "\n" . $self->html_self . "->error backtrace\n\t"
+ . $self->html_links( join( "\n\t", @backtrace ) )
+ ;
$fatal = qq| frey-fatal|;
}
}
warn "ERROR: $error\n";
- return
- qq||
- . $self->html_links( $error ) .
- qq|
|
- ;
+ $self->add_icon('error');
+ $error = $self->html_links( $error );
+ return qq|$error $backtrace
| ;
}
=head1 Status line
@@ -404,8 +462,8 @@
sub add_status {
my ( $self, $data ) = @_;
- push @status, { 'X' => [ $self->backtrace ] };
- if ( ref($data) ) {
+ die "no data" unless $data;
+ if ( ref $data ) {
push @status, $data;
} else {
if ( defined $status[ $#status ] ) {
@@ -420,19 +478,19 @@
Called at beginning of each request
- $self->clean_status;
+ $self->setup_request;
=cut
-sub clean_status {
+sub setup_request {
my ($self) = shift;
+ warn "## clean_status";
@head = ( 'static/frey.css' );
@status = (
{ 'ClassBrowser' => Frey::Class::Browser->new( usage_sort => 1, usage_on_top => 0 )->as_markup },
{ 'Bookmarklets' => Frey::Bookmarklet->new->as_markup },
- { 'INC' => Frey::INC->new->as_markup },
+ { 'INC' => Frey::INC->new->as_markup },
);
- $icon_html = '';
}
=head2 status_parts
@@ -456,54 +514,6 @@
=cut
-=head2 add_icon
-
- Frey::Foo->add_icon; # /static/icons/Frey/Foo.png
- Frey::Foo->add_icon('warning'); # /static/icons/Frey/Foo/warning.png
-
-=cut
-
-sub icon_path {
- my ($self,$class,$variant) = @_;
- my $icon = $class;
- $icon ||= $self->title;
- $icon =~ s{::}{/}g;
- $icon .= "/$variant" if $variant;
- my $path = 'static/icons/' . $icon . '.png';
- if ( -e $path ) {
- warn "# $class from $self icon_path $path" if $self->debug;
- return $path;
- } else {
- $self->TODO( "add $path icon for $class" );
- return undef;
- }
-}
-
-sub add_icon {
- my ($self,$variant) = @_;
-
- my $class = ref($self);
- $class = $self->class if $self->can('class');
- my $icon_path = $self->icon_path( $class, $variant ) || return;
-
- $icon_html .= qq||;
- warn "# using icon $icon_path";
-
-=for later
-
- # FIXME http://en.wikipedia.org/wiki/Favicon suggest just rel="icon" but that doesn't seem to work!
- my $ico_path = $icon_path;
- $ico_path =~ s{png$}{ico};
- if ( ! -e $ico_path ) {
- system "convert $icon_path $ico_path";
- warn "# convert $icon_path $ico_path : $@";
- }
- $icon_html .= qq|| if -e $ico_path;
-
-=cut
-
-}
-
my $warn_colors = {
'#' => '#444',
'##' => '#888',
@@ -654,7 +664,7 @@
my ($self) = @_;
my @backtrace;
- foreach ( 0 .. 5 ) {
+ foreach ( 1 .. 5 ) { # 0 = backtrace
my (
$package,$path,$line
# subroutine hasargs
@@ -704,4 +714,6 @@
return $t;
}
+no Moose::Role;
+
1;