En seguimiento a esto, tenemos un plugin que utiliza tokens BBCode “wrap_open”, que aún no son compatibles con el editor de texto enriquecido. Por lo tanto, debemos asegurarnos de permanecer en modo Markdown por ahora.
Utilicé Claude Sonnet para generar el siguiente código para asegurarme de esto. Estaría encantado de recibir cualquier comentario sobre cómo podría mejorarlo (especialmente si tiene algún error
). También lo comparto en caso de que ayude a otros administradores del foro. El código va en Configuración del tema > JS (/admin/customize/themes/2/common/js/edit):
import {
apiInitializer
} from "discourse/lib/api";
export default apiInitializer((api) => {
// Forzar el cambio del editor del usuario a modo markdown
function switchToMarkdownMode() {
const currentUser = api.getCurrentUser();
// El usuario debe haber iniciado sesión si el compositor se abrió
if (!currentUser) {
console.error('No se encontró usuario');
return;
}
// Obtenida esta opción de aquí
// 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) {
// Solo cambiar si no está ya en modo markdown
// Uso de ejemplo: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
currentUser.set('user_option.composition_mode', 0);
// Guardar la preferencia del usuario en el servidor
currentUser.save(['composition_mode']).then(() => {
console.log('Cambiado exitosamente a modo markdown');
}).catch((error) => {
console.error('Error al actualizar el modo de composición:', error);
});
// Alternar inmediatamente la interfaz del compositor actual
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('Alternado el compositor actual a modo markdown');
}
}
}, 100); // Pequeña demora para asegurar que el compositor se renderice completamente
} else {
console.log('Ya está en modo markdown, no se necesita cambio');
}
}
api.onAppEvent('composer:opened', () => {
switchToMarkdownMode();
});
});