Si bien la autocompletación de emojis no funciona cuando agregas dos puntos después de una letra, ofrece emojis cuando haces lo mismo después de un signo de puntuación (como _ - : ; . , ). Pero cuando usas la autocompletación, el emoji se inserta al principio, reemplazando la primera letra, y no en la posición en la que estabas escribiendo.
Lo noté por primera vez en el chat, pero el compositor de temas se comporta de la misma manera.
No sé si es algo de iOS. Definitivamente no se limita a iOS porque no tengo un dispositivo iOS.
El último caso reproducible está en mi tablet Android usando Firefox. (Acabo de comprobar que es lo mismo en Chrome)
Basándome en el nombre del archivo, la hora del informe y el hecho de que no hay un teclado en pantalla en el OP, probablemente fue Edge en Windows 10.
iPadOS 18.7.1 con Safari aquí si sirve de algo @sam
También estoy viendo otro problema al resaltar texto para citarlo en iPad, la ventana emergente “cita” de Discourse ahora está oculta detrás de la opción “copiar y pegar” de iOS, por lo que nunca se puede hacer clic en ella. Intentaré averiguar los pasos para reproducirlo y lo reportaré por separado más adelante esta semana (a menos que alguien se me adelante). Lo menciono aquí porque podría estar relacionado, ya que ambos problemas aparecieron esta semana.
Entonces no estoy seguro de que tu problema sea el mismo que el mío. La colocación incorrecta del emoji después de un signo de puntuación es algo que ha ocurrido durante 1,5 años.
diff --git a/frontend/discourse/app/modifiers/d-autocomplete.js b/frontend/discourse/app/modifiers/d-autocomplete.js
index e49fc0ec53..33fb51a1f4 100644
--- a/frontend/discourse/app/modifiers/d-autocomplete.js
+++ b/frontend/discourse/app/modifiers/d-autocomplete.js
@@ -599,10 +599,19 @@ export default class DAutocompleteModifier extends Modifier {
prev = this.getValue()[caretPos - 1];
const shouldTrigger = await this.shouldTrigger({ backSpace });
- if (
- shouldTrigger &&
- (prev === undefined || this.ALLOWED_LETTERS_REGEXP.test(prev))
- ) {
+ // Para el autocompletado de emojis (key === ':'), usa una comprobación más permisiva que incluya
+ // signos de puntuación comunes como coma, punto, etc. que pueden aparecer antes de los emojis.
+ let isAllowed;
+ if (this.options.key === ":") {
+ // Coincide con los mismos caracteres permitidos en la expresión regular onKeyUp del autocompletado de emojis
+ isAllowed =
+ prev === undefined || /[\\s.?,@/#!%\u0026*;:\\[\\]{}=\\-_()+]/.test(prev);
+ } else {
+ isAllowed =
+ prev === undefined || this.ALLOWED_LETTERS_REGEXP.test(prev);
+ }
+
+ if (shouldTrigger && isAllowed) {
start = caretPos;
term = this.getValue().substring(caretPos + 1, initialCaretPos);
end = caretPos + term.length;
@kelv No estoy muy familiarizado con cómo evolucionó este código, ¿quizás algo de esto te suena de alguna de las portabilidades que hiciste recientemente?
No está relacionado con la portabilidad, simplemente lo reproduje en una instancia anterior (3.5.0.beta8-dev) con el nuevo autocompletado basado en floatkit desactivado. Parece ser un error de posicionamiento del cursor que ha estado ahí por algún tiempo. Aún así, buscaré una solución adecuada, pero no debería ser un impedimento para la eliminación completa de la antigua biblioteca de autocompletado.
Acabo de perder un mensaje de chat completo después de agregar un emoji.
Escribí el mensaje, escribí los dos puntos y dos letras para obtener sugerencias, hice clic en “más” y en un emoji, y luego todo el mensaje desapareció. ¿Es este un error diferente o está relacionado? Hasta ahora, no pude reproducirlo en el editor, solo en el chat. Y solo en mi portátil, no en mi tableta.
Sí, es el error de detección de límites, estamos confundidos sobre dónde pueden empezar y terminar los emojis.
Lo complicado aquí es que tal vez toda la lógica sea incorrecta. Me pregunto por qué necesita tomar este tipo de decisión, dado que sabe exactamente dónde está el cursor y cuántas letras hemos pasado al autocompletado de emojis. Tal vez simplemente retroceder N caracteres y luego reemplazar eso… no estoy seguro.