Embora a autocompletar de emojis não funcione quando você adiciona dois pontos após uma letra, ela oferece emojis quando você faz o mesmo após um sinal de pontuação (como _ - : ; . , ). Mas quando você usa a autocompletar, o emoji é inserido no início, substituindo a primeira letra, e não na posição em que você estava digitando.
Notei isso primeiro no chat, mas o compositor de tópicos se comporta da mesma forma.
Não sei se é uma coisa do iOS. Definitivamente não se limita ao iOS porque eu não tenho um dispositivo iOS.
A última reprodução está no meu tablet Android usando o Firefox. (Acabei de verificar, é o mesmo no Chrome)
Com base no nome do arquivo, hora do relatório e no fato de que não há teclado na tela no OP, esse provavelmente foi o Edge no Windows 10.
Acabei de vir aqui para relatar este problema @Moin
iPadOS 18.7.1 com Safari aqui, se ajudar @sam
Também estou vendo outro problema ao destacar texto para citá-lo no iPad, o pop-up “citar” do Discourse agora está oculto atrás do “copiar colar” do iOS, então você nunca pode clicar nele. Tentarei descobrir os passos para reproduzir e relatá-lo separadamente mais tarde esta semana (a menos que alguém o faça antes de mim). Menciono aqui porque pode estar relacionado, já que ambos os problemas só apareceram esta semana.
Então não tenho certeza se o seu problema é o mesmo que o meu. O mau posicionamento do emoji após um sinal de pontuação é algo que acontece há 1,5 anos.
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 autocompletar emoji (key === ':'), use uma verificação mais permissiva que inclua
+ // pontuação comum como vírgula, ponto, etc., que podem aparecer antes de emojis
+ let isAllowed;
+ if (this.options.key === ":") {
+ // Corresponde aos mesmos caracteres permitidos na regex onKeyUp do autocompletar de emoji
+ 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 Não estou muito familiarizado com a evolução deste código, talvez algo disso soe familiar com alguma das portabilidades que você fez recentemente?
Não está relacionado à portabilidade, apenas o reproduzi em uma instância mais antiga (3.5.0.beta8-dev) com o novo autocompletar baseado em floatkit desativado. Parece ser um bug de posicionamento do cursor que existe há algum tempo. Ainda vou procurar uma correção adequada, mas não deve ser um impedimento para a remoção completa da antiga biblioteca de autocompletar.
Perdi uma mensagem de chat inteira depois de adicionar um emoji.
Digitei a mensagem, digitei os dois pontos e duas letras para obter sugestões, cliquei em mais e em um emoji, e então a mensagem inteira desapareceu. Isso é um bug diferente ou relacionado? Até agora, não consegui reproduzir no composer, apenas no chat. E apenas no meu laptop, não no meu tablet.
Sim, é o bug de detecção de limites, estamos confusos sobre onde os emojis podem começar e terminar.
A coisa complicada aqui é que talvez toda a lógica esteja errada, eu me pergunto por que ela precisa tomar esse tipo de decisão, já que sabe exatamente onde está o cursor e quantas letras passamos para o autocompletar de emojis. Talvez baste voltar N caracteres e depois substituir isso… não tenho certeza.