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 19F641F8C6; Wed, 18 Aug 2021 11:41:02 +0000 (UTC) Date: Wed, 18 Aug 2021 11:41:02 +0000 From: Eric Wong To: Konstantin Ryabitsev Cc: meta@public-inbox.org Subject: [RFC] wwwlisting: support global CSS in HTML view Message-ID: <20210818114101.GA16775@dcvr> References: <20210817145342.iqopuq3y2vqj3uz2@nitro.local> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20210817145342.iqopuq3y2vqj3uz2@nitro.local> List-Id: Konstantin Ryabitsev wrote: > Hello: > > Just noticed that the wwwlisting page doesn't apply any css stylesheets > (currently still on https://x-lore.kernel.org/lists.html ). It should do the > same thing as any other page view, e.g. so it can properly respect the client > prefers-color-scheme choices. Ah, I intended /$INBOX/$FOO.css to be easily overridable on a per-inbox basis so different inboxes could have different color schemes for ease-of-identification. Maybe "/+/" (as in "/+/$FOO.css") is a good URL path prefix... ----------8<-------- Subject: [PATCH] wwwlisting: support global CSS in HTML view Since CSS can be overridden by a static webserver on a per-inbox basis, we need a similar pattern to deal with the instance-wide WwwListing HTML. "/+/" probably won't conflict with any current nor future public inbox names. I don't think it'll cause problems with common linkifiers or URL extractors, either (and it's unlikely anybody would want to share URLs of just the CSS in a plain text(-like) format). --- lib/PublicInbox/WWW.pm | 13 ++++++++----- lib/PublicInbox/WwwListing.pm | 6 +++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm index 841a7e85..1afdece0 100644 --- a/lib/PublicInbox/WWW.pm +++ b/lib/PublicInbox/WWW.pm @@ -133,7 +133,8 @@ sub call { # convenience redirects order matters } elsif ($path_info =~ m!$INBOX_RE/([^/]{2,})\z!o) { r301($ctx, $1, $2); - + } elsif ($path_info =~ m!\A/\+/([a-zA-Z0-9_\-\.]+)\.css\z!) { + get_css($ctx, undef, $1); # for WwwListing } else { legacy_redirects($ctx, $path_info); } @@ -627,18 +628,20 @@ sub style { }; } -# /$INBOX/$KEY.css endpoint +# /$INBOX/$KEY.css and /+/$KEY.css endpoints # CSS is configured globally for all inboxes, but we access them on # a per-inbox basis. This allows administrators to setup per-inbox # static routes to intercept the request before it hits PSGI +# inbox == undef => top-level WwwListing sub get_css ($$$) { my ($ctx, $inbox, $key) = @_; - my $r404 = invalid_inbox($ctx, $inbox); + my $r404 = defined($inbox) ? invalid_inbox($ctx, $inbox) : undef; return $r404 if $r404; my $self = $ctx->{www}; - my $css_map = $self->{-css_map} || stylesheets_prepare($self, ''); + my $css_map = $self->{-css_map} || + stylesheets_prepare($self, defined($inbox) ? '' : '+/'); my $css = $css_map->{$key}; - if (!defined($css) && $key eq 'userContent') { + if (!defined($css) && defined($inbox) && $key eq 'userContent') { my $env = $ctx->{env}; $css = PublicInbox::UserContent::sample($ctx->{ibx}, $env); } diff --git a/lib/PublicInbox/WwwListing.pm b/lib/PublicInbox/WwwListing.pm index 98a69986..a31aa4ca 100644 --- a/lib/PublicInbox/WwwListing.pm +++ b/lib/PublicInbox/WwwListing.pm @@ -190,9 +190,9 @@ sub psgi_triple { my $h = [ 'Content-Type', 'text/html; charset=UTF-8', 'Content-Length', undef ]; my $gzf = gzf_maybe($h, $ctx->{env}); - $gzf->zmore('' . - 'public-inbox listing' . - ''); + $gzf->zmore('public-inbox listing' . + $ctx->{www}->style('+/') . + ''); my $code = 404; if (my $list = delete $ctx->{-list}) { my $mset = delete $ctx->{-mset};