Commit graph

13 commits

Author SHA1 Message Date
RavenHogwarts
12cd4c2d59 fix: 外部主题文件去重 2026-06-12 13:59:31 +08:00
RavenHogwarts
5d6018aa95 feat: 增加更多的主题 2026-06-11 16:04:08 +08:00
RavenHogWarts
a095d31176
refactor: 优化解决自动审查 (#112)
* refactor: 移除未使用的依赖项

移除项目中未使用的依赖项,包括 dotenv、
builtin-modules、fs-extra、jsonfile 和
universalify。这些依赖项不再被代码使用,
移除它们可以减少项目体积并简化依赖管理。

* refactor: 迁移 ESLint 配置到新版本

将 ESLint 配置迁移到最新的扁平化配置格式,
使用 defineConfig 和 globalIgnores 简化配置
结构。更新 TypeScript 解析器为 typescript-eslint
包,提取 Obsidian 全局变量为常量以提高可维护
性。调整测试环境从 Jest 改为 Mocha,并添加
React 全局变量支持。

* feat: 添加编辑器样式和调整大小光标

添加隐藏的字体测试元素样式用于测量字体
尺寸。添加调整大小状态样式以在拖动时显示
正确的光标和禁用文本选择。这些样式改进
了编辑器的用户交互体验。

* feat: 使用全局对象调用计时和动画函数

将所有 setTimeout、requestAnimationFrame 和
document.createElement 调用改为使用全局对象
(window 或 activeDocument) 来调用。这样做是为了
提高代码的可测试性和兼容性,使得在测试环境中能够
更容易地 mock 这些全局函数,同时确保在不同的执行
上下文中都能正确地访问这些 API。

* feat: 使用 activeDocument 替换全局 document

将所有全局 document 引用替换为 activeDocument,以支持
多文档环境。这包括事件监听器、DOM 操作和样式管理。

主要改动:
- Minimap 和 useResize 中的事件监听使用 activeDocument
- 将 useResize 中的内联样式改为 CSS 类名管理
- isFontAvailable 函数改用 Canvas API 替代 DOM 测试
- AceService 和 Select 组件中的 DOM 查询使用
  activeDocument
- 使用 window.requestAnimationFrame 替代全局引用

这些改动提高了代码的可移植性和多文档支持能力。

* feat: 更新设置视图的显示文本

修改 SettingsView 组件中 getDisplayText 方法返回的
文本内容,将显示文本从 "ACE SettingTab" 更新为
"Ace settingtab",以保持与应用命名规范的一致性。

* style: 修复代码格式和样式问题

修复多个文件中的代码格式问题,包括函数参数和
依赖数组末尾的逗号缺失。优化 CSS 选择器特异性
以确保 Ace 搜索框样式正确应用,并移除不必要的
!important 声明。这些改动提高了代码的一致性
和可维护性。

* feat: 移除 ace-builds esm-resolver 导入

移除了 ace-builds 的 esm-resolver 导入语句,因为该模块
在当前环境中不需要自动处理模块路径。同时简化了
AceService 构造函数,移除了不必要的注释说明。这些
改动使代码更加简洁,减少了不必要的依赖。
2026-05-20 00:36:28 +08:00
RavenHogWarts
ffd29e7ee2
chore: 重构脚本工具链,使用pnpm (#101)
移除 copy-to-vault.mjs 脚本,简化项目构建流程。
更新 version-bump.mjs 使用 node: 前缀导入,并
修复 Beta 版本发布时的 versions.json 更新逻辑。
规范化 sync-i18n.mjs 代码风格,统一使用单引号
和标准缩进格式,提升代码可维护性。
2026-03-04 19:49:27 +08:00
RavenHogWarts
bfd7393336
feat: 新增片段编辑器与开关功能 (#79)
* feat: 新增片段编辑器与开关功能

在 Snippets 相关视图与工具中添加主要功能和重命名参数,
以便提供独立的片段编辑器页面并统一操作接口。

- 在 SnippetsFileModal 中重命名回调 openExternalFile 为
  openSnippetFile,并改用 file 名称传参,简化调用与语义。
  更新所有调用点(打开文件与创建后自动打开)以使用新接口。
- 在 ObsidianUtils 中将 runCommandById 改为同步执行并新增
  toggleSnippetState,用于切换片段的启用状态并触发重新载入
  片段 CSS。
- 新增 SnippetsEditorView 组件,基于 AceEditorView 实现完整
  片段编辑器视图:
  - 提供左右分栏的文件导航与编辑区,支持只读与保存操作。
  - 实现视图状态保存/恢复、文件保存到 vault,并在保存后
    请求重新加载片段 CSS。
  - 提供片段启用/禁用的 UI 行为(toggle action),通过
    SnippetUtils.toggleSnippetState 控制并更新提示信息。
  - 注册 css-change 事件以在外部变更时更新开关状态。

这些变更修复了不一致的命名、增加了片段编辑的独立视图并
支持在 UI 中直接启用或禁用片段,提升可用性与代码可维护性。

* feat: 添加侧边栏控制开关

在 SnippetsEditorView 中加入侧边栏切换功能并重构片段开关相关逻辑。
- 移除无用的 setTooltip 导入,避免未使用导入警告。
- 新增“Toggle sidebar”动作,用于在视图内收起/展开右侧面板,
  并在展开后延迟触发编辑器 resize 以修正布局问题。
- 将原先的 toggleAction 重命名为 toggleSnippetAction,清晰区分
  侧边栏控制与片段启用/禁用的操作语义。
- 将片段开关动作移到单独注册的位置,保持职责分离,并在更新
  状态时直接切换按钮样式(mod-success),简化 tooltip 逻辑。
- 在样式中加入 .is-collapsed 规则,收起时隐藏面板以实现预期
  的折叠行为。

这些变更提升了 UI 控制的可读性和可靠性,修复了面板展开后
编辑器尺寸未及时更新的问题,同时让片段开关的命名更具可
理解性。

* feat: 改进片段侧栏文件列表与元数据获取

在 SnippetsNavigation 中将文件列表从字符串数组改为包含元数据的对象数组,
并添加对每个片段文件的详细信息获取(不带扩展名的显示名、最后修改时间、
以及是否已启用)。这样可以在界面上显示更丰富的信息并支持基于元数据的交互。
同时重构了渲染结构和样式:
- 移除多余的内联样式,使用类名(tappable/is-clickable)统一交互样式并简化 DOM 结
  构。
- 将刷新按钮移入统一的 nav-header 容器并将点击处理绑定到图标上,加入加载旋转
  动画的样式(animate-spin)。
- 点击回调现在传递文件名(含扩展名)以便上层组件确定选中项。

在样式文件中添加了导航相关的样式规则和旋转动画定义以替代内联样式。
在 SnippetsEditorView 中调整图标标识为 code-xml,以匹配新的视觉语义。

这些改动提高了片段列表的可用性和可扩展性,便于后续展示更多元数据或操
作。

* feat: 添加侧边栏视图、日期与排序支持

在 Snippets 功能中添加并重构若干重要特性,提升可用性与本地化支持:
- 在 i18n 类型定义中新增 view.snippets 的字符串与参数签名(created/
  modified/no_snippets),以支持片段视图的本地化文本与占位参数。
- 在 SnippetsEditorView 中修复面板折叠后编辑器尺寸问题:
  在切换左侧面板类名后触发 ace 编辑器 resize,避免布局异常。
  将传递给导航组件的 prop 从 app 改为 plugin,并新增 onResize 回调,
  以便在导航宽度变化时通知外部组件调整编辑器大小。
- 新增 utils/formatDate 工具,统一格式化时间戳为 "YYYY-MM-DD HH:mm:ss",
  用于在界面中显示创建/修改时间。
- 重写 SnippetsNavigation 组件:
  - 使用 plugin 替代直接依赖 App,便于访问插件实例与其 app。
  - 增加 created 与 modified 字段,确保显示创建与修改时间。
  - 引入排序类型(按名或按时间升降序)与排序状态管理。
  - 引入可拖拽调整宽度的 useResize 钩子,支持最小宽度与 onResize 回调。
  - 在加载文件时通过 plugin.app 读取文件状态并判断启用状态。
  - 增加右键菜单、重命名、删除确认和格式化时间显示等交互改进。

为什么做这些改动:
- 提升用户体验:动态调整侧栏宽度并在调整后正确重置编辑器尺寸,
  避免编辑器渲染问题。
- 增强可读性与信息完整性:显示创建与修改时间并提供统一日期格式。
- 完善国际化:为新视图文本添加类型定义,确保类型安全和翻译覆盖。
- 代码结构优化:通过传入 plugin 而非散乱依赖 App,提高组件的可测性
  与插件上下文的一致性。

* feat: 重构代码以统一处理 snippet 文件名与批量切换

将对 snippet 文件名的处理统一为直接去除末尾四个字符
(假定扩展名为 .css),移除重复的 endsWith 检查,简化逻辑,
减少分支判断带来的复杂性。为批量启用/禁用新增了
toggleAllSnippetsState 方法,封装遍历和设置逻辑,并在 UI
中替换原先的逐个处理实现为对该新方法的调用,从而:
- 减少重复代码并集中管理启用/禁用流程;
- 将加载请求聚合为一次调用,避免多次触发请求;
- 将文件名处理规则统一,降低潜在的字符串处理错误。

这些改动提升了可维护性和可读性,同时保证启用/禁用
操作在逻辑上更一致。

* feat: 新增与重构文件创建/重命名对话框组件

将重命名对话框从 RenameFileModal 重构为更通用的
RenameFileDialog,拆分视图组件并引入可配置的 title/
message 和可选 onClose 回调。替换直接依赖 App 的构造,
改为接收插件实例(AceCodeEditorPlugin)以使用 plugin.app,
并改进关闭回调为可选链调用,避免未定义回调报错。

新增 CreateFileDialog 组件,提供统一样式的文件创建
对话框,包含 title/message、输入校验及回车/Esc 快捷键支
持,创建成功后回调文件名(自动追加 .css)并关闭对话框。

同时清理并调整若干 UI 文本与按钮顺序,复用同一套
对话框样式与交互逻辑,提高组件复用性与健壮性。

* feat: 优化片段导航按钮的可点击区域和图标

将导航栏中若干操作按钮的交互从图标元素的 onClick
绑定移到外层容器(div),扩大了可点击区域以提升可用性和无障碍性。
同时替换并调整了部分图标导入:
引入 CircleEllipsis 代替 ListChecks,并将图标渲染改为在容器中
简单渲染,移除图标上的事件与 aria 属性,统一由容器负责处理。
修正了刷新按钮在容器与图标间重复绑定事件的问题,保留 loading
状态下的旋转样式不变。

这些改动提升了点击目标大小、语义清晰度和事件处理一致性,減少
了潜在的重复触发和可访问性问题。

* feat(i18n): 完善英文與繁體中文翻譯字串

更新內容:
- 將多處字串從佔位或 TODO 替換為完整英文翻譯(例如
  enable/disable/rename/delete、排序與批次操作相關選項等),
  以補足 UI 顯示缺失並提升使用體驗。
- 新增或調整提示/確認訊息的文案,包含重新命名成功與刪除確認等,
  使訊息更清楚且一致。
- 統一並修正部分程式碼風格(使用雙引號、分號、satisfies
  陳述式與檔案末尾分號),減少 lint/格式化差異。
- 繁體翻譯對應同步更新,將相關 TODO 替換為正確繁體用語,
  並修正少數用詞(例如「重新載入外掛程式」)。

為什麼要做:
- 補全翻譯能避免 UI 顯示 TODO 或空白,提升可用性與產品專業度。
- 統一格式與小修正可降低未來合併衝突與 lint 錯誤,維持代碼品質。

* feat: 优化片段编辑器视图和空状态处理

将命令 id 从 openCssSnippet 重命名为 openCssSnippetView,
并改为通过 openPluginView 打开片段编辑器视图,统一视图打开方式,
提升命令语义一致性与可复用性。

为右侧编辑区域添加空状态样式(ace-snippets-empty-state),
并在 SnippetsEditorView 中实现空状态渲染逻辑:
- 在没有选中文件时不初始化编辑器,改为渲染空状态提示,
  避免不必要的编辑器实例化与渲染开销;
- 在首次访问或从空状态切换到有文件时重新初始化编辑器,
  并恢复编辑器可编辑状态,保证编辑流程正确。

添加对 getEditorContainer 的防御性检查,若右侧面板未初始化则抛出错误,
避免在未准备好 DOM 时访问导致隐蔽的运行时异常。

总体上这些改动改善了视图初始化时序、用户体验和错误可
察觉性,减少资源浪费并提高维护性。

* feat(plugin): 将片段管理改为插件视图

将原先内置的 CSS 片段管理模态窗及其组件移除,改为通过插件视图
(SNIPPETS_EDITOR_VIEW_TYPE)打开片段编辑器。主要变更包括:

- 在 main.ts 中把原先调用 openCssSnippetSelector 的位置替换为
  openPluginView(SNIPPETS_EDITOR_VIEW_TYPE),使片段管理以插件视图
  而非模态框方式展示,统一视图体验并便于扩展。
- 删除 SnippetsFileModal 组件及其相关逻辑(整个文件移除),减少
  重复代码并将片段管理职责下放到插件视图实现,简化主流程。

改动原因:
- 通过插件视图可以提供更灵活的 UI/交互(可停靠、持久化等),更
  适合复杂的片段管理场景。
- 删除旧的模态实现有助于精简代码库,降低维护成本并避免功能重
  复。

* feat: 批量切换与国际化改进

新增对批量切换代码片段开启/关闭的支持与路径处理,
并扩展 i18n 文本与类型定义以支持搜索相关文案。
主要变更:
- 在 SnippetUtils.toggleAllSnippetsState 中处理完整路径,
  提取文件名并去除后缀再设置 CSS 启用状态,保证传入
  为带路径或仅文件名时均能正确识别。
- 新增 SnippetUtils.toggleBatchSnippetsState,接受文件
  列表并批量切换状态,复用相同的 id 计算逻辑。
- 在所有英语/中文 i18n 文件与类型声明中更新文案:
  - 将 "No snippets" 改为 "No snippets found"(对应中文为
    "没有发现代码片段"),以表达更准确的含义。
  - 添加搜索相关文案与类型:search_placeholder、
    case_sensitive、clear_search,并补充相应的类型注释
    与本地化函数签名。
- 清理并合并部分已移除的 snippetsFile 节点结构,简化
  类型定义以匹配新的界面需求。

为何改动:
- 保证在不同平台或 API 返回带完整路径时仍能正确处理
  代码片段 id,避免无法切换的问题。
- 提供批量操作接口以便性能与可用性更好地支持多选
  场景。
- 丰富国际化字符串以支持搜索功能并提升文案准确性与
  可读性,类型定义同步更新以保证类型安全。
2026-01-01 12:46:13 +08:00
RavenHogWarts
f798c7de4d
feat(i18n): 添加 typesafe-i18n 同步与类型支持 (#76)
将 typesafe-i18n 作为依赖加入 package.json / package-lock,
并新增 i18n 同步脚本与自动生成的同步文件,以便运行时加载
并初始化本地化资源。调整 package.json 的 version 脚本以在
发布前生成构建和变更日志并安装依赖,同时添加 i18n 相关 npm
脚本 (i18n:typesafe, i18n:sync)。

主要更改:
- 在 package.json / package-lock.json 中加入 typesafe-i18n 依赖。
- 新增 src/i18n/i18n-util.sync.ts(由 typesafe-i18n 生成),实现
  loadLocale / loadAllLocales / loadFormatters 用于按需加载翻译。
- 在 src/i18n/zh/index.ts 中使用新的类型签名(satisfies BaseTranslation)
  并调整占位符格式为 typesafe-i18n 所需的 "{name:type}" 形式,确保
  翻译文件与类型系统一致。
- 移除或替换不再需要的 release-tag 脚本文件,简化发布流程。

为什么做这些改动:
- 引入 typesafe-i18n 以获得类型安全的国际化,避免运行时翻译键或
  占位符类型错误,提高开发体验和可靠性。
- 自动生成与同步的翻译加载代码可以支持按需加载和格式化器初始化,
  提升加载性能并统一翻译管理。
- 修改发布脚本以在发布前确保构建、变更日志和依赖一致,降低发布出错风险。
2025-12-28 01:35:14 +08:00
RavenHogwarts
d3d2c56aa5 chore(eslint): 添加 ESLint 配置并升级依赖
在项目新增顶层 eslint.mjs,用统一配置 JavaScript/TypeScript
的 lint 规则,启 @typescript-eslint 与idianmd 插件,并定制多项规则以
匹配插件开发与 Obsidian 平台的最佳实践。主要包括禁用/放宽若干 TS 规则、
引入导入排序、以及大量 obsidianmd 特定检查(命令命名、内存泄漏防护、
API 使用建议、平台兼容性等),提高代码质量和平台兼容性。

同时更新 package.json 中的 devDependencies 与 dependencies 版本,修复
若干工具与类型定义的版本以保持与现有代码和新规则的一致性,减少因
版本不匹配导致的 lint/编译问题。
2025-11-06 15:20:02 +08:00
RavenHogWarts
29b544ee67
chore: 优化构建脚本 (#41)
* chore(release): 升级版本并在发布前安装依赖

更新 package.json 与 package-lock.json 中的包版本号,从
1.2.2 升级到 1.3.1,表明进行了一次新发布。为发布流程调整
release:pre 脚本,新增在构建、更新版本和生成变更日志后执行
npm i,确保在打包与发布前安装/同步依赖,避免发布缺少或
不一致的依赖导致的问题。

主要变更:
- 将项目版本从 1.2.2 提升到 1.3.1(package.json/package-lock.json)
- 在 release:pre 脚本中追加 npm i,保证发布前安装依赖

原因:
- 显式升级版本以发布新版本。
- 在发布脚本中加入依赖安装步骤,减少 CI/本地发布过程中
  因依赖未安装或锁文件不一致而产生的故障。

* feat: 优化脚本和配置读取

将 copy-to-vault.mjs 重构更健壮和可扩展的复制工具。主要改动包括:
- 调整模块导入顺序并以 quiet 模式加载 dotenv,避免在无 .env 时输出多余信息。
- 将项目根目录变量命名为 projectRoot,替代原来的 rootDir,提升可读性。
- 引入 fileConfig 数组集中管理要复制的文件及来源路径,便于以后扩展更多文件。
- 改为从 fileConfig 中查找并读取 manifest.json,基于 manifest.id 计算目标插件目录。
- 将目标插件目录命名为 targetPluginDir 并确保递归创建;复制过程中对缺失源文件给出警告而非失败,
  并取消逐文件的冗余日志,最终只输出成功提示,错误时仍然终止进程。
- 规范化部分错误/提示信息文本(英文错误信息以便一致性)。

这些改动提高了脚本的可维护性、可扩展性和对异常情况的容错能力。

* ci: 删除 PR 构建工作流文件

移除 .githubflows/pr-build.yml 文件,删除整个 PR 构建流程。
该文件包含对 PR 来源、标签(safe-to-build)和/外部仓安全性
的检查、构建、打包与上传构件以及 PR 上留言的步骤。删除该文件是
因为不再需要通过仓库内的 CI 自动为 PR 生成构建产物,或该流程已被
迁移到其他系统/仓库中。主要目的是简化仓库配置并避免重复或过时的
自动化逻辑。
2025-10-29 20:16:16 +08:00
RavenHogWarts
358da40a8d
ci: 更新贡献和发版流程 (#29)
* feat(ci): 添加 PR 专用构工作流并增加安全检查

新增 .github/workflows/pr-build.yml,提供 PR 提交时的专用构建流程,
并在工作流中加入严格的安全检查逻辑以防止来自外部仓库的任意构建。

主要变更:
- 新增 PR Build 工作流(name: PR Build),在 pull_request_target 触发
 (types: opened, synchronize, reopened, labeled)。
- 增加权限配置(contents/read, pull-requests/write, checks/write,
  statuses/write)并设置 PLUGIN_ID 环境变量。
- 添加 security-check 作业:
  - 判断事件类型并检测 PR 来源(内部仓库或外部仓库)。
  - 对 labeled 事件仅在加入 safe-to-build 标签时允许构建。
  - 输出两个标志:is-safe 和 should-build,控制后续是否构建。
- 添加 build 作业(依赖 security-check):
  - 仅在 should-build == 'true' 时运行。
  - 检出 PR 分支代码(ref 为 PR head sha),设置 Node.js,安装依赖并执行构建。
  - 打包构建产物为 zip 并上传为 artifact(保留 7 天)。
  - 在 PR 上发表评论,包含构建信息、触发原因及下载链接(根据事件类型区分
    labeled 与其他触发)。

变更原因:
- 避免直接对外部 PR 自动构建可能带来的安全风险,通过 safe-to-build
  标签和来源检测来显式授权构建。
- 为 PR 提供可下载的构建产物与构建通知,方便审查与测试。

* feat(ci):除自动生成 Changelog 的Hub Action 步骤删除 release workflow 中 "Generate Changelog 步骤,除针对

中两版 CHANGE 的提取、标题级别判断awk 提取逻以及安装
的拼接。这样做是因为该步骤过于复杂且在当前流程中不再需要,
减少 CI 配置复杂度并避免在发布流程中因 changelog 提取失败导致
构建中断。

* chore(scripts): 移除中文 changelog 脚本调用并同步脚本路径

- 从 package.json 中移除对 CHANGELOG-zh.md 的 conventional-changelog
  命令调用,合并只生成英文 CHANGELOG。
- 更新 changelog:u 与 changelog:all 脚本,去掉对中文选项脚本的依赖,
  避免在无中文文件或脚本时导致发布流程失败。
- 同步变更记录语言为简体中文格式(仅修改 CHANGELOG.md 内容为中文翻译),
  以便发布说明更适配中文用户阅读。

这样做可以简化发布脚本依赖,减少发布时因缺少中文文件或脚本
引发的错误,同时保证主要 changelog 正常生成。

* feat(release): 增强发布脚本的健壮性与交互选项

- scripts/release-tag.mjs:
  - 添加 safeExec 封装执行命令并提供重试/跳过逻辑,
    避免重复执行导致脚本中断。
  - 添加 hasUncommittedChanges、tagExists、remoteTagExists
    等辅助函数,用于在提交、打标签和推送前做检查。
  - 在无变更时跳过 commit;在本地/远程已存在标签时跳过
    创建或推送标签;对 push 操作允许可跳过错误。
  - 发布失败时打印重试提示,整体输出更友好并更具容错性。
- scripts/version-bump.mjs:
  - 修复 parseVersion 返回对象的格式(补上逗号)并去掉多余空白。
  - 添加对“第一次发布 (1.0.0)”的特殊处理,调整交互选项
    显示顺序与编号;根据是否为第一次发布或 beta 状态
    动态显示可选项数量(1-5 或 1-6),并正确显示 beta
    的下一个编号。

这些改动提升了发布流程的安全性与可用性,减少手动
干预并避免重复操作带来的失败。
2025-08-13 00:11:24 +08:00
RavenHogWarts
4ed397d4d7 chroe: 支持beta版本号解析与自动递增
- 重构版本号解析逻辑,支持识别和处理beta版本号格式
- 根据当前版本状态动态显示beta版本选项,提升用户体验
- 自定义版本输入支持beta格式,增加格式校验和错误提示
- beta版本递增逻辑优化,确保版本号正确递增和切换
- 保持原有正式版本更新流程不变,兼容性良好
2025-06-12 22:24:39 +08:00
RavenHogWarts
0dd21cd7ad
refactor: 重构设置界面 (#3)
* refactor: 移除设置页标题和描述文本,简化界面

删除代码编辑器相关的标题和描述文案,调整设置页头部结构,
使界面更简洁,避免冗余信息,提高用户体验。

* refactor: 将所有警告和错误日志改为抛出异常

将代码中原先使用 console.warn 和 console.error 的地方
统一改为抛出 Error 异常,提升错误处理的严谨性和一致性。
这样可以确保错误不会被忽略,便于上层捕获和处理,增强代码健壮性。

* refactor: 移除保留 console 的构建选项

删除了 esbuild 配置中用于保留 console 的参数和相关逻辑,
简化了构建流程。更新 package.json 中的 build:local 脚本,
去除 keep-console 参数,确保本地构建时不保留 console。
2025-05-24 20:10:24 +08:00
RavenHogWarts
b40410655a chore: 升级依赖并优化构建配置
- 更新 obsidian 依赖版本至 1.8.7,修复潜在兼容性问题。
- 修改构建脚本,新增 keep-console 参数,支持生产环境保留 console 调试信息。
2025-05-07 15:32:11 +08:00
RavenHogWarts
11350fe432
Initial commit 2025-05-04 12:05:18 +08:00