新增“帖子类型”创作操作下拉菜单

enable_new_composer_actions 标志后进行的 Composer 重新设计

本次更新引入了重新设计的 Composer 体验,并将其置于一个新的 Alpha 阶段“即将变更”标志之后。当该标志关闭(默认状态)时,界面不会发生任何可见变化。管理员可通过“即将变更”管理页面选择启用。

启用标志后的变化

  • 统一的操作下拉菜单。原有的 SelectKit composer-actions 下拉菜单已被新的 Glimmer/DMenu 组件(composer-actions-new.gjs)取代。新组件依然展示所有相同的模式切换行(回复主题、作为新主题回复、创建私信等),但标签和图标更加清晰。

  • 开关与操作集成。静默模式(Whisper)、不置顶(no-bump)和隐藏(unlist)现在以下拉菜单底部的 <DToggleSwitch> 项形式呈现,不再使用独立的组合按钮菜单。开关状态在模式切换时得以保留(例如:开启静默模式 → 从“回复主题”切换到“回复帖子” → 仍保持静默状态)。

  • 静默指示器胶囊按钮。下拉菜单触发器右侧有一个小按钮,以两种视觉样式显示当前的静默状态:--public(辅助色,眼睛图标,“回复将可见”)和 --whispering(主色中等/主色极低背景,闭眼图标,“正在静默”)。点击该按钮即可切换静默状态 —— 其代码路径与下拉菜单内的开关相同,因此两者保持同步。当处于静默模式时,触发器图标本身也会切换为 far-eye-slash

  • 编辑用户体验。编辑帖子时,下拉菜单会折叠为一个静态的、无下拉箭头的标签(铅笔图标 + “编辑帖子”)。原本位于 Composer 工具栏其他位置的“添加编辑理由”按钮,现已整合到此静态触发器中,作为一个可点击的“描述您的编辑”按钮;点击它会将标签替换为绑定到 composer.editReason 的文本输入框并自动聚焦。

    • editing
  • Composer 工具栏.action-title 文本/标签已被移除 —— 下拉菜单触发器本身即显示当前模式。

  • 帖子/主题链接 现在仅在必要时显示。当离开主题导航时,主题链接将渲染;当滚动离开帖子或导航离开时,帖子链接将渲染。

插件开发者注意事项

新组件 不是 SelectKit 的子类,因此旧的扩展 API 无法作用于它。为了在此 Alpha 阶段同时支持两种标志状态,插件应同时注册两套 API:

旧 API(仅适用于旧组件) 新 API(仅适用于新组件)
api.modifySelectKit("composer-actions").appendContent(...) api.registerValueTransformer("composer-actions-content", ({ value, context }) => { value.push(...); return value; })
api.modifyClass("component:composer-actions", { fooSelected(options, model) { ... } }) api.registerBehaviorTransformer("composer-actions-on-select", ({ context, next }) => { if (context.actionId === "foo") { ...; return; } next(); })

行结构({ name, description, icon, id })在两者中完全一致。行为转换器在其上下文中接收 { actionId, options, model }

:double_exclamation_mark: 仅注册旧钩子的插件,一旦管理员启用该标志,将在 Composer 中静默消失。 仅注册新转换器的插件,在标志关闭时(合并时的默认状态)将不可见。

参考链接:

  • discourse-post-voting/extend-composer-actions.js — 双重注册的完整示例(位于核心代码中)

  • discourse-staff-alias — 单独的 PR 在此处添加了双重注册

  • transformers.js — 两个新的转换器名称

发布说明

  • 标志状态为 Alpha —— 仅供内部测试启用。

  • 与 Composer 操作集成的插件,应在该功能推广至 Beta/Stable 之前添加双重注册。

  • 测试覆盖了两种状态:现有的验收/系统测试覆盖标志关闭的情况;同级的 *-new-test.js 文件覆盖标志开启的情况(包括新组件的 DOM 选择器,用于统一下拉菜单、开关项、静默指示器和分割标签跨度)。

8 个赞