From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id B99711F8C7 for ; Fri, 27 Aug 2021 12:08:45 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 1/2] www_listing: show ->ALL at top of HTML listing Date: Fri, 27 Aug 2021 12:08:44 +0000 Message-Id: <20210827120845.29682-2-e@80x24.org> In-Reply-To: <20210827120845.29682-1-e@80x24.org> References: <20210827120845.29682-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: It's a special case and we can show it in the HTML display without affecting manifest.js.gz generation. --- lib/PublicInbox/WwwListing.pm | 45 ++++++++++++++++++++++------------- t/extindex-psgi.t | 6 +++++ 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/lib/PublicInbox/WwwListing.pm b/lib/PublicInbox/WwwListing.pm index 8b54d724..eabda98a 100644 --- a/lib/PublicInbox/WwwListing.pm +++ b/lib/PublicInbox/WwwListing.pm @@ -7,22 +7,29 @@ package PublicInbox::WwwListing; use strict; use v5.10.1; use PublicInbox::Hval qw(prurl fmt_ts ascii_html); -use PublicInbox::Linkify; use PublicInbox::GzipFilter qw(gzf_maybe); use PublicInbox::ConfigIter; use PublicInbox::WwwStream; +use URI::Escape qw(uri_escape_utf8); sub ibx_entry { my ($ctx, $ibx, $ce) = @_; - $ce->{description} //= $ibx->description; + my $desc = ascii_html($ce->{description} //= $ibx->description); my $ts = fmt_ts($ce->{-modified} //= $ibx->modified); - my $url = prurl($ctx->{env}, $ibx->{url}); - my $tmp = <<""; -* $ts - $url - $ce->{description} - - if (defined(my $info_url = $ibx->{infourl})) { - $tmp .= ' ' . prurl($ctx->{env}, $info_url) . "\n"; + my ($url, $href); + if (defined($ibx->{url})) { + $url = $href = ascii_html(prurl($ctx->{env}, $ibx->{url})); + } else { + $href = ascii_html(uri_escape_utf8($ibx->{name})) . '/'; + $url = ascii_html($ibx->{name}); + } + my $tmp = <$url + $desc +EOM + if (defined($url = $ibx->{infourl})) { + $url = ascii_html(prurl($ctx->{env}, $url)); + $tmp .= qq( $url\n); } push(@{$ctx->{-list}}, (scalar(@_) == 3 ? # $misc in use, already sorted $tmp : [ $ce->{-modified}, $tmp ] )); @@ -86,19 +93,24 @@ sub add_misc_ibx { # MiscSearch->retry_reopen callback limit => $q->{l} }; $qs .= ' type:inbox'; - if (my $user_query = $q->{'q'}) { + + delete $ctx->{-list}; # reset if retried + my $pi_cfg = $ctx->{www}->{pi_cfg}; + if (defined(my $user_query = $q->{'q'})) { $qs = "( $qs ) AND ( $user_query )"; + } else { # special case for ALL + $ctx->ibx_entry($pi_cfg->ALL // die('BUG: ->ALL expected'), {}); } my $mset = $misc->mset($qs, $opt); # sorts by $MODIFIED (mtime) - delete $ctx->{-list}; # reset if retried - my $pi_cfg = $ctx->{www}->{pi_cfg}; + my $hide_key = $ctx->hide_key; + for my $mi ($mset->items) { my $doc = $mi->get_document; my ($eidx_key) = PublicInbox::Search::xap_terms('Q', $doc); $eidx_key // next; my $ibx = $pi_cfg->lookup_eidx_key($eidx_key) // next; - next if $ibx->{-hide}->{$ctx->hide_key}; - grep(/$re/, @{$ibx->{url}}) or next; + next if $ibx->{-hide}->{$hide_key}; + grep(/$re/, @{$ibx->{url} // []}) or next; $ctx->ibx_entry($ibx, $misc->doc2ibx_cache_ent($doc)); if ($r) { # for descriptions in search_nav_bot my $pct = PublicInbox::Search::get_pct($mi); @@ -203,9 +215,8 @@ sub psgi_triple { @$list = map { $_->[1] } sort { $b->[0] <=> $a->[0] } @$list; } - $list = join("\n", @$list); - my $l = PublicInbox::Linkify->new; - $gzf->zmore('
'.$l->to_html($list));
+		$gzf->zmore('
');
+		$gzf->zmore(join("\n", @$list));
 		$gzf->zmore(mset_footer($ctx, $mset)) if $mset;
 	} else {
 		$gzf->zmore('
no inboxes, yet');
diff --git a/t/extindex-psgi.t b/t/extindex-psgi.t
index d4761641..31b04acd 100644
--- a/t/extindex-psgi.t
+++ b/t/extindex-psgi.t
@@ -28,6 +28,8 @@ run_script([qw(-extindex --all), "$tmpdir/eidx"], $env) or BAIL_OUT;
 [extindex "all"]
 	topdir = $tmpdir/eidx
 	url = http://bogus.example.com/all
+[publicinbox]
+	wwwlisting = all
 EOM
 }
 my $www = PublicInbox::WWW->new(PublicInbox::Config->new($pi_config));
@@ -55,6 +57,10 @@ my $client = sub {
 
 	$res = $cb->(GET('/all/all.mbox.gz'));
 	is($res->code, 200, 'all.mbox.gz');
+
+	$res = $cb->(GET('/'));
+	my $html = $res->content;
+	like($html, qr!\Qhttp://bogus.example.com/all\E!, 'html shows /all');
 };
 test_psgi(sub { $www->call(@_) }, $client);
 %$env = (%$env, TMPDIR => $tmpdir, PI_CONFIG => $pi_config);