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. --- app/Models/SimplePieCustom.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/Models/SimplePieCustom.php b/app/Models/SimplePieCustom.php index 44e5b030e..849b23a7b 100644 --- a/app/Models/SimplePieCustom.php +++ b/app/Models/SimplePieCustom.php @@ -47,7 +47,7 @@ final class FreshRSS_SimplePieCustom extends \SimplePie\SimplePie $this->set_curl_options($curl_options); $this->strip_comments(true); - $this->rename_attributes(['id', 'class']); + $this->rename_attributes(['class']); $this->allow_aria_attr(true); $this->allow_data_attr(true); $this->allowed_html_attributes([ @@ -121,7 +121,7 @@ final class FreshRSS_SimplePieCustom extends \SimplePie\SimplePie 'kbd' => [], 'label' => [], 'legend' => [], - 'li' => ['value', 'type'], + 'li' => ['id', 'value', 'type'], 'main' => [], // 'map' => [], // TODO: support after rewriting ids with a format like #ugc- (maybe) 'mark' => [], -- cgit v1.2.3