在 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的文本输入框并自动聚焦。 -
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 }。
仅注册旧钩子的插件,一旦管理员启用该标志,将在 Composer 中静默消失。 仅注册新转换器的插件,在标志关闭时(合并时的默认状态)将不可见。
参考链接:
-
discourse-post-voting/extend-composer-actions.js — 双重注册的完整示例(位于核心代码中)
-
discourse-staff-alias — 单独的 PR 在此处添加了双重注册
-
transformers.js — 两个新的转换器名称
发布说明
-
标志状态为 Alpha —— 仅供内部测试启用。
-
与 Composer 操作集成的插件,应在该功能推广至
Beta/Stable之前添加双重注册。 -
测试覆盖了两种状态:现有的验收/系统测试覆盖标志关闭的情况;同级的
*-new-test.js文件覆盖标志开启的情况(包括新组件的 DOM 选择器,用于统一下拉菜单、开关项、静默指示器和分割标签跨度)。



