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
touchstartde la réaction ajoutediscourse-reactions-no-selectà<html>dansplugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:222. - Cette classe applique
user-select: noneet désactive le menu contextuel au long appui de WebKit pour l’ensemble du document dansplugins/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:249invalide le geste sans supprimer la classe. plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:257retourne ensuite prématurément, laissant la classe en place indéfiniment.- Il n’y a également aucun nettoyage lors d’un
touchcancelou 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.