Pour faire suite à cela, nous avons un plugin qui utilise des jetons BBCode « wrap_open », qui ne sont pas encore pris en charge par l’éditeur de texte enrichi. Nous devons donc nous assurer de rester en mode Markdown pour l’instant.
J’ai utilisé Claude Sonnet pour générer le code suivant afin de garantir cela. Je serais heureux de recevoir vos commentaires sur la façon dont je pourrais l’améliorer (surtout s’il contient des bugs
). Je partage également ce code au cas où il aiderait d’autres administrateurs de forum. Le code se trouve dans les paramètres du thème > JS (/admin/customize/themes/2/common/js/edit) :
import {
apiInitializer
} from "discourse/lib/api";
export default apiInitializer((api) => {
// Force the user's editor to switch to markdown mode
function switchToMarkdownMode() {
const currentUser = api.getCurrentUser();
// The user should be signed in if the composer was opened
if (!currentUser) {
console.error('No user found');
return;
}
// Got this option from here
// 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) {
// Only switch if not already in markdown mode
// Example usage: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
currentUser.set('user_option.composition_mode', 0);
// Save the user preference to the server
currentUser.save(['composition_mode']).then(() => {
console.log('Successfully switched to markdown mode');
}).catch((error) => {
console.error('Failed to update composition mode:', error);
});
// Immediately toggle the current composer UI
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('Toggled current composer to markdown mode');
}
}
}, 100); // Small delay to ensure composer is fully rendered
} else {
console.log('Already in markdown mode, no change needed');
}
}
api.onAppEvent('composer:opened', () => {
switchToMarkdownMode();
});
});