mirror of
https://github.com/Andre-Bzk/rin-mobile-userscript.git
synced 2026-11-15 09:33:08 +01:00
The project instructions describe testing against a saved forum page without mentioning that the ignore rules exclude it. A fresh clone therefore has no fixture, and obtaining one requires a logged-in session — not something that becomes apparent from a missing file alone. Claude-Session: https://claude.ai/code/session_0158owAAsXAfFiT3hGkQt1Xk
112 lines
5.3 KiB
Markdown
112 lines
5.3 KiB
Markdown
# CLAUDE.md
|
|
|
|
Zwei eigenstaendige Userscripts, die die phpBB-Seiten von `cs.rin.ru` fuer
|
|
Safari auf iOS in eine mobile Ansicht umbauen. Kein Build, keine
|
|
Abhaengigkeiten, kein `package.json` — die `.user.js`-Dateien sind das Produkt.
|
|
|
|
| Datei | Greift auf | Zweck |
|
|
|---|---|---|
|
|
| `rin-mobile.user.js` | `*://cs.rin.ru/forum/*` | Themenlisten als Karten |
|
|
| `rin-thread.user.js` | `*://cs.rin.ru/forum/viewtopic.php*` | Thread als Beitragsstrom + Navigationsleiste |
|
|
| `dev/*.dev.user.js` | zusaetzlich `localhost:*` | Loader, binden per `@require file:///` die echten Scripts ein |
|
|
| `dev/viewtopic.php` | — | Fixture: gespeicherter Thread, 1114 Seiten |
|
|
|
|
Das Fixture ist ueber `.gitignore` (`dev/*.php`) ausgeschlossen. Nach einem
|
|
frischen Klon ist es nicht da und muss nach der Anleitung in der README neu
|
|
gespeichert werden — die Seite verlangt einen Login.
|
|
|
|
## Gemeinsames Muster beider Scripts
|
|
|
|
Beide sind nach demselben Schema gebaut, Aenderungen am einen sind oft auch am
|
|
anderen faellig:
|
|
|
|
1. IIFE mit `'use strict'`, `DEBUG`-Flag und `log`-Array ganz oben
|
|
2. Viewport-Meta setzen (idempotent ueber `[data-rm]`)
|
|
3. Kompletter Style-Block als Template-Literal, **bedingungslos** injiziert
|
|
4. `build()` liest das Original-DOM, baut ein neues `div.rm-root`
|
|
5. Alle bisherigen `body`-Kinder bekommen `.rm-hidden`, dann wird `root`
|
|
angehaengt
|
|
6. `run()` haengt bei `DEBUG` das gruene Overlay oben an
|
|
7. Start ueber `DOMContentLoaded`, falls `readyState === 'loading'`
|
|
|
|
## Fallen, die nicht aus dem Code hervorgehen
|
|
|
|
**Beide Stylesheets sind auf Threadseiten gleichzeitig aktiv.**
|
|
`rin-mobile` matcht `*://cs.rin.ru/forum/*`, also auch `viewtopic.php`. Sein
|
|
`build()` steigt dort zwar aus, der Style-Block wird aber vorher injiziert.
|
|
Gleich benannte Klassen kollidieren mit identischer Spezifitaet, entschieden
|
|
wird nach Ladereihenfolge der Userscripts — und die ist nicht garantiert.
|
|
|
|
- Nur bewusst geteilt: `.rm-root`, `.rm-hidden`, `.rm-dbg`
|
|
- **Offene Kollision:** `.rm-root` hat in `rin-mobile` `padding:0 !important`,
|
|
in `rin-thread` `padding:0 0 64px 0 !important`. Laedt `rin-mobile` spaeter,
|
|
faellt die Freihaltung hinter der fixierten Leiste weg. Noch nicht behoben.
|
|
- Neue Klassen im Thread-Script gegen `rin-mobile.user.js` gegenpruefen.
|
|
`.rm-goto` und `.rm-grid` heissen genau deshalb so — `.rm-jump` und
|
|
`.rm-pages` waren dort schon belegt.
|
|
|
|
**Was nach `body` soll, muss nach der Ausblend-Schleife angehaengt werden.**
|
|
Die Schleife markiert *alle* vorhandenen `body`-Kinder mit `.rm-hidden`. Das
|
|
Sheet im Thread-Script wird deshalb erst beim ersten Antippen gebaut — das
|
|
loest das Problem nebenbei mit.
|
|
|
|
**`Page X of Y` steht als `Page <strong>1</strong> of <strong>1114</strong>`
|
|
im Markup.** Ein Grep im Roh-HTML nach `Page 1 of` findet nichts, die Regex auf
|
|
`txt(document.body)` greift trotzdem. Nicht vorschnell fuer kaputt halten.
|
|
|
|
**`per_page` kommt aus der `jumpto()`-Funktion der Seite**
|
|
(`var per_page = '15';`). Nur damit lassen sich Seiten-URLs als
|
|
`start = (Seite - 1) * per_page` selbst bauen. Die gerenderten Seitenlinks
|
|
taugen nicht als Quelle — phpBB zeigt bei 1114 Seiten nur `1, 2, 3, 4, 5 … 1114`.
|
|
Ohne `per_page` degradiert die Leiste auf erste Seite plus die
|
|
Original-Zurueck/Weiter-Links, das Sheet verschwindet.
|
|
|
|
**`postRow()` steigt bewusst mehrere `tr` hoch.** Der Beitragstext liegt in
|
|
einer verschachtelten Tabelle, `closest('tr')` trifft die innere Zeile ohne
|
|
Autor- und Profilspalte.
|
|
|
|
**`DEBUG` steht in beiden Dateien auf `true`** und muss vor dem Ausliefern in
|
|
beiden auf `false`. Die Versionsnummer steht ebenfalls doppelt: im
|
|
`@version`-Header und im Text des Debug-Overlays.
|
|
|
|
## Testen
|
|
|
|
Es gibt keine Testsuite. Bewaehrt hat sich ein Wegwerf-Harness mit jsdom im
|
|
Scratchpad (nicht im Repo ablegen — das Projekt soll abhaengigkeitsfrei
|
|
bleiben):
|
|
|
|
```js
|
|
const dom = new JSDOM(html, { url: 'https://cs.rin.ru/forum/viewtopic.php?f=10&t=68689&start=45' });
|
|
```
|
|
|
|
Drei Stolpersteine dabei:
|
|
|
|
- JSDOM parst asynchron fertig. Nach `eval(src)` rund 60 ms warten, sonst hat
|
|
das Script noch auf `DOMContentLoaded` gewartet und nichts gebaut.
|
|
- `location.href` ist in JSDOM nicht ueberschreibbar. Fuer Navigationstests im
|
|
eingelesenen Quelltext `location.href = u;` durch einen Hook ersetzen.
|
|
- `requestAnimationFrame` und `scrollIntoView` fehlen und muessen gestubbt
|
|
werden.
|
|
|
|
Sinnvolle Faelle: erste Seite, zweite Seite, Mitte, letzte Seite, dazu die
|
|
Degradation ohne `per_page` und ein Thread ohne Paginierung. Fixture-Eckdaten:
|
|
`f=10&t=68689`, `per_page = 15`, 1114 Seiten, letzte Seite `start=16695`.
|
|
|
|
Am Geraet zu pruefen bleibt, was Blink nicht zeigt: `env(safe-area-inset-*)`,
|
|
fixierte Leisten gegen Safaris ein- und ausfahrende Toolbar,
|
|
`-webkit-backdrop-filter`, Schriftskalierung. Details und die
|
|
Tampermonkey-Einrichtung stehen in der README.
|
|
|
|
## Konventionen
|
|
|
|
- **ES5-Stil im Script-Code:** `var`, `function`, keine Arrow Functions, kein
|
|
`let`/`const`. Template-Literals und `Set` sind in Gebrauch. Keine
|
|
Transpilation, kein Linter.
|
|
- **Kommentare deutsch, Umlaute als `ae`/`oe`/`ue` transliteriert.** Echte
|
|
Umlaute nur in Strings und Regexes, die im UI landen.
|
|
- Kommentare begruenden, warum etwas so gebaut ist (welche DOM-Eigenheit von
|
|
phpBB dahintersteckt), nicht was der Code tut.
|
|
- CSS-Klassen durchgaengig mit `rm-` praefixiert.
|
|
- Neue nutzersichtbare Funktionen in der README dokumentieren — zweisprachig,
|
|
siehe globale Anweisung.
|