unofficial mirror of meta@public-inbox.org
 help / color / mirror / Atom feed
From: Eric Wong <e@80x24.org>
To: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Cc: meta@public-inbox.org
Subject: [RFC] wwwlisting: support global CSS in HTML view
Date: Wed, 18 Aug 2021 11:41:02 +0000	[thread overview]
Message-ID: <20210818114101.GA16775@dcvr> (raw)
In-Reply-To: <20210817145342.iqopuq3y2vqj3uz2@nitro.local>

Konstantin Ryabitsev <konstantin@linuxfoundation.org> 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('<html><head><title>' .
-				'public-inbox listing</title>' .
-				'</head><body>');
+	$gzf->zmore('<html><head><title>public-inbox listing</title>' .
+			$ctx->{www}->style('+/') .
+			'</head><body>');
 	my $code = 404;
 	if (my $list = delete $ctx->{-list}) {
 		my $mset = delete $ctx->{-mset};


  reply	other threads:[~2021-08-18 11:41 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-17 14:53 Bug: wwwlisting doesn't get css styling Konstantin Ryabitsev
2021-08-18 11:41 ` Eric Wong [this message]
2021-08-26 12:36   ` [RFC] wwwlisting: support global CSS in HTML view Eric Wong
2021-08-26 13:51     ` Konstantin Ryabitsev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://public-inbox.org/README

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210818114101.GA16775@dcvr \
    --to=e@80x24.org \
    --cc=konstantin@linuxfoundation.org \
    --cc=meta@public-inbox.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).