X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FView.pm;h=b86c7bda1de4f2f8ae3fa04d3fb558e24e2520e8;hb=23626f154849c991710a372c29da5d07bca36005;hp=d8a008c7ffe01bf29862c65a3664e8a04a4b4afc;hpb=53046dfabf5cea98662dc2e2297947be793262ce;p=public-inbox.git diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index d8a008c7..b86c7bda 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -40,11 +40,7 @@ sub msg_html_i { # fake an EOF if generating the footer fails; # we want to at least show the message if something # here crashes: - eval { - my $hdr = delete($ctx->{hdr}); - '
' . html_footer($hdr, 1, $ctx) .
-			'
' . msg_reply($ctx, $hdr) - }; + eval { html_footer($ctx) }; } else { undef } @@ -113,7 +109,7 @@ sub msg_html_more { } # /$INBOX/$MESSAGE_ID/#R -sub msg_reply { +sub msg_reply ($$) { my ($ctx, $hdr) = @_; my $se_url = 'https://kernel.org/pub/software/scm/git/docs/git-send-email.html'; @@ -385,7 +381,8 @@ sub _th_index_lite { $rv .= $pad ."$s_s, $s_c; $ctx->{s_nr}\n"; } -sub walk_thread { +# non-recursive thread walker +sub walk_thread ($$$) { my ($rootset, $ctx, $cb) = @_; my @q = map { (0, $_, -1) } @$rootset; while (@q) { @@ -398,7 +395,7 @@ sub walk_thread { } } -sub pre_thread { +sub pre_thread { # walk_thread callback my ($ctx, $level, $node, $idx) = @_; $ctx->{mapping}->{$node->{id}} = [ '', $node, $idx, $level ]; skel_dump($ctx, $level, $node); @@ -478,7 +475,7 @@ sub thread_html { # reduce hash lookups in pre_thread->skel_dump $ctx->{-obfs_ibx} = $ibx->{obfuscate} ? $ibx : undef; - walk_thread($rootset, $ctx, *pre_thread); + walk_thread($rootset, $ctx, \&pre_thread); $skel .= ''; return stream_thread($rootset, $ctx) unless $ctx->{flat}; @@ -722,32 +719,34 @@ sub _msg_html_prepare { $rv .= "\n"; } -sub thread_skel { - my ($skel, $ctx, $hdr, $tpfx) = @_; +sub SKEL_EXPAND () { + qq(expand[flat) . + qq(|nested] ) . + qq(mbox.gz ) . + qq(Atom feed); +} + +sub thread_skel ($$$) { + my ($skel, $ctx, $hdr) = @_; my $mid = mids($hdr)->[0]; my $ibx = $ctx->{-inbox}; my ($nr, $msgs) = $ibx->over->get_thread($mid); - my $expand = qq(expand[flat) . - qq(|nested] ) . - qq(mbox.gz ) . - qq(Atom feed); - my $parent = in_reply_to($hdr); $$skel .= "\nThread overview: "; if ($nr <= 1) { if (defined $parent) { - $$skel .= "$expand\n "; - $$skel .= ghost_parent("$tpfx../", $parent) . "\n"; + $$skel .= SKEL_EXPAND."\n "; + $$skel .= ghost_parent('../', $parent) . "\n"; } else { - $$skel .= "[no followups] $expand\n"; + $$skel .= '[no followups] '.SKEL_EXPAND."\n"; } $ctx->{next_msg} = undef; $ctx->{parent_msg} = $parent; return; } - $$skel .= "$nr+ messages / $expand"; - $$skel .= qq! top\n!; + $$skel .= $nr; + $$skel .= '+ messages / '.SKEL_EXPAND.qq! top\n!; # nb: mutt only shows the first Subject in the index pane # when multiple Subject: headers are present, so we follow suit: @@ -761,7 +760,7 @@ sub thread_skel { # reduce hash lookups in skel_dump $ctx->{-obfs_ibx} = $ibx->{obfuscate} ? $ibx : undef; - walk_thread(thread_results($ctx, $msgs), $ctx, *skel_dump); + walk_thread(thread_results($ctx, $msgs), $ctx, \&skel_dump); $ctx->{parent_msg} = $parent; } @@ -799,17 +798,17 @@ sub _parent_headers { $rv; } +# returns a string buffer via ->getline sub html_footer { - my ($hdr, $standalone, $ctx, $rhref) = @_; - - my $ibx = $ctx->{-inbox} if $ctx; + my ($ctx) = @_; + my $ibx = $ctx->{-inbox}; + my $hdr = delete $ctx->{hdr}; my $upfx = '../'; - my $tpfx = ''; - my $skel = $standalone ? " index" : ''; - my $irt = ''; - if ($skel && $ibx->over) { + my $skel = " index"; + my $rv = '
';
+	if ($ibx->over) {
 		$skel .= "\n";
-		thread_skel(\$skel, $ctx, $hdr, $tpfx);
+		thread_skel(\$skel, $ctx, $hdr);
 		my ($next, $prev);
 		my $parent = '       ';
 		$next = $prev = '    ';
@@ -838,13 +837,12 @@ sub html_footer {
 		} elsif ($u) { # unlikely
 			$parent = " parent";
 		}
-		$irt = "$next $prev$parent ";
-	} else {
-		$irt = '';
+		$rv .= "$next $prev$parent ";
 	}
-	$rhref ||= '#R';
-	$irt .= qq(reply);
-	$irt .= $skel;
+	$rv .= qq(reply);
+	$rv .= $skel;
+	$rv .= '
'; + $rv .= msg_reply($ctx, $hdr); } sub linkify_ref_no_over { @@ -912,7 +910,7 @@ sub thread_results { if (defined($mid) && scalar(@$rootset) > 1) { $ctx->{root_idx} = -1; my $nr = scalar @$msgs; - walk_thread($rootset, $ctx, *find_mid_root); + walk_thread($rootset, $ctx, \&find_mid_root); my $idx = $ctx->{found_mid_at}; if (defined($idx) && $idx != 0) { my $tip = splice(@$rootset, $idx, 1); @@ -949,7 +947,7 @@ sub dedupe_subject { $omit; } -sub skel_dump { +sub skel_dump { # walk_thread callback my ($ctx, $level, $node) = @_; my $smsg = $node->{smsg} or return _skel_ghost($ctx, $level, $node); @@ -1065,7 +1063,7 @@ sub sort_ds { # accumulate recent topics if search is supported # returns 200 if done, 404 if not -sub acc_topic { +sub acc_topic { # walk_thread callback my ($ctx, $level, $node) = @_; my $mid = $node->{id}; my $x = $node->{smsg} || $ctx->{-inbox}->smsg_by_mid($mid); @@ -1231,9 +1229,9 @@ sub index_topics { my ($ctx) = @_; my $msgs = paginate_recent($ctx, 200); # 200 is our window if (@$msgs) { - walk_thread(thread_results($ctx, $msgs), $ctx, *acc_topic); + walk_thread(thread_results($ctx, $msgs), $ctx, \&acc_topic); } - PublicInbox::WwwStream->response($ctx, dump_topics($ctx), *index_nav); + PublicInbox::WwwStream->response($ctx, dump_topics($ctx), \&index_nav); } sub thread_adj_level {