Das Popup-Menü zum Zitieren von Text ist auf Android nicht reagierend

KI-Diagnose (GPT 5.6 Sol Ultra) in Codex (falls nützlich):

Gefunden: Discourse Reactions lässt einen globalen „Keine Textauswahl“-Zustand auslaufen.

  • Beim touchstart einer Reaktion wird discourse-reactions-no-select zu <html> in plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:222 hinzugefügt.
  • Diese Klasse wendet user-select: none an und deaktiviert das Long-Touch-Callout von WebKit für das gesamte Dokument in plugins/discourse-reactions/assets/stylesheets/common/discourse-reactions.scss:1.
  • Wenn ein vertikales Scrollen über dem Reaktions-Button beginnt, ungültigt plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:249 die Geste, entfernt die Klasse jedoch nicht.
  • plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:257 kehrt dann vorzeitig zurück und lässt die Klasse unbegrenzt zurück.
  • Es gibt auch keine Bereinigung bei touchcancel oder Zerstörung der Komponente.

Die einzige Entfernung erfolgt in plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:690. Das erklärt den gemeldeten Workaround (The popup menu for quoting text is unresponsive on Android): Das Öffnen und Schließen des Reaktions-Popups ruft collapseAllPanels() auf und stellt die Auswahl wieder her.

Die Zitat-Werkzeugleiste selbst ist nachgelagert – sie lauscht auf selectionchange und erfordert eine echte Browserauswahl in frontend/discourse/app/components/post-text-selection.gjs:58. Bei globalem user-select: none erstellt Android diese Auswahl nie.

Die Historie bestätigt diese Fehlerfamilie: Ein Scrolling-Fix aus 2023 (FIX: prevents triggering a reaction while scrolling (#224) · discourse/discourse-reactions@d1970cf · GitHub) führte die vorzeitige Rückgabe bei ungültigem Touch ein, und ein partieller Fix aus 2024 (FIX: couldn't select text after dismissing a reaction (#296) · discourse/discourse-reactions@c6710ef · GitHub) verlagerte die Bereinigung zum Panel-Collapse, ließ aber Scroll-/Cancel-Pfade unbedeckt.

Die Korrektur sollte die Klasse bei jedem abgeschlossenen, abgelehnten, abgebrochenen oder zerstörten Touch-Lebenszyklus entfernen, zusammen mit Regressionstests für touchstart → touchmove → touchend und touchcancel.

3 „Gefällt mir“