panatgithub_AnkiHeadingSync/docs/plugin-run-scope-ui-decisions.md
Dusk 23b9b83527 fix(settings): refine plugin run scope tree UI
中文: 将范围设置统一为插件运行范围,并把文件夹选择区调整为对齐稳定的 Finder 式树形 UI。

English: Renames the scope settings to plugin run scope and refines the folder selector into a stable Finder-style tree UI.
2026-04-26 08:50:51 +08:00

2.2 KiB

Plugin Run Scope UI Decisions

1. 最终文案决策

范围卡最终统一为:

  1. 中文卡片标题:插件运行范围
  2. 英文卡片标题:Plugin run scope
  3. 中文范围下拉名称:插件运行范围
  4. 英文范围下拉名称:Plugin run scope

范围卡顶部旧说明不再渲染。

2. 文件夹树行布局决策

每个树行固定为三列:

  1. 展开槽
  2. checkbox
  3. 文件夹名

布局固定为:

  1. display: grid
  2. grid-template-columns: 24px 24px minmax(0, 1fr)
  3. align-items: center
  4. 固定最小高度

缩进只由 depth * 18px 控制,使用行容器的左边距实现。

3. 展开槽与文件夹名决策

展开槽规则固定为:

  1. 有子节点时用轻量按钮
  2. 无子节点时仍渲染占位元素
  3. 两种情况下都保留 folderToggle dataset
  4. 展开符号继续使用 ▸ / ▾

文件夹名规则固定为:

  1. 单行显示
  2. overflow: hidden
  3. text-overflow: ellipsis
  4. white-space: nowrap

4. 已选祖先自动展开策略

补充展开已选祖先的时机固定为:

  1. 文件夹树首次成功加载后
  2. 作用范围切换到 include / exclude
  3. 手动刷新文件夹树后
  4. 设置页关闭后再次进入时

不在以下场景强制重置:

  1. 用户手动点击展开/折叠后的普通重渲染
  2. 勾选/取消勾选文件夹后的普通重渲染

实现方式是一次性“待补充展开”标志位,而不是每次 render 都强行根据已选项重算展开状态。

5. refresh 行为决策

refreshFolderTree() 保持现有语义:

  1. 清空旧展开状态
  2. 重新加载树
  3. 加载完成后再次补充展开已选祖先

6. 保持不变的内容

本次明确保持不变:

  1. all / include / exclude 的业务含义
  2. 设置字段名和枚举值
  3. FolderScopeTree 的选择压缩算法
  4. 作用范围对同步逻辑的影响
  5. 设置页局部刷新机制
  6. 不新增 CSS 构建链路

7. 与计划的显式偏差

没有行为偏差。

仅有一个实现级说明:

  1. 当前仓库已经有安全的 built-plugin sync 脚本
  2. 因此最终同步继续复用 build:obsidian 和现有脚本,而不是再引入新的同步实现