From 0d2731eaa9c65289bbec98f04a431debbd4c68bc Mon Sep 17 00:00:00 2001 From: Andre <200930841+Andre-Bzk@users.noreply.github.com> Date: Sun, 2 Aug 2026 16:28:57 +0200 Subject: [PATCH] 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. --- CLAUDE.md | 19 +++++++++++++++++-- rin-mobile.user.js | 17 ++++++++++++----- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 698a657..e72ae89 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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` — zaehlte man Themenlinks zuerst, faellt die Zeile als Thema an, der Forenname 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, -stehen aber in Zeilen ohne Forenmerkmale und werden verworfen. +war es vor 3.2. Brotkrumen verlinken ebenfalls Foren, stehen aber in Zeilen +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` unterscheidet `global_read.png`, `announce_read.png`, `sticky_read.png` und diff --git a/rin-mobile.user.js b/rin-mobile.user.js index d246ff1..3d3c0cf 100644 --- a/rin-mobile.user.js +++ b/rin-mobile.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name RIN Mobile // @description Mobile Ansicht fuer cs.rin.ru: Themenlisten als Karten, Threads als Beitragsstrom -// @version 3.7 +// @version 3.8 // @match *://cs.rin.ru/forum/* // @run-at document-start // ==/UserScript== @@ -905,12 +905,19 @@ } // Welche Karte eine Zeile ergibt, entscheidet der erste verwertbare Link - // darin. Beiwerk wie die Brotkrumen oder "Mark topics read" verlinkt - // ebenfalls auf viewforum.php, steht aber in keiner Zeile, die eine Karte - // hergibt — deshalb muss eine Forenzeile als solche erkennbar sein. + // darin. Beiwerk wie die Brotkrumen verlinkt ebenfalls auf viewforum.php, + // steht aber in keiner Zeile, die eine Karte hergibt — deshalb muss eine + // Forenzeile als solche erkennbar sein. function rowKind(a, tr) { if (!txt(a) || a.classList.contains('breadcrumbs') || 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 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 (tr.querySelector('a.forumlink')) return 'forum'; // Der Menuebalken der Seite verlinkt "Forum rules" und die FAQ ebenfalls @@ -1280,7 +1287,7 @@ if (DEBUG) { var d = document.createElement('div'); 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); } }