require POSIX;
use constant INDENT => ' ';
+use constant TCHILD => '` ';
+sub th_pfx ($) { $_[0] == 0 ? '' : TCHILD };
my $enc_utf8 = find_encoding('UTF-8');
headers_to_html_header($hdr, $ctx) .
multipart_text_as_html($mime) .
'</pre><hr /><pre>' .
- html_footer($hdr, 1, $ctx) .
+ html_footer($hdr, 1, $ctx, 'R/') .
$footer .
'</pre></body></html>';
}
index_walk($fh, $_[0], $enc, \$part_nr);
});
$mime->body_set('');
- $rv = "\n" . html_footer($hdr, 0, $ctx, $mhref);
+ $rv = "\n" . html_footer($hdr, 0, $ctx, "$path$href/R");
if (defined $irt) {
unless (defined $parent_anchor) {
} elsif ($srch) {
my $threaded = 'threaded';
my $flat = 'flat';
+ my $end = '';
if ($ctx->{flat}) {
$flat = "<b>$flat</b>";
+ $end = "\n"; # for lynx
} else {
$threaded = "<b>$threaded</b>";
}
$rv .= " [<a\nhref=\"${path}$href/t/#u\">$threaded</a>";
- $rv .= "|<a\nhref=\"${path}$href/T/#u\">$flat</a>]";
+ $rv .= "|<a\nhref=\"${path}$href/T/#u\">$flat</a>]$end";
}
$fh->write($rv .= '</pre>');
}
}
sub html_footer {
- my ($hdr, $standalone, $ctx, $mhref) = @_;
+ my ($hdr, $standalone, $ctx, $rhref) = @_;
my $srch = $ctx->{srch} if $ctx;
my $upfx = '../';
if ($p) {
$p = PublicInbox::Hval->new_msgid($p);
$p = $p->as_href;
- $irt = "<a\nhref=\"$upfx$p/\">parent</a> ";
+ $irt = "<a\nhref=\"$upfx$p/\"rel=prev>parent</a> ";
} else {
$irt = ' ' x length('parent ');
}
if ($next) {
- $irt .= "<a\nhref=\"$upfx$next/\">next</a> ";
+ $irt .= "<a\nhref=\"$upfx$next/\"\nrel=next>next</a> ";
} else {
$irt .= ' ' x length('next ');
}
$irt = '';
}
- $irt . qq(<a\nhref="${tpfx}R/">reply</a>) . $idx;
+ $irt . qq(<a\nhref="$rhref">reply</a>) . $idx;
}
sub linkify_ref_nosrch {
sub _skel_header {
my ($dst, $state, $upfx, $hdr, $level) = @_;
- my $dot = $level == 0 ? '' : '` ';
my $cur = $state->{cur};
my $mid = mid_clean($hdr->header_raw('Message-ID'));
my $f = ascii_html($hdr->header('X-PI-From'));
my $d = _msg_date($hdr);
- my $pfx = $d . ' ' . indent_for($level);
+ my $pfx = "$d " . indent_for($level) . th_pfx($level);
my $attr = $f;
$state->{first_level} ||= $level;
if ($cur) {
if ($cur eq $mid) {
delete $state->{cur};
- $$dst .= "$pfx$dot<b><a\nid=r\nhref=\"#t\">".
+ $$dst .= "$pfx<b><a\nid=r\nhref=\"#t\">".
"$attr [this message]</a></b>\n";
return;
}
my $m = PublicInbox::Hval->new_msgid($mid);
$m = $upfx . '../' . $m->as_href . '/';
- $$dst .= "$pfx$dot<a\nhref=\"$m\">";
+ $$dst .= "$pfx<a\nhref=\"$m\">";
$$dst .= defined($s) ? "$s</a> $f\n" : "$f</a>\n";
}
$$dst .= "\t[no common parent]\n";
} else {
$$dst .= ' [not found] ';
- my $dot = $level == 0 ? '' : '` ';
- $$dst .= indent_for($level) . $dot;
+ $$dst .= indent_for($level) . th_pfx($level);
$mid = PublicInbox::Hval->new_msgid($mid);
my $href = "$upfx../" . $mid->as_href . '/';
my $html = $mid->as_html;
$cur = undef;
}
$cur ||= [ $ts, '' ];
- my $dot = $level == 0 ? '' : '` ';
$cur->[0] = $ts if $ts > $cur->[0];
- $cur->[1] .= "$nl$pfx$dot<a\nhref=\"$mid/t/#u\"><b>";
- $cur->[1] .= $subj;
- $cur->[1] .= "</b></a>\n";
+ $cur->[1] .= $nl . $pfx . th_pfx($level) .
+ "<a\nhref=\"$mid/t/#u\"><b>" .
+ $subj . "</b></a>\n";
$ts = fmt_ts($ts);
my $attr = " $ts UTC";