Skip to content

💄 菜单展开数量为 0 时,popup 展开的菜单排在编辑/脚本设置之前 - #1688

Merged
CodFrm merged 2 commits into
mainfrom
fix/popup-menu-order-when-expand-num-zero
Aug 24, 2026
Merged

💄 菜单展开数量为 0 时,popup 展开的菜单排在编辑/脚本设置之前#1688
CodFrm merged 2 commits into
mainfrom
fix/popup-menu-order-when-expand-num-zero

Conversation

@CodFrm

@CodFrm CodFrm commented Aug 24, 2026

Copy link
Copy Markdown
Member

Checklist / 检查清单

  • Fixes mentioned issues / 修复已提及的问题
  • Code reviewed by human / 代码通过人工检查
  • Changes tested / 已完成测试

N/A — 本次为主动优化,没有关联 issue。

背景

用户提出的用户体验优化

设置里「菜单展开数量」填 0 表示「展开脚本后才显示菜单」。但当时的实现只是把菜单的可见性挂到折叠面板状态上,菜单节点本身仍渲染在折叠区之外CollapsiblePrimitive.Content 之后)。结果是展开脚本后,DOM/视觉顺序是:编辑 → 脚本设置 →(站点范围操作)→ 删除 → 菜单。用户为了点一个 GM 菜单,要先越过一整列低频操作项。

本次改动

menuExpandNum === 0 时,把 GM 菜单移入折叠面板内部并置于最前,展开脚本后第一眼就是菜单,「编辑 / 脚本设置 / 删除」跟在其后。

menuExpandNum > 0 的行为完全不变:菜单仍常驻在脚本行下方(不在折叠区内),超出数量的部分折叠并显示展开/收起按钮。用户配置项也保持原位(始终可见区域),不随本次改动移动。

实现考虑

  • 菜单项 JSX 抽成 menuNodes 变量,两处按 menusInCollapsible 择一渲染,避免同一段渲染逻辑复制两份。
  • 0 模式下不再需要 isActive ? allVisibleMenus : [] 这个手动可见性判断:Radix Collapsible.Content 在关闭时本就不挂载子节点,收起时菜单自然不渲染(测试里断言了收起态查不到菜单项)。
  • 截断相关状态(shouldTruncateMenus / isMenuExpanded)只在 menuExpandNum > 0 时有意义,条件里显式排除了 0 模式。

建议审查重点

  • 后台脚本行:0 模式下菜单现在排在「运行一次 / 停止」之前。这是刻意的(菜单比操作项高频),如果更希望运行/停止保持首位可以提出。
  • 0 模式 + 有用户配置的脚本:用户配置仍在折叠区外常驻,与菜单不在同一区块,这是既有行为,未改动。

已知限制

仅做了单元测试层面的 DOM 顺序验证,没有跑真实浏览器扩展做视觉确认。

验证

npx vitest run src/pages/popup/App.test.tsx   # 31 passed
npx vitest run src/pages                      # 181 files / 1326 tests passed
npx tsc --noEmit                              # 无输出
npx eslint src/pages/popup/App.tsx src/pages/popup/App.test.tsx   # 无输出
npx prettier --write <两个改动文件>            # unchanged

新增两条测试(先失败后通过):

  • 「菜单展开数量为 0:展开脚本后,菜单排在「编辑」「脚本设置」之前」—— 改动前失败(expected 10 to be less than 7)。
  • 「菜单展开数量大于 0:菜单仍常驻在折叠区之外,位于「编辑」「脚本设置」之后」—— 改动前后均通过,作为回归护栏。

CodFrm and others added 2 commits August 24, 2026 14:26
菜单展开数量设为 0 时菜单只在展开脚本后出现,但仍渲染在折叠区之外,
用户要先跳过编辑、脚本设置、删除等操作项才能点到菜单。改为该模式下
把菜单移入折叠面板并置顶,展开即可直接点菜单;>0 的常驻+截断行为不变。
@cyfung1031

cyfung1031 commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

本次在原 PR head 2a0f95ed 上追加了一个修正 commit:

  • 221d330d — 保留 menuExpandNum > 0 的截断门槛,并补充负数持久化配置的回归测试。

对比原 PR 的行为后确认,0 与正数路径保持原意:0 时菜单进入折叠内容并排在编辑/脚本设置之前,正数时菜单仍在折叠区外并按数量截断。修正针对的是原 PR 引入的旁路回归:设置界面虽然有 min=0,但配置/同步数据没有归一化;当已有持久化值为 -1 时,原实现会显示全部菜单,而原 PR 的 slice(0, -1) 会误删最后一个菜单。修正后恢复原有行为,且不改变标题所要求的 0 路径。

本地证据(基于发布 head 221d330d):

  • 先在原 PR head 上运行新增测试:失败,第二个菜单被截断;应用修正后转绿。
  • pnpm exec vitest run src/pages/popup/App.test.tsx --no-coverage --reporter=dot --testTimeout=5000:32 tests passed。
  • pnpm exec vitest run src/pages/popup --no-coverage --reporter=dot --testTimeout=5000:4 files / 61 tests passed。
  • pnpm exec tsc --noEmit --incremental false:通过。
  • 目标文件 ESLint 与 Prettier 检查:通过。
  • pnpm run build:构建成功;仅有既有的 bundle size 与 Monaco 动态 require 警告。

PR 标题和 body 未修改。GitHub checks 在留言时仍为 pending/in progress,真实浏览器扩展视觉验证也未在本次本地流程中执行。

@CodFrm
CodFrm merged commit 310a16b into main Aug 24, 2026
10 checks passed
@CodFrm
CodFrm deleted the fix/popup-menu-order-when-expand-num-zero branch August 24, 2026 14:50
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.

2 participants