From aab52593acc2a96c772808b28daa18a366a310a9 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Sun, 8 Feb 2026 17:11:46 -0500 Subject: Don’t break NetNewsWire’s footnote detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If NetNewsWire detects that a link points to a footnote within the same post, then tapping on that link will produce a popover displaying the text of said footnote. Otherwise, it is treated as a regular link and opened in the default web browser. Detecting a footnote requires two things: 1. The link URL must consist only of a fragment (i.e. it begins with `#`). 2. There must exist another element (typically `
  • `) in the post’s HTML with an `id` attribute matching the fragment (that is, the text after `#`). Because FreshRSS’s web frontend can display multiple articles at once, all relative URLs (including bare fragments) are automatically converted to absolute URLs at ingestion time, and `id` attributes are replaced with `data-sanitized-id` attributes. These changes avoid conflicts in the web UI, but they break NNW’s footnote detection. Since I use FreshRSS solely as a backend service for NNW (and other clients), it is reasonable for me to disable those two sanitization steps in order to take full advantage of NNW’s features. Remove `id` from the list of attributes to rename, and add it to the list of allowed attributes for `
  • ` elements (as otherwise, it would be stripped entirely). Convert the `absolutize_url()` function into a no-op if the relative URL provided appears to be a local fragment. --- lib/simplepie/simplepie/src/Misc.php | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lib') diff --git a/lib/simplepie/simplepie/src/Misc.php b/lib/simplepie/simplepie/src/Misc.php index a31c22bb2..d72a69a88 100644 --- a/lib/simplepie/simplepie/src/Misc.php +++ b/lib/simplepie/simplepie/src/Misc.php @@ -50,6 +50,10 @@ class Misc */ public static function absolutize_url(string $relative, string $base) { + if (str_starts_with($relative, "#")) { + return $relative; + } + $iri = \SimplePie\IRI::absolutize(new \SimplePie\IRI($base), $relative); if ($iri === false) { return false; -- cgit v1.2.3