about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2015-08-17 02:41:10 +0000
committerEric Wong <e@80x24.org>2015-08-17 03:13:31 +0000
commit07a768b9de068ddd8f7ea17fe242839c77210510 (patch)
tree4bf88e89385250b1c9a30295fa740a5ed6b0e75d /lib
parentfaa0459760f4f9b37bd6beba5087eb70d06fd973 (diff)
downloadpublic-inbox-07a768b9de068ddd8f7ea17fe242839c77210510.tar.gz
/t/ always falls back to subject path searching anyways,
so there's little lost besides perhaps more readable URLs.
Unfortunately people still use non-compliant mail clients which fail
to set In-Reply-To or References headers :<
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/Feed.pm2
-rw-r--r--lib/PublicInbox/View.pm53
-rw-r--r--lib/PublicInbox/WWW.pm2
3 files changed, 32 insertions, 25 deletions
diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm
index 1a89fbad..5a41beaa 100644
--- a/lib/PublicInbox/Feed.pm
+++ b/lib/PublicInbox/Feed.pm
@@ -76,7 +76,7 @@ sub generate_html_index {
         $th->order(*PublicInbox::Thread::sort_ts);
 
         # except we sort top-level messages reverse chronologically
-        my $state = [ undef, {}, $first, 0 ];
+        my $state = [ $args->{srch}, {}, $first, 0 ];
         for (PublicInbox::Thread::rsort_ts($th->rootset)) {
                 dump_msg($_, 0, \$html, $state)
         }
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 47082431..49609351 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -48,7 +48,7 @@ sub feed_entry {
 # state = [ time, seen = {}, first_commit, page_nr = 0 ]
 sub index_entry {
         my (undef, $mime, $level, $state) = @_;
-        my (undef, $seen, $first_commit) = @$state;
+        my ($srch, $seen, $first_commit) = @$state;
         my $midx = $state->[3]++;
         my ($prev, $next) = ($midx - 1, $midx + 1);
         my $rv = '';
@@ -75,10 +75,26 @@ sub index_entry {
         my $more = 'permalink';
         if ($root_anchor) {
                 $path = '../';
-                $subj = "<u\nid=\"u\">$subj</u>" if $root_anchor eq $id;
         } else {
                 $path = '';
         }
+        my $href = $mid->as_href;
+        my $irt = $header_obj->header_raw('In-Reply-To');
+        my ($anchor_idx, $anchor, $t_anchor);
+        if (defined $irt) {
+                $anchor_idx = anchor_for($irt);
+                $anchor = $seen->{$anchor_idx};
+                $t_anchor = T_ANCHOR;
+        } else {
+                $t_anchor = '';
+        }
+
+        if (defined $srch) {
+                $subj = "<a\nhref=\"${path}t/$href.html#u\">$subj</a>";
+        }
+        if ($root_anchor && $root_anchor eq $id) {
+                $subj = "<u\nid=\"u\">$subj</u>";
+        }
 
         my $ts = $mime->header('X-PI-TS');
         my $fmt = '%Y-%m-%d %H:%M UTC';
@@ -92,16 +108,6 @@ sub index_entry {
         }
         $rv .= "\n\n";
 
-        my $irt = $header_obj->header_raw('In-Reply-To');
-        my ($anchor_idx, $anchor, $t_anchor);
-        if (defined $irt) {
-                $anchor_idx = anchor_for($irt);
-                $anchor = $seen->{$anchor_idx};
-                $t_anchor = T_ANCHOR;
-        } else {
-                $t_anchor = '';
-        }
-        my $href = $mid->as_href;
         my $mhref = "${path}m/$href.html";
         my $fhref = "${path}f/$href.html";
         # scan through all parts, looking for displayable text
@@ -126,8 +132,8 @@ sub index_entry {
                 $rv .= " <a\nhref=\"$anchor\">parent</a>";
         }
 
-        if ($first_commit) {
-                $rv .= " <a\nhref=\"t/$href.html$t_anchor\">thread</a>";
+        if ($srch) {
+                $rv .= " <a\nhref=\"${path}t/$href.html$t_anchor\">thread</a>";
         }
 
         $rv . "\n\n";
@@ -145,7 +151,7 @@ sub thread_html {
         my $th = PublicInbox::Thread->new(@$msgs);
         $th->thread;
         $th->order(*PublicInbox::Thread::sort_ts);
-        my $state = [ undef, { root_anchor => anchor_for($mid) }, undef, 0 ];
+        my $state = [ $srch, { root_anchor => anchor_for($mid) }, undef, 0 ];
         thread_entry(\$rv, $state, $_, 0) for $th->rootset;
         my $final_anchor = $state->[3];
         my $next = "<a\nid=\"s$final_anchor\">end of thread</a>\n";
@@ -165,7 +171,7 @@ sub subject_path_html {
         my $th = PublicInbox::Thread->new(@$msgs);
         $th->thread;
         $th->order(*PublicInbox::Thread::sort_ts);
-        my $state = [ undef, { root_anchor => 'dummy' }, undef, 0 ];
+        my $state = [ $srch, { root_anchor => 'dummy' }, undef, 0 ];
         thread_entry(\$rv, $state, $_, 0) for $th->rootset;
         my $final_anchor = $state->[3];
         my $next = "<a\nid=\"s$final_anchor\">end of thread</a>\n";
@@ -340,6 +346,10 @@ sub headers_to_html_header {
 
         my $rv = "";
         my @title;
+        my $header_obj = $mime->header_obj;
+        my $mid = $header_obj->header_raw('Message-ID');
+        $mid = PublicInbox::Hval->new_msgid($mid);
+        my $mid_href = $mid->as_href;
         foreach my $h (qw(From To Cc Subject Date)) {
                 my $v = $mime->header($h);
                 defined($v) && length($v) or next;
@@ -351,8 +361,7 @@ sub headers_to_html_header {
                 } elsif ($h eq 'Subject') {
                         $title[0] = $v->as_html;
                         if ($srch) {
-                                my $path = $srch->subject_path($v->raw);
-                                $rv .= "$h: <a\nhref=\"../s/$path.html\">";
+                                $rv .= "$h: <a\nhref=\"../t/$mid_href.html\">";
                                 $rv .= $v->as_html . "</a>\n";
                                 next;
                         }
@@ -361,13 +370,9 @@ sub headers_to_html_header {
 
         }
 
-        my $header_obj = $mime->header_obj;
-        my $mid = $header_obj->header_raw('Message-ID');
-        $mid = PublicInbox::Hval->new_msgid($mid);
         $rv .= 'Message-ID: &lt;' . $mid->as_html . '&gt; ';
-        my $href = $mid->as_href;
-        $href = "../m/$href" unless $full_pfx;
-        $rv .= "(<a\nhref=\"$href.txt\">raw</a>)\n";
+        $mid_href = "../m/$mid_href" unless $full_pfx;
+        $rv .= "(<a\nhref=\"$mid_href.txt\">raw</a>)\n";
 
         my $irt = $header_obj->header_raw('In-Reply-To');
         if (defined $irt) {
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index bbd438a2..50215095 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -126,8 +126,10 @@ sub get_atom {
 sub get_index {
         my ($ctx, $cgi, $top) = @_;
         require PublicInbox::Feed;
+        my $srch = searcher($ctx);
         [ 200, [ 'Content-Type' => 'text/html; charset=UTF-8' ],
           [ PublicInbox::Feed->generate_html_index({
+                        srch => $srch,
                         git_dir => $ctx->{git_dir},
                         listname => $ctx->{listname},
                         pi_config => $pi_config,