about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-10-24 00:12:39 +0000
committerEric Wong <e@80x24.org>2019-10-28 10:49:11 +0000
commita8ae7e31ac36bcda04bf13a1b834207a89b0014c (patch)
tree1a75f61f9e65e33d52ab97a247a5bcff0ae7a21c
parent287581c287bab24118b65c00e5f3c5af86fe0205 (diff)
downloadpublic-inbox-a8ae7e31ac36bcda04bf13a1b834207a89b0014c.tar.gz
And use it for the per-message permalink display.
-rw-r--r--lib/PublicInbox/Linkify.pm10
-rw-r--r--lib/PublicInbox/View.pm13
2 files changed, 11 insertions, 12 deletions
diff --git a/lib/PublicInbox/Linkify.pm b/lib/PublicInbox/Linkify.pm
index 5b83742c..af9be3ff 100644
--- a/lib/PublicInbox/Linkify.pm
+++ b/lib/PublicInbox/Linkify.pm
@@ -92,7 +92,7 @@ sub linkify_2 {
 # single pass linkification of <Message-ID@example.com> within $str
 # with $pfx being the URL prefix
 sub linkify_mids {
-        my ($self, $pfx, $str) = @_;
+        my ($self, $pfx, $str, $raw) = @_;
         $$str =~ s!<([^>]+)>!
                 my $msgid = PublicInbox::Hval->new_msgid($1);
                 my $html = $msgid->as_html;
@@ -102,15 +102,17 @@ sub linkify_mids {
                 # salt this, as this could be exploited to show
                 # links in the HTML which don't show up in the raw mail.
                 my $key = sha1_hex($html . $SALT);
-                $self->{$key} = [ $href, $html ];
-                '<PI-LINK-'. $key . '>';
+                my $repl = qq(&lt;<a\nhref="$pfx/$href/">$html</a>&gt;);
+                $repl .= qq{ (<a\nhref="$pfx/$href/raw">raw</a>)} if $raw;
+                $self->{$key} = $repl;
+                'PI-LINK-'. $key;
                 !ge;
         $$str = ascii_html($$str);
         $$str =~ s!\bPI-LINK-([a-f0-9]{40})\b!
                 my $key = $1;
                 my $repl = $_[0]->{$key};
                 if (defined $repl) {
-                        "<a\nhref=\"$pfx/$repl->[0]/\">$repl->[1]</a>";
+                        $repl;
                 } else {
                         # false positive or somebody tried to mess with us
                         $key;
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index ff55596d..00bf38a9 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -691,14 +691,11 @@ sub _msg_html_prepare {
                 $rv .= "Message-ID: &lt;$mhtml&gt; ";
                 $rv .= "(<a\nhref=\"raw\">raw</a>)\n";
         } else {
-                foreach (@$mids) {
-                        my $mid = PublicInbox::Hval->new_msgid($_);
-                        my $mhtml = $mid->as_html;
-                        my $href = $mid->{href};
-                        $rv .= "Message-ID: ";
-                        $rv .= "&lt;<a\nhref=\"../$href/\">$mhtml</a>&gt; ";
-                        $rv .= "(<a\nhref=\"../$href/raw\">raw</a>)\n";
-                }
+                my $lnk = PublicInbox::Linkify->new;
+                my $s = '';
+                $s .= "Message-ID: $_\n" for ($hdr->header_raw('Message-ID'));
+                $lnk->linkify_mids('..', \$s, 1);
+                $rv .= $s;
         }
         $rv .= _parent_headers($hdr, $over);
         $rv .= "\n";