fix: stop "Mark topics read" from becoming a stuck-open list section

Its link sits inside a category cell but in an inner row with no
nested table, so it slipped past the layout-row guard and got read as
a genuine category heading. Unlike a real heading it never got the
group machinery that makes Announcements and Stickies collapsible, so
it just sat there permanently open with no way to close it.
This commit is contained in:
Andre
2026-08-02 16:28:57 +02:00
parent aec883e7c9
commit 0d2731eaa9
2 changed files with 29 additions and 7 deletions
+17 -2
View File
@@ -72,8 +72,23 @@ Rutsch ein und ordnet jede `tr` nach ihrem ersten verwertbaren Link zu. Eine
Forenzeile verlinkt in der Spalte „letzter Beitrag" ebenfalls `viewtopic.php` — Forenzeile verlinkt in der Spalte „letzter Beitrag" ebenfalls `viewtopic.php` —
zaehlte man Themenlinks zuerst, faellt die Zeile als Thema an, der Forenname zaehlte man Themenlinks zuerst, faellt die Zeile als Thema an, der Forenname
verschwindet und nur die Beschreibung bleibt als `.rm-last` uebrig. Genau so verschwindet und nur die Beschreibung bleibt als `.rm-last` uebrig. Genau so
war es vor 3.2. Brotkrumen und „Mark forums read" verlinken ebenfalls Foren, war es vor 3.2. Brotkrumen verlinken ebenfalls Foren, stehen aber in Zeilen
stehen aber in Zeilen ohne Forenmerkmale und werden verworfen. ohne Forenmerkmale und werden verworfen.
**„Mark topics read" braucht eine eigene Bremse, „Mark forums read" nicht.**
Beide sind reine Aktionslinks, keine Inhaltslinks, aber nur „Mark forums read"
zeigt auf `index.php` und faellt schon beim Einsammeln durch, weil das keine
der gesuchten Adressen ist. „Mark topics read" oberhalb der Themenliste zeigt
dagegen mit `?mark=topics` auf dieselbe `viewforum.php`-Seite und passt damit
auf den Sammel-Selektor. Sein Link liegt zwar in einer eigenen inneren `tr`
ohne verschachtelte Tabelle, `a.closest('td.cat')` findet aber trotzdem die
aeussere Kategoriezelle drumherum — bis 3.7 wurde daraus eine dauerhafte,
nicht einklappbare `.rm-sec`-Karte oberhalb von Global Announcements statt gar
keiner. `rowKind()` verwirft seit 3.8 jeden Link mit `?mark=` oder `&mark=`
in der Adresse, bevor die uebrige Klassifizierung ueberhaupt beginnt. Das
Repository hat keine eingeloggte `viewforum.php`-Fixture, die diesen Link mit
echtem Markup zeigt — geprueft ist die Bremse nur gegen den vermuteten
`mark=topics`-Parameter, per Texteinfuegung in `dev/viewforum.php`.
**Der Typ einer Themenzeile steht im Symbol, nicht am Titel.** `rinDark` **Der Typ einer Themenzeile steht im Symbol, nicht am Titel.** `rinDark`
unterscheidet `global_read.png`, `announce_read.png`, `sticky_read.png` und unterscheidet `global_read.png`, `announce_read.png`, `sticky_read.png` und
+12 -5
View File
@@ -1,7 +1,7 @@
// ==UserScript== // ==UserScript==
// @name RIN Mobile // @name RIN Mobile
// @description Mobile Ansicht fuer cs.rin.ru: Themenlisten als Karten, Threads als Beitragsstrom // @description Mobile Ansicht fuer cs.rin.ru: Themenlisten als Karten, Threads als Beitragsstrom
// @version 3.7 // @version 3.8
// @match *://cs.rin.ru/forum/* // @match *://cs.rin.ru/forum/*
// @run-at document-start // @run-at document-start
// ==/UserScript== // ==/UserScript==
@@ -905,12 +905,19 @@
} }
// Welche Karte eine Zeile ergibt, entscheidet der erste verwertbare Link // Welche Karte eine Zeile ergibt, entscheidet der erste verwertbare Link
// darin. Beiwerk wie die Brotkrumen oder "Mark topics read" verlinkt // darin. Beiwerk wie die Brotkrumen verlinkt ebenfalls auf viewforum.php,
// ebenfalls auf viewforum.php, steht aber in keiner Zeile, die eine Karte // steht aber in keiner Zeile, die eine Karte hergibt — deshalb muss eine
// hergibt — deshalb muss eine Forenzeile als solche erkennbar sein. // Forenzeile als solche erkennbar sein.
function rowKind(a, tr) { function rowKind(a, tr) {
if (!txt(a) || a.classList.contains('breadcrumbs') || if (!txt(a) || a.classList.contains('breadcrumbs') ||
a.closest('p.breadcrumbs')) return ''; a.closest('p.breadcrumbs')) return '';
// "Mark topics read" (eingeloggt oberhalb der Themenliste) und "Mark
// forums read" verlinken mit ?mark=topics/forums auf die aktuelle Seite
// selbst. Der Link liegt zwar in einer eigenen inneren <tr> ohne
// verschachtelte Tabelle, .closest('td.cat') findet aber trotzdem die
// aeussere Kategoriezelle und machte daraus bislang eine dauerhafte,
// nicht einklappbare .rm-sec-Karte statt gar keine.
if (/[?&]mark=/.test(a.getAttribute('href') || '')) return '';
if (/viewtopic\.php/.test(a.getAttribute('href') || '')) { if (/viewtopic\.php/.test(a.getAttribute('href') || '')) {
if (tr.querySelector('a.forumlink')) return 'forum'; if (tr.querySelector('a.forumlink')) return 'forum';
// Der Menuebalken der Seite verlinkt "Forum rules" und die FAQ ebenfalls // Der Menuebalken der Seite verlinkt "Forum rules" und die FAQ ebenfalls
@@ -1280,7 +1287,7 @@
if (DEBUG) { if (DEBUG) {
var d = document.createElement('div'); var d = document.createElement('div');
d.className = 'rm-dbg'; d.className = 'rm-dbg';
d.textContent = 'RIN Mobile v3.7\n' + log.join('\n'); d.textContent = 'RIN Mobile v3.8\n' + log.join('\n');
document.body.insertBefore(d, document.body.firstChild); document.body.insertBefore(d, document.body.firstChild);
} }
} }