Olá, percebo que mesmo quando defino “default_composition_mode” para o modo Markdown, os usuários do meu fórum recebem o editor Rich Text ao iniciar um novo tópico. A versão do fórum é “Discourse v3.5.0.beta9-dev — Commits · discourse/discourse · GitHub — Ember v5.12.0”.
Cada vez que aplico a alteração, sou solicitado “Gostaria de aplicar esta alteração historicamente? Isso mudará as preferências de 15 usuários existentes” e clico em Sim. Mesmo assim, os usuários recebem o editor Rich Text. Isso é um bug conhecido?
Edição - observação: Tenho este problema com usuários que nunca usaram a opção de alternância para trocar o modo do editor entre Rich/Markdown. Eles apenas fizeram login hoje depois que eu já havia definido o modo de composição padrão no fim de semana, logo após a atualização. Eu também havia ocultado a opção de alternância via CSS do tema.
Em seguimento a isto, temos um plugin que utiliza tokens BBCode “wrap_open”, que ainda não são suportados pelo editor de rich text. Portanto, precisamos garantir que permaneçamos no modo Markdown por enquanto.
Usei o Claude Sonnet para gerar o seguinte código para garantir isso. Ficarei feliz em receber qualquer feedback sobre como posso melhorá-lo (especialmente se tiver algum bug ). Também estou compartilhando isto caso ajude outros administradores de fóruns. O código vai em Configurações do tema > JS (/admin/customize/themes/2/common/js/edit):
import {
apiInitializer
} from "discourse/lib/api";
export default apiInitializer((api) => {
// Força a troca do editor do usuário para o modo markdown
function switchToMarkdownMode() {
const currentUser = api.getCurrentUser();
// O usuário deve estar logado se o compositor foi aberto
if (!currentUser) {
console.error('Nenhum usuário encontrado');
return;
}
// Obtive esta opção daqui
// https://github.com/discourse/discourse/blob/f0fc5646dc9bd29b0e814faea490e34800e9b322/app/assets/javascripts/discourse/app/models/user.js#L262C1-L266C4
const currentMode = currentUser.get('user_option.composition_mode');
if (currentMode !== 0) {
// Muda apenas se já não estiver no modo markdown
// Exemplo de uso: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
currentUser.set('user_option.composition_mode', 0);
// Salva a preferência do usuário no servidor
currentUser.save(['composition_mode']).then(() => {
console.log('Mudou com sucesso para o modo markdown');
}).catch((error) => {
console.error('Falha ao atualizar o modo de composição:', error);
});
// Alterna imediatamente a interface do compositor atual
setTimeout(() => {
const toggleButton = document.querySelector('.composer-toggle-switch[data-rich-editor]');
if (toggleButton) {
const isRichTextActive = toggleButton.getAttribute('aria-checked') === 'true';
if (isRichTextActive) {
toggleButton.click();
console.log('Alternou o compositor atual para o modo markdown');
}
}
}, 100); // Pequeno atraso para garantir que o compositor seja totalmente renderizado
} else {
console.log('Já está no modo markdown, nenhuma alteração necessária');
}
}
api.onAppEvent('composer:opened', () => {
switchToMarkdownMode();
});
});
Tentarei reproduzir isso + trabalhar em uma correção amanhã, mas não tenho certeza por que isso aconteceria, já que o administrador define por padrão todos os valores de opção do usuário (se você usar a opção de usuário existente no prompt), e é tudo o que usamos para controlar o interruptor.
Obrigado pelas respostas rápidas! Não tenho certeza de como posso criar um repro mínimo para isso. Ficarei feliz em compartilhar qualquer informação adicional do meu fórum se você puder compartilhar os passos para isso.
Tentei reproduzir isso hoje sem sucesso. Tenho uma pergunta, no entanto: os usuários estão atualizando o navegador depois que você faz essa alteração? Porque se não estiverem, ainda teremos os dados de preferência antigos deles no navegador em ember, então a nova preferência ainda não será usada.
Para que isso funcione como esperado, fiz o seguinte:
Verifiquei no usuário A se o editor estava definido como modo rico
Como administrador, alterei o padrão para modo markdown e apliquei para todos os usuários
Como usuário A, recarreguei a página e reabri o editor, e vi que ele estava no modo markdown
Se eu não tivesse recarregado na etapa 3, ainda veria o modo rico.
Obrigado pelo acompanhamento, Martin. Eu já havia definido o modo como Markdown no domingo. Em seguida, fiz login com uma conta de teste na segunda-feira, em um perfil de navegador separado, que recebeu o editor Rich em vez disso.
Além disso, se isso ajudar, cada vez que defino "default_composition_mode" como "Markdown", recebo o aviso: "Gostaria de aplicar esta alteração historicamente? Isso alterará as preferências para 61 usuários existentes." Entendo que deveria receber isso na primeira vez, mas parece um bug que ele me solicita a cada vez para alguns usuários.
Para testes adicionais, também acabei de fazer login em outra conta de teste que não fazia login há 10 meses. Ela também foi definida como modo Rich Text por padrão.
Isso é realmente muito estranho… quantos usuários existem no seu site no total? Eu me pergunto se está travando na etapa em que deveria atualizar todos os usuários com a alteração da configuração do site, porque notei que não há nada na interface do usuário para indicar que o trabalho ainda está acontecendo.
Depende de quantos usuários o alteraram com o alternador no ínterim. Parece que funciona corretamente para mim em testes locais.
Defina default_composition_mode para o modo Markdown. Mesmo quando já estiver no modo Markdown, você pode abrir o menu suspenso e selecionar a opção Markdown.
Obtenha o aviso para XX número de usuários. Aceite-o.
Espere dez minutos e, em seguida, recarregue a página.
Defina default_composition_mode para o modo Markdown (o mesmo que no passo 2).
Novamente, obtenha o aviso para o mesmo número de usuários.
Como você mencionou, eu também não sei quanto tempo leva (mais de 10 minutos?) para atualizar as preferências históricas dos usuários. Além disso, não acho que todos esses usuários teriam atualizado suas preferências de volta nesse tempo. Posso estar perdendo alguma coisa aqui.
Ok, sim, definitivamente não parece que muitas pessoas estariam alternando nesse tempo Você consegue fazer uma gravação de tela para mostrar o que está acontecendo?
Eu também aconselharia você a dar uma olhada na aba Rede (Network) nas ferramentas de desenvolvedor do Chrome. Ela deve mostrar 2 requisições como esta depois que você salvar (a primeira é a que mostra o prompt de XX usuários, a segunda é para realmente salvar a configuração e fazer o preenchimento retroativo):
A segunda precisa ter um status 200. Se não tiver e você navegar para longe, o preenchimento retroativo para usuários existentes não será feito.
Uma gravação de vídeo está em este link do Drive. Eu defini a configuração, aceitei a caixa de diálogo de aviso, esperei um pouco, recarreguei a página e, em seguida, defini novamente. Então recebi a caixa de diálogo de aviso novamente.
Não deveria acontecer… há um bug aqui onde ele está considerando o valor para o item da lista (0) diferente do valor da configuração (’0’). Então, acho que o Salvar aqui não está fazendo nada. Eu posso corrigir esse bug, mas você pode fazer isto:
Mude a configuração para “Texto rico”
Salve, mas escolha “Não, aplique apenas as alterações daqui para frente”
Volte para “Markdown”
Salve e escolha “Sim” para aplicá-lo retroativamente
E veja se isso corrige os problemas que você está tendo.