El menú emergente para citar texto no responde en Android

Diagnóstico de IA (GPT 5.6 Sol Ultra) en Codex (si es útil):

Lo encontré: Discourse Reactions filtra un estado global de «sin selección de texto».

  • El evento touchstart de la reacción añade discourse-reactions-no-select a en plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:222.
  • Esa clase aplica user-select: none y deshabilita el menú contextual de toque prolongado de WebKit para todo el documento en plugins/discourse-reactions/assets/stylesheets/common/discourse-reactions.scss:1.
  • Si un desplazamiento vertical comienza sobre el botón de reacción, plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:249 invalida el gesto sin eliminar la clase.
  • plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:257 luego retorna prematuramente, dejando la clase abandonada indefinidamente.
  • Tampoco hay limpieza en touchcancel ni al destruir el componente.

La única eliminación está en plugins/discourse-reactions/assets/javascripts/discourse/components/discourse-reactions-actions.gjs:690. Eso explica la solución alternativa reportada (The popup menu for quoting text is unresponsive on Android): abrir y cerrar la ventana emergente de reacciones llama a collapseAllPanels(), restaurando la selección.

La barra de herramientas de citas es aguas abajo: escucha selectionchange y requiere una selección real del navegador en frontend/discourse/app/components/post-text-selection.gjs:58. Con user-select: none global, Android nunca crea esa selección.

El historial confirma esta familia de errores: una corrección de desplazamiento de 2023 (FIX: prevents triggering a reaction while scrolling (#224) · discourse/discourse-reactions@d1970cf · GitHub) introdujo el retorno prematuro de toque inválido, y una corrección parcial de 2024 (FIX: couldn't select text after dismissing a reaction (#296) · discourse/discourse-reactions@c6710ef · GitHub) movió la limpieza al colapso del panel pero dejó sin cubrir las rutas de desplazamiento/cancelación.

La corrección debería limpiar la clase en cada ciclo de vida de toque completado, rechazado, cancelado o destruido, con pruebas de regresión para touchstart → touchmove → touchend y touchcancel.

3 Me gusta