Files
new-markdown/docs/21-menus-and-toggles.md

47 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 菜单与切换五项(2026-11-14)
> **勘误(2026-11-14 晚,见 docs/26)**:本文 §1 所称「全局监听 contextmenu 屏蔽 WebView 菜单」当时并未真正落进代码(提交里只有文档与说明文字),编辑区右键一直是浏览器自带菜单。屏蔽与编辑区自绘右键菜单已在 docs/26 补齐。
## 1. 屏蔽浏览器右键菜单
App 全局监听 contextmenu 并 preventDefault:编辑区、标题栏等处不再冒出
WebView 自带菜单;应用自绘菜单(标签/文件树/菜单栏)走各自的 contextmenu
处理,不受影响。文本输入框(input/textarea)保留系统菜单,方便粘贴。
## 2. 菜单点别处不消失——全量排查与统一修复
排查结论:菜单栏下拉本身有外部 mousedown + Esc 关闭(正常);文件树菜单
只监听 window click(右键点别处、滚动时不关);**标签右键菜单只在标签栏
内部点击时关闭,点编辑区/侧边栏都不消失(实测确认)**。
新增共享 hook `src/hooks/useDismiss.ts`:捕获阶段监听 mousedown/contextmenu
(先于 React 的 contextmenu 处理,右键另一个标签时先关旧再开新)、Esc、
窗口失焦、菜单外滚动,统一应用到标签菜单与文件树菜单;菜单栏维持原实现。
## 3. 左侧栏收起
开关逻辑本身正常(视图菜单与 Ctrl+Shift+L 实测可收起),问题在侧栏自身
没有入口、必须去菜单里找。侧栏页签行右侧新增收起按钮(‹);收起后编辑区
左上角出现展开按钮(›)。菜单与快捷键保持不变。
## 4. 源码模式切换按钮
编辑区右下角新增浮动按钮:渲染模式下显示「源码模式」、源码模式下显示
「即时渲染」,一键切换,不必再去视图菜单。打印时隐藏。
## 5. 右键菜单补文件类动作
- 标签右键:新增 保存(未修改时禁用)、另存为…、在新窗口打开(桌面模式)、
导出…、打印 / 导出 PDF…,与原有关闭类动作以分隔线分组。动作针对被右键
的标签:导出/打印会先激活该标签再执行,不必先手动切过去。
- 文件树右键(文件条目):新增 在新窗口打开(桌面模式)、另存为…、导出…、
打印 / 导出 PDF…。文件未打开时先打开/激活再执行(withOpenedTab)。
## 验证
- tsc 0 错误;vitest 97 通过 + 2 跳过(新增 tests/context-menus.test.tsx:
两类菜单的条目、回调、点别处关闭)。
- 无头浏览器实测:编辑区 contextmenu 已被 preventDefault;标签菜单条目齐全、
点编辑区后关闭;收起/展开按钮往返正常;源码按钮切换后源码编辑器出现、
按钮文案翻转为「即时渲染」。
- 待真机验:桌面模式下「在新窗口打开」两处入口、文件树导出/打印的先开后行链路。