]> Sergey Matveev's repositories - public-inbox.git/commitdiff
www_listing: support /all/ search as a 302 redirect
authorEric Wong <e@80x24.org>
Sun, 26 Sep 2021 01:30:47 +0000 (01:30 +0000)
committerEric Wong <e@80x24.org>
Sun, 26 Sep 2021 01:43:27 +0000 (01:43 +0000)
This allows users to search /all/ from the top-level WwwListing
without extra manual steps, although there's still extra network
roundtrips incurred.

No vertical whitespace is added, and there's no clumsy radio
buttons nor menus to deal with.  Users only have to use a
different <input type=submit /> button.  I forgot how to do this
until I realized we already do something similar with multiple
submit buttons for threaded vs non-threaded mboxrd.gz downloads.

Link: https://public-inbox.org/meta/20210827120845.29682-1-e@80x24.org/
lib/PublicInbox/WwwListing.pm

index a9290802397eb40d0f0d4df9beb43a098299f901..79c0a8ec209ff37081086f6a301114538e7a8ef4 100644 (file)
@@ -11,6 +11,7 @@ use PublicInbox::GzipFilter qw(gzf_maybe);
 use PublicInbox::ConfigIter;
 use PublicInbox::WwwStream;
 use URI::Escape qw(uri_escape_utf8);
+use PublicInbox::MID qw(mid_escape);
 
 sub ibx_entry {
        my ($ctx, $ibx, $ce) = @_;
@@ -135,6 +136,13 @@ sub response {
        my ($re, $qs) = $ctx->url_filter;
        $re // return $ctx->psgi_triple;
        if (my $ALL = $ctx->{www}->{pi_cfg}->ALL) { # fast path
+               if ($ctx->{qp}->{a} && # "search all inboxes"
+                               $ctx->{qp}->{'q'}) {
+                       my $u = 'all/?q='.mid_escape($ctx->{qp}->{'q'});
+                       return [ 302, [ 'Location' => $u,
+                               qw(Content-Type text/plain) ],
+                               [ "Redirecting to $u\n" ] ];
+               }
                # FIXME: test this in t/
                $ALL->misc->reopen->retry_reopen(\&add_misc_ibx,
                                                $ctx, $re, $qs);
@@ -166,11 +174,10 @@ sub mset_nav_top {
        $qh = qq[\nvalue="$qh"] if $qh ne '';
        my $rv = <<EOM;
 <form
-action="./"><pre><input
-name=q
-type=text$qh /><input
-type=submit
-value="locate inbox" /></pre></form><pre>
+action="./"><pre><input name=q type=text$qh
+/><input type=submit value="locate inbox"
+/><input type=submit name=a value="search all inboxes"
+/></pre></form><pre>
 EOM
        chomp $rv;
        if (defined($q->{'q'})) {