无法将默认设置设为 markdown 模式

在此基础上,我们有一个插件使用“wrap_open”BBCode 标记,富文本编辑器尚不支持。因此,我们需要确保暂时保留在 Markdown 模式下。

我使用 Claude Sonnet 生成了以下代码来确保这一点。我很乐意收到关于如何改进它的任何反馈(尤其是如果它有任何错误 :sweat_smile:)。如果这对其他论坛管理员有帮助,也请分享。代码放在主题设置 > JS (/admin/customize/themes/2/common/js/edit) 中:

import {
  apiInitializer
} from "discourse/lib/api";

export default apiInitializer((api) => {
  // 强制将用户的编辑器切换到 markdown 模式
  function switchToMarkdownMode() {
    const currentUser = api.getCurrentUser();

    // 如果编辑器已打开,用户应该已登录
    if (!currentUser) {
      console.error('未找到用户');
      return;
    }

    // 从此处获取此选项
    // 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) {
      // 仅在未处于 markdown 模式时切换
      // 示例用法:https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
      currentUser.set('user_option.composition_mode', 0);

      // 将用户偏好设置保存到服务器
      currentUser.save(['composition_mode']).then(() => {
        console.log('已成功切换到 markdown 模式');
      }).catch((error) => {
        console.error('更新组合模式失败:', error);
      });

      // 立即切换当前编辑器界面
      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('已将当前编辑器切换到 markdown 模式');
          }
        }
      }, 100); // 短暂延迟以确保编辑器完全渲染
    } else {
      console.log('已处于 markdown 模式,无需更改');
    }
  }

  api.onAppEvent('composer:opened', () => {
    switchToMarkdownMode();
  });
});