mirror of
https://github.com/panatgithub/AnkiHeadingSync.git
synced 2026-07-22 17:10:28 +00:00
中文: 将范围设置统一为插件运行范围,并把文件夹选择区调整为对齐稳定的 Finder 式树形 UI。 English: Renames the scope settings to plugin run scope and refines the folder selector into a stable Finder-style tree UI.
3.5 KiB
3.5 KiB
Plugin Run Scope UI Gap Report
审查范围
本次按真实仓库实现审查了以下位置:
- src/presentation/settings/PluginSettingTab.ts
- src/presentation/i18n/messages/zh.ts
- src/presentation/i18n/messages/en.ts
- src/presentation/settings/PluginSettingTab.test.ts
- src/presentation/settings/FolderScopeTree.test.ts
- scripts/sync-plugin-dist.mjs
- scripts/obsidian-plugin-path.mjs
当前实现确认
1. 范围卡文案仍是旧版本
当前范围卡使用:
- 卡片标题
卡片同步范围 - 范围下拉名称
运行范围 - 顶部说明
保留现有作用范围和文件夹树逻辑;文件夹树按需加载,并支持局部刷新。
与本轮目标的 插件运行范围 不一致。
2. 范围卡顶部说明目前仍会渲染
renderScopeCard() 当前第一行就是:
containerEl.createEl("p", { text: t("settings.cards.scope.desc") })
这会直接把旧说明文案渲染到页面上。
3. 当前文件夹树行结构还不是固定三列
renderFolderNode() 当前实现是:
- 行容器只用
paddingLeft = depth * 18px - 行内依次直接放 toggle、checkbox、label
- 没有固定宽度的展开槽
- 没有稳定的三列 grid
- label 也没有单行省略样式
结果是:
- 无子节点时展开槽不具备明确占位样式
- checkbox 对齐依赖默认 inline 布局
- 长文件夹名可能撑乱排版
4. 当前没有“已选祖先自动展开”逻辑
当前展开状态只来自:
expandedFolderPaths- 用户点击
folderToggle
当前没有:
- 初次加载树后自动展开已选项祖先
- 切换到 include / exclude 后补充展开已选祖先
- refresh 后重新展开已选祖先
因此如果 includeFolders = ["notes/sub"],打开范围卡后 notes 不会自动展开。
5. 现有局部刷新行为已经满足复用条件
真实代码已经具备以下可复用行为:
refreshFolderTree()只重渲染 scope cardupdateScopeMode()只重渲染 scope cardupdateFolderSelection()只重渲染 scope cardFolderScopeTree.test.ts已经覆盖选择压缩算法
这意味着本次只需要改 UI 结构与补充展开策略,不需要动选择压缩逻辑。
6. build/sync 脚本当前已满足目标目录安全要求
当前 scripts/sync-plugin-dist.mjs 只会复制:
dist/plugin/main.jsdist/plugin/manifest.jsondist/plugin/styles.css(如果存在)
不会删除目标目录文件,也不会触碰 data.json。
建议的最小落点
- 只改
PluginSettingTab.ts的范围卡渲染与树行样式 - 更新
settings.cards.scope.title与settings.scope.name - 删除范围卡顶部说明的渲染,但不改业务逻辑
- 给树行改为固定三列 grid,并保留现有 dataset
- 增加“按需补充展开已选祖先”的一次性标志位
- 在
PluginSettingTab.test.ts补标题、旧说明消失、树行对齐、已选祖先展开测试
与计划的显式偏差
没有产品级偏差。
唯一需要记录的是实现层面的仓库现实:
- 当前 sync 脚本已经是安全复制 built plugin 文件的版本
- 因此本轮不需要再改 build/sync 脚本,只需要继续按它的产物约束验证和同步