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