user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH] www: stop generating /$MESSAGE_ID/f/ links
@ 2016-04-13  3:04  7% Eric Wong
  0 siblings, 0 replies; 1+ results
From: Eric Wong @ 2016-04-13  3:04 UTC (permalink / raw)
  To: meta

Quote-folding can be detrimental as it fails to hide the
real problem of over-quoting.

Over-quoting wastes bandwidth and space for all readers, not
just WWW readers of the public-inbox.  So hopefully removing
quote-folding support from the WWW interface can shame those
repliers into quoting only relevant portions of what they reply
to.
---
 Documentation/design_www.txt |  4 +--
 lib/PublicInbox/Feed.pm      |  2 +-
 lib/PublicInbox/View.pm      | 75 ++++++++++----------------------------------
 t/feed.t                     |  4 +--
 t/view.t                     | 12 -------
 5 files changed, 21 insertions(+), 76 deletions(-)

diff --git a/Documentation/design_www.txt b/Documentation/design_www.txt
index 1be4d18..980b2ea 100644
--- a/Documentation/design_www.txt
+++ b/Documentation/design_www.txt
@@ -11,13 +11,13 @@ URL naming
 /$LISTNAME/$MESSAGE_ID/t.mbox.gz          -> gzipped mbox of thread
 
 ### Stable endpoints
-/$LISTNAME/$MESSAGE_ID/                   -> HTML content (short quotes)
+/$LISTNAME/$MESSAGE_ID/                   -> HTML content
 /$LISTNAME/$MESSAGE_ID                    -> 301 to /$LISTNAME/$MESSAGE_ID
 /$LISTNAME/$MESSAGE_ID/raw                -> raw mbox
-/$LISTNAME/$MESSAGE_ID/f/                 -> HTML content (full quotes)
 /$LISTNAME/$MESSAGE_ID/R/                 -> HTML reply instructions
 
 ### Legacy endpoints (may be ambiguous given Message-IDs with similar suffixes)
+/$LISTNAME/$MESSAGE_ID/f/                 -> HTML content
 /$LISTNAME/m/$MESSAGE_ID/                 -> 301 to /$LISTNAME/$MESSAGE_ID/
 /$LISTNAME/m/$MESSAGE_ID.html             -> 301 to /$LISTNAME/$MESSAGE_ID/
 /$LISTNAME/m/$MESSAGE_ID.txt              -> 301 to /$LISTNAME/$MESSAGE_ID/raw
diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm
index 54fa6e5..096bff9 100644
--- a/lib/PublicInbox/Feed.pm
+++ b/lib/PublicInbox/Feed.pm
@@ -316,7 +316,7 @@ sub add_to_feed {
 	defined $mid or return 0;
 	$mid = PublicInbox::Hval->new_msgid($mid);
 	my $href = $mid->as_href;
-	my $content = PublicInbox::View->feed_entry($mime, "$midurl$href/f/");
+	my $content = PublicInbox::View->feed_entry($mime);
 	defined($content) or return 0;
 	$mime = undef;
 
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 2f718b7..77b42b2 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -135,17 +135,11 @@ sub index_entry {
 	my $fh = $state->{fh};
 	$fh->write($rv .= "- $from @ $ts UTC (<a\nhref=\"$txt\">raw</a>)\n\n");
 
-	my $fhref;
 	my $mhref = "${path}$href/";
 
-	# show full message if it's our root message
-	my $neq = $root_anchor ne $id;
-	if ($neq || ($neq && $level != 0 && !$ctx->{flat})) {
-		$fhref = "${path}$href/f/";
-	}
 	# scan through all parts, looking for displayable text
 	$mime->walk_parts(sub {
-		index_walk($fh, $_[0], $enc, \$part_nr, $fhref);
+		index_walk($fh, $_[0], $enc, \$part_nr);
 	});
 	$mime->body_set('');
 	$rv = "\n" . html_footer($hdr, 0, undef, $ctx, $mhref);
@@ -231,8 +225,8 @@ sub emit_thread_html {
 }
 
 sub index_walk {
-	my ($fh, $part, $enc, $part_nr, $fhref) = @_;
-	my $s = add_text_body($enc, $part, $part_nr, $fhref, 1);
+	my ($fh, $part, $enc, $part_nr) = @_;
+	my $s = add_text_body($enc, $part, $part_nr, 1);
 
 	return if $s eq '';
 
@@ -264,7 +258,7 @@ sub multipart_text_as_html {
 	# scan through all parts, looking for displayable text
 	$mime->walk_parts(sub {
 		my ($part) = @_;
-		$part = add_text_body($enc, $part, \$part_nr, $full_pfx, 1);
+		$part = add_text_body($enc, $part, \$part_nr, 1);
 		$rv .= $part;
 		$rv .= "\n" if $part ne '';
 	});
@@ -283,55 +277,21 @@ sub add_filename_line {
 }
 
 sub flush_quote {
-	my ($quot, $n, $part_nr, $full_pfx, $final, $do_anchor) = @_;
-
-	# n.b.: do not use <blockquote> since it screws up alignment
-	# w.r.t. unquoted text.  Repliers may rely on pre-formatted
-	# alignment to point out a certain word in quoted text.
-	if ($full_pfx) {
-		if (!$final && scalar(@$quot) <= MAX_INLINE_QUOTED) {
-			# show quote inline
-			my $l = PublicInbox::Linkify->new;
-			my $rv = join('', map { $l->linkify_1($_) } @$quot);
-			@$quot = ();
-			$rv = ascii_html($rv);
-			return $l->linkify_2($rv);
-		}
+	my ($quot, $n, $part_nr, $final, $do_anchor) = @_;
 
-		# show a short snippet of quoted text and link to full version:
-		@$quot = map { s/^(?:>\s*)+//gm; $_ } @$quot;
-		my $cur = join(' ', @$quot);
-		@$quot = split(/\s+/, $cur);
-		$cur = '';
-		do {
-			my $tmp = shift(@$quot);
-			my $len = length($tmp) + length($cur);
-			if ($len > MAX_TRUNC_LEN) {
-				@$quot = ();
-			} else {
-				$cur .= $tmp . ' ';
-			}
-		} while (@$quot && length($cur) < MAX_TRUNC_LEN);
-		@$quot = ();
-		$cur =~ s/ \z/ .../s;
-		$cur = ascii_html($cur);
-		my $nr = ++$$n;
-		"&gt; [<a\nhref=\"$full_pfx#q${part_nr}_$nr\">$cur</a>]\n";
-	} else {
-		# show everything in the full version with anchor from
-		# short version (see above)
-		my $l = PublicInbox::Linkify->new;
-		my $rv .= join('', map { $l->linkify_1($_) } @$quot);
-		@$quot = ();
-		$rv = ascii_html($rv);
-		return $l->linkify_2($rv) unless $do_anchor;
-		my $nr = ++$$n;
-		"<a\nid=q${part_nr}_$nr></a>" . $l->linkify_2($rv);
-	}
+	# show everything in the full version with anchor from
+	# short version (see above)
+	my $l = PublicInbox::Linkify->new;
+	my $rv .= join('', map { $l->linkify_1($_) } @$quot);
+	@$quot = ();
+	$rv = ascii_html($rv);
+	return $l->linkify_2($rv) unless $do_anchor;
+	my $nr = ++$$n;
+	qq(<a\nid="q${part_nr}_$nr"></a>) . $l->linkify_2($rv);
 }
 
 sub add_text_body {
-	my ($enc_msg, $part, $part_nr, $full_pfx, $do_anchor) = @_;
+	my ($enc_msg, $part, $part_nr, $do_anchor) = @_;
 	return '' if $part->subparts;
 
 	my $ct = $part->content_type;
@@ -361,7 +321,7 @@ sub add_text_body {
 			# show the previously buffered quote inline
 			if (scalar @quot) {
 				$s .= flush_quote(\@quot, \$n, $$part_nr,
-						  $full_pfx, 0, $do_anchor);
+						  0, $do_anchor);
 			}
 
 			# regular line, OK
@@ -374,8 +334,7 @@ sub add_text_body {
 		}
 	}
 	if (scalar @quot) {
-		$s .= flush_quote(\@quot, \$n, $$part_nr, $full_pfx, 1,
-				  $do_anchor);
+		$s .= flush_quote(\@quot, \$n, $$part_nr, 1, $do_anchor);
 	}
 	++$$part_nr;
 
diff --git a/t/feed.t b/t/feed.t
index 73b7d0b..2096b73 100644
--- a/t/feed.t
+++ b/t/feed.t
@@ -76,9 +76,7 @@ EOF
 				"id is set to default");
 		}
 
-		unlike($feed, qr/drop me/, "long quoted text dropped");
-		like($feed, qr!/\d%40example\.com/f/#q!,
-			"/f/ url generated for long quoted text");
+		like($feed, qr/drop me/, "long quoted text kept");
 		like($feed, qr/inline me here/, "short quoted text kept");
 		like($feed, qr/keep me/, "unquoted text saved");
 	}
diff --git a/t/view.t b/t/view.t
index 568ab30..2da741a 100644
--- a/t/view.t
+++ b/t/view.t
@@ -49,18 +49,6 @@ EOF
 	like($html, qr/&gt; keep this inline/, "short quoted text is inline");
 	like($html, qr/<a\nid=[^>]+><\/a>&gt; Long and wordy/,
 		"long quoted text is anchored");
-
-	# short page
-	my $pfx = "../hello%40example.com/f/";
-	$mime = Email::MIME->new($s);
-	my $short = PublicInbox::View::msg_html(undef, $mime, $pfx);
-	like($short, qr!<a\nhref="\.\./hello%40example\.com/f/!s,
-		"MID link present");
-	like($short, qr/\n&gt; keep this inline/,
-		"short quoted text is inline");
-	like($short, qr/<a\nhref="\Q$pfx\E#[^>]+>Long and wordy/,
-		"long quoted text is made into a link");
-	ok(length($short) < length($html), "short page is shorter");
 }
 
 # multipart crap
-- 
EW


^ permalink raw reply related	[relevance 7%]

Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2016-04-13  3:04  7% [PATCH] www: stop generating /$MESSAGE_ID/f/ links Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

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).