Impossível definir o padrão para o modo markdown

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.

2 curtidas

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 :sweat_smile:). 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();
  });
});

Esta é geralmente uma má prática, confiar no tempo para coisas como esta é frágil.

Deixe-me separar isso, certamente queremos permitir que os administradores definam padrões para o modo markdown.

Qual é um repro mínimo aqui?

2 curtidas

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.

2 curtidas

Obrigado pelas respostas rápidas! :slightly_smiling_face: 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.

2 curtidas

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.

1 curtida

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.

1 curtida

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.

1 curtida

Conforme nossa página /about, temos 20.000 membros.

Esclarecerei que os passos são os seguintes:

  1. Visite /admin/site_settings/category/all_results?filter=default_composition_mode
  2. 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.
  3. Obtenha o aviso para XX número de usuários. Aceite-o.
  4. Espere dez minutos e, em seguida, recarregue a página.
  5. Defina default_composition_mode para o modo Markdown (o mesmo que no passo 2).
  6. 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.

1 curtida

Ok, sim, definitivamente não parece que muitas pessoas estariam alternando nesse tempo :thinking: 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):

image

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.

Obrigado pelas informações adicionais. Os dois pedidos são mostrados na imagem abaixo. Ambos foram bem rápidos.

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.

1 curtida

Ok, a trama se complica… esta parte em que você escolhe Markdown quando já tem Markdown selecionado e ele oferece para salvar:

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.

1 curtida

Obrigado por me informar. Fiz login com uma conta de teste antiga e parece que funcionou corretamente: ela ativou o modo Markdown na primeira execução :slightly_smiling_face:

Existe alguma maneira de verificar se todos os usuários estão no modo Markdown, por exemplo, usando o Explorador de Dados?

2 curtidas

Que bom que isso resolveu o problema!

Sim, definitivamente, você poderia fazer uma consulta como:

SELECT composition_mode, COUNT(composition_mode) FROM user_options GROUP BY composition_mode;

Os valores estão aqui:

2 curtidas

Obrigado, todos os nossos usuários estão no modo Markdown agora :partying_face:

3 curtidas

@martin Movi este tópico de suporte para bug e irei fechá-lo, assumindo que você corrigiu o bug. Se você não corrigiu, pode reabri-lo?

1 curtida

Foi corrigido por FIX: Don't show setting save/cancel buttons when selecting the current value by OsamaSayegh · Pull Request #34552 · discourse/discourse · GitHub

5 curtidas