From 3bbdfec9ec5ddb2576129d7d210ce451ea2af5fe Mon Sep 17 00:00:00 2001 From: SansGuidon Date: Thu, 7 Aug 2025 09:49:59 +0000 Subject: [PATCH] add(miniflux): custom js for feed count sort controls --- miniflux_scripts/feed_count_sort_controls.js | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 miniflux_scripts/feed_count_sort_controls.js diff --git a/miniflux_scripts/feed_count_sort_controls.js b/miniflux_scripts/feed_count_sort_controls.js new file mode 100644 index 0000000..668af62 --- /dev/null +++ b/miniflux_scripts/feed_count_sort_controls.js @@ -0,0 +1,32 @@ +// feed count sort controls +(function() { + 'use strict'; + if (!window.location.href.match(/\/feeds$/)) return; + function parseTotal(feed) { + const spans = feed.querySelectorAll('.feed-entries-counter span[aria-hidden="true"]'); + return spans[3] ? parseInt(spans[3].textContent, 10) : 0; + } + function sortFeeds(desc) { + const feeds = Array.from(document.querySelectorAll('article.item.feed-item')); + if (!feeds.length) return; + const parent = feeds[0].parentNode; + feeds + .sort((a, b) => desc + ? parseTotal(b) - parseTotal(a) + : parseTotal(a) - parseTotal(b) + ) + .forEach(f => parent.appendChild(f)); + } + const navList = document.querySelector('nav[aria-label="Feeds Menu"] ul'); + if (!navList) return; + ['↑', '↓'].forEach((arrow, idx) => { + const li = document.createElement('li'); + const btn = document.createElement('button'); + btn.className = 'page-link'; + btn.type = 'button'; + btn.textContent = `Entries ${arrow}`; + btn.onclick = () => sortFeeds(idx === 1); + li.appendChild(btn); + navList.appendChild(li); + }); +})(); \ No newline at end of file