Le menu contextuel pour citer du texte ne répond pas sur Android

Diagnostic AI (GPT 5.6 Sol Ultra) dans Codex (si utile) :

Trouvé : Discourse Reactions laisse fuiter un état global de « sélection de texte désactivée ».

  • L’événement touchstart de la réaction ajoute discourse-reactions-no-select à <html> dans plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:222.
  • Cette classe applique user-select: none et désactive le menu contextuel au long appui de WebKit pour l’ensemble du document dans plugins/discourse-reactions/assets/stylesheets/common/discourse-reactions.scss:1.
  • Si un défilement vertical commence au-dessus du bouton de réaction, plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:249 invalide le geste sans supprimer la classe.
  • plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:257 retourne ensuite prématurément, laissant la classe en place indéfiniment.
  • Il n’y a également aucun nettoyage lors d’un touchcancel ou de la destruction du composant.

La seule suppression se trouve dans plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:690. Cela explique la solution de contournement signalée (The popup menu for quoting text is unresponsive on Android) : ouvrir et fermer la fenêtre contextuelle des réactions appelle collapseAllPanels(), ce qui rétablit la sélection.

La barre d’outils de citation elle-même est en aval : elle écoute selectionchange et nécessite une sélection réelle du navigateur dans frontend/discourse/app/components/post-text-selection.gjs:58. Avec user-select: none global, Android ne crée jamais cette sélection.

L’historique confirme cette famille de bugs : une correction de défilement de 2023 (FIX: prevents triggering a reaction while scrolling (#224) · discourse/discourse-reactions@d1970cf · GitHub) a introduit le retour prématuré en cas de toucher invalide, et une correction partielle de 2024 (FIX: couldn't select text after dismissing a reaction (#296) · discourse/discourse-reactions@c6710ef · GitHub) a déplacé le nettoyage vers l’effondrement du panneau mais a laissé les chemins de défilement/annulation non couverts.

La correction devrait effacer la classe à chaque cycle de vie de toucher terminé, rejeté, annulé ou détruit, avec des tests de régression pour touchstart → touchmove → touchend et touchcancel.

3 « J'aime »