80 |
return $html; |
return $html; |
81 |
} |
} |
82 |
|
|
83 |
|
# from Mojo::ByteStream |
84 |
|
sub url_escape { |
85 |
|
my ( $self, $url, $pattern ) = @_; |
86 |
|
$pattern ||= 'A-Za-z0-9\-\.\_\~'; |
87 |
|
$url =~ s/([^$pattern])/sprintf('%%%02X',ord($1))/ge; |
88 |
|
return $url; |
89 |
|
} |
90 |
|
|
91 |
sub html_dump { |
sub html_dump { |
92 |
my ( $self, $dump ) = @_; |
my ( $self, $dump ) = @_; |
93 |
$dump = dump( $dump ) if ref($dump); |
$dump = dump( $dump ) if ref($dump); |
305 |
|
|
306 |
$self->add_icon unless $icon_html; |
$self->add_icon unless $icon_html; |
307 |
|
|
308 |
|
my $title = undef |
309 |
|
|| $a->{title} |
310 |
|
|| $self->title |
311 |
|
|| ref($self) |
312 |
|
; |
313 |
|
|
314 |
|
# $title =~ s{(\w)\w+::}{$1:}g; # XXX compress names of classes |
315 |
|
|
316 |
my $html = join("\n", |
my $html = join("\n", |
317 |
qq|<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"><html><head>|, |
qq|<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"><html><head>|, |
318 |
$self->_head_html, |
$self->_head_html, |
319 |
'<title>' . ( $self->title || $a->{title} || ref($self) ) . '</title>', |
qq|<title>$title</title>|, |
320 |
'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">', |
'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">', |
321 |
( $icon_html || '<!-- no icon -->' ), |
( $icon_html || '<!-- no icon -->' ), |
322 |
( $a->{head} || '' ), |
( $a->{head} || '' ), |
447 |
|
|
448 |
sub add_status { |
sub add_status { |
449 |
my ( $self, $data ) = @_; |
my ( $self, $data ) = @_; |
450 |
push @status, { 'X' => [ $self->backtrace ] }; |
die "no data" unless $data; |
451 |
if ( ref($data) ) { |
if ( ref $data ) { |
452 |
push @status, $data; |
push @status, $data; |
453 |
} else { |
} else { |
454 |
if ( defined $status[ $#status ] ) { |
if ( defined $status[ $#status ] ) { |