24 |
has 'request_url' => ( |
has 'request_url' => ( |
25 |
is => 'rw', |
is => 'rw', |
26 |
isa => 'Uri', coerce => 1, |
isa => 'Uri', coerce => 1, |
27 |
default => '/', |
required => 1, |
28 |
|
default => sub { |
29 |
|
cluck "undefined request_url"; |
30 |
|
'/'; |
31 |
|
}, |
32 |
); |
); |
33 |
|
|
34 |
has 'title' => ( |
has 'title' => ( |
67 |
is => 'rw', |
is => 'rw', |
68 |
isa => 'Int', |
isa => 'Int', |
69 |
# required => 1, # FIXME we can't have required fields with defaults because Frey::Action isn't smart enough and asks for them |
# required => 1, # FIXME we can't have required fields with defaults because Frey::Action isn't smart enough and asks for them |
70 |
default => 120, |
default => 250, |
71 |
); |
); |
72 |
|
|
73 |
my %escape = ('<'=>'<', '>'=>'>', '&'=>'&', '"'=>'"'); |
my %escape = ('<'=>'<', '>'=>'>', '&'=>'&', '"'=>'"'); |
245 |
qq| |
qq| |
246 |
<span class="right"> |
<span class="right"> |
247 |
<a title="reload $url" href="/reload$url">reload</a> |
<a title="reload $url" href="/reload$url">reload</a> |
248 |
<a title="$description" href="/exit$url">$exit</a> |
<a title="$description" href="/exit$url" target="exit">$exit</a> |
249 |
</span> |
</span> |
250 |
|; |
|; |
251 |
|
|
373 |
sub clean_status { |
sub clean_status { |
374 |
my ($self) = shift; |
my ($self) = shift; |
375 |
@head = ( 'static/frey.css' ); |
@head = ( 'static/frey.css' ); |
376 |
|
my $params = { request_url => $self->request_url }; |
377 |
@status = ( |
@status = ( |
378 |
{ 'ClassBrowser' => Frey::ClassBrowser->new( usage_on_top => 0 )->as_markup }, |
{ 'ClassBrowser' => Frey::ClassBrowser->new( %$params, usage_on_top => 0 )->as_markup }, |
379 |
{ 'Bookmarklets' => Frey::Bookmarklet->new->as_markup }, |
{ 'Bookmarklets' => Frey::Bookmarklet->new( %$params )->as_markup }, |
380 |
{ 'INC' => Frey::INC->new->as_markup }, |
{ 'INC' => Frey::INC->new( %$params )->as_markup }, |
381 |
); |
); |
382 |
$icon_html = ''; |
$icon_html = ''; |
383 |
} |
} |
466 |
warn "## multiline markers ", dump( $multiline_markers ), " -> $multiline_re"; |
warn "## multiline markers ", dump( $multiline_markers ), " -> $multiline_re"; |
467 |
|
|
468 |
sub log_path { |
sub log_path { |
469 |
$Frey::Bootstrap::log_path || warn "no log_path?"; |
$Frey::Bootstrap::log_path || die "no log_path?"; |
470 |
} |
} |
471 |
|
|
472 |
|
our $last_log_pos = 0; |
473 |
|
our $last_log_line = 0; |
474 |
|
|
475 |
sub warnings_html { |
sub warnings_html { |
476 |
my ($self,$level) = shift; |
my ($self,$level) = shift; |
477 |
$level ||= $self->debug, |
$level ||= $self->debug, |
480 |
my $max = 30; |
my $max = 30; |
481 |
my $pos = 0; |
my $pos = 0; |
482 |
my @warnings = ( '' x $max ); # XXX circualar buffer for 50 lines |
my @warnings = ( '' x $max ); # XXX circualar buffer for 50 lines |
483 |
my $line = 0; |
my $line = $last_log_line; |
484 |
my $multiline_end; |
my $multiline_end; |
485 |
|
|
486 |
# XXX do we really want to do this every time? |
# XXX do we really want to do this every time? |
494 |
} |
} |
495 |
$self->add_css( $css ); |
$self->add_css( $css ); |
496 |
|
|
497 |
open(my $log, '<', $path) || die "can't open $path: $!"; |
open(my $log, '<', $path) || die "can't open $path: $!"; |
498 |
|
seek($log, $last_log_pos, 0) || warn "can't seek: $!"; |
499 |
while(<$log>) { |
while(<$log>) { |
500 |
chomp; |
chomp; |
501 |
$line++; |
$line++; |
502 |
|
|
503 |
|
next if m{^\s+(Mojo|Class::MOP|Moose)::}; |
504 |
|
|
505 |
my $style = ''; |
my $style = ''; |
506 |
|
|
507 |
=for filter |
=for filter |
543 |
$msg = qq|<span class="$class">$msg</span>|; |
$msg = qq|<span class="$class">$msg</span>|; |
544 |
} |
} |
545 |
|
|
546 |
$msg .= $spacer . |
#$msg .= $spacer . qq|<a target="editor" href="/editor+$path+$line" style="float: right;">$line</a>\n|; |
547 |
qq|<a target="editor" href="/editor+$path+$line" style="float: right;">+$line</a>\n|; |
$msg = qq|<a target="editor" href="/editor+$path+$line" style="float: right;">$line</a>$msg| |
548 |
|
. ( $spacer ? $spacer : '' ) |
549 |
|
. "\n"; # XXX <pre> needs this |
550 |
|
|
551 |
$warnings[ $pos++ % $max ] = $msg; |
$warnings[ $pos++ % $max ] = $msg; |
552 |
} |
} |
553 |
} |
} |
554 |
warn "log has $line lines tell position ",tell($log); |
$last_log_pos = tell($log); |
555 |
|
$last_log_line = $line; |
556 |
|
warn "log has $line lines tell position $last_log_pos"; |
557 |
close($log) || die "can't close $path: $!"; |
close($log) || die "can't close $path: $!"; |
558 |
|
|
559 |
my $size = -s $path; |
my $size = -s $path; |
560 |
|
|
561 |
my $warnings = join("", |
my $warnings = join("", |
562 |
map { $warnings[ ( $pos + $_ ) % $max ] || '' } 1 .. $max |
map { $warnings[ ( $pos + $_ ) % $max ] || '' } 0 .. ( $max - 1 ) |
563 |
); |
); |
564 |
|
|
565 |
my $s = length($warnings); |
my $s = length($warnings); |
568 |
# need to wrap editor link into span so we can have links in warnings |
# need to wrap editor link into span so we can have links in warnings |
569 |
qq|<span class="frey-popup"><a target="editor" href="/editor+$path+$line" title="$path \| $size -> $s bytes \| $line -> $pos lines \| level $level">warn</a><code>| |
qq|<span class="frey-popup"><a target="editor" href="/editor+$path+$line" title="$path \| $size -> $s bytes \| $line -> $pos lines \| level $level">warn</a><code>| |
570 |
. $self->editor_links( $warnings ) |
. $self->editor_links( $warnings ) |
571 |
. qq|</code></span></a>| |
. qq|</code></span>| |
572 |
; |
; |
573 |
} |
} |
574 |
|
|