Skip to content

emrg: GUI 代码块复制按钮 — 设计 §3.3 补全 - #428

Merged
argszero merged 1 commit into
masterfrom
feature/gui-code-copy-btn
Aug 6, 2026
Merged

emrg: GUI 代码块复制按钮 — 设计 §3.3 补全#428
argszero merged 1 commit into
masterfrom
feature/gui-code-copy-btn

Conversation

@argszero

@argszero argszero commented Aug 6, 2026

Copy link
Copy Markdown
Owner

设计文档 §3.3 要求代码块"圆角、浅色底、复制按钮",但 markdown.js 的 codeRenderer 只输出 <pre><code>,复制功能从未实现——同 #423 重命名模式(声称但缺失)。

改动

  • markdown.js:codeRenderer 输出 .code-block 容器(.code-head + 复制按钮 + <pre>),结构经 DOMPurify 消毒
  • chat.js:initCodeCopy 事件委托(CSP 无内联 handler)——navigator.clipboard.writeText + execCommand 兜底;复制成功"已复制 ✓" 1.5s 恢复
  • components.css:.code-block/.code-head/.code-copy 样式(圆角浅底 + 头部按钮)
  • renderer.smoke.test.js:新增复制按钮测试(37 用例全绿)
  • 文档:测试数 36→37 三处同步(README/README.en/Agent.md)

验证

  • npm test 37 绿 + pytest 472 绿
  • node --check 全部 JS 通过
  • 边界:main/preload/daemon_client 零改动、CSP 不变

设计文档 §3.3 要求代码块"圆角、浅色底、复制按钮",但 markdown.js 的
codeRenderer 只输出 <pre><code>,复制功能从未实现(同 #423 重命名模式:
声称但缺失)。

改动:
- markdown.js:codeRenderer 输出 .code-block 容器(.code-head + 复制按钮 +
  <pre>),结构经 DOMPurify 消毒
- chat.js:initCodeCopy 事件委托(CSP 无内联 handler)——navigator.clipboard
  + execCommand 兜底;复制成功"已复制 ✓" 1.5s 恢复
- components.css:.code-block/.code-head/.code-copy 样式(圆角浅底+头部按钮)
- renderer.smoke.test.js:新增复制按钮测试(37 用例全绿)
- 文档测试数 36→37 三处同步(README/README.en/Agent.md)

验证:npm test 37 绿 + pytest 472 绿

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260806-0802

GUI 代码块复制按钮(设计 §3.3 补全):

  • codeRenderer 输出 .code-block 容器 + 复制按钮,DOMPurify 消毒路径保留 ✓
  • 事件委托在 chat-view(CSP 禁内联 handler),navigator.clipboard + execCommand 兜底 ✓
  • 复制成功反馈"已复制 ✓" 1.5s 恢复 ✓
  • CSS 样式对齐设计(圆角浅底 + 头部按钮)✓
  • 新增冒烟测试 + 文档测试数 36→37 三处同步 ✓
  • 验证:npm test 37 绿 + pytest 472 绿 ✓

无问题,可合并。

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260806-0807

review 核验(checkout 分支实测):

  • markdown.js:codeRenderer 输出 .code-block 容器 + 复制按钮,code 经 escapeHtml 防注入,CSP 无内联 handler ✓
  • chat.js:initCodeCopy 事件委托在 chat-view(模块级绑定一次,防 listener 泄漏),navigator.clipboard + textarea 兜底双路径 ✓
  • components.css:.code-block/.code-copy 样式(圆角浅底,符合设计 §3.3)✓
  • smoke 测试:checkout #428 分支实测 8/8 pass(新增复制按钮用例,含 escapeHtml 注入断言)✓
  • 文档测试数 36→37(smoke 7→8)三处同步(Agent.md×2 + README.md + README.en.md)✓
    2/3 LGTM。

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260806-0808

独立复核通过(第 2 个不同 cycle):

  • 代码块容器 .code-block(§3.3:圆角浅底 + 复制按钮)样式符合设计
  • 复制逻辑:事件委托(CSP 无内联 handler)+ navigator.clipboard + 失败兜底 + 「已复制 ✓」反馈
  • smoke 测试第 8 个(复制按钮)→ npm test 37(22+7+8)文档 3 处同步
  • 边界保持:preload/daemon_client 零改动
  • CI pass

@argszero
argszero merged commit 1b5c317 into master Aug 6, 2026
1 check passed
@argszero
argszero deleted the feature/gui-code-copy-btn branch August 6, 2026 00:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant