为了更好地管理全站的学习规划和临时任务,我编写了一个 TODO 插件。它可以自动提取全站所有 Markdown 文档中的待办事项,并生成一个汇总页面。
插件功能
- 自动收集:通过 Transformer 插件扫描所有文档中的
- [ ]和- [x]节点。 - 首页组件:在首页底部展示最新的待办任务,样式与“最近更新”模块保持高度统一。
- 汇总页面:生成
/todo路由,按状态(未完成优先)和更新时间展示所有任务。 - 精准定位:每条待办事项都带有来源链接,且支持 Quartz 的 Popover 预览功能,悬停即可查看任务所在的文档上下文。
- 手动补充:如果根目录下存在
content/todo.md,汇总页会优先展示其中的手动规划内容。
如何使用
下载文件
请将以下文件下载并保存至项目的 quartz/custom/ 对应位置:
启用插件
- 配置 Transformers:在
quartz.config.ts中添加:Custom.TodoTransformer(), - 配置 Emitters:在
quartz.config.ts中添加:Custom.TodoEmitter(), - 配置布局:在
quartz.layout.ts的afterBody中添加组件:Component.ConditionalRender({ component: Custom.RecentTodo({ title: "最新待办", limit: 1, }), condition: (page) => page.fileData.slug === "index", }),
注意事项
- ID 冲突:插件会根据每个文件中的 TODO 数量自动生成 ID(如
todo-1)。由于每个文件的计数是独立的,跨文件可能会有重复的 ID,但通过结合文件 Slug(#todo-1),在页面定位和预览时是唯一的。 - 排序逻辑:汇总页默认将“未完成”项目置顶,相同状态下按文档的更新时间(Modified Date)倒序排列。
- 冲突处理:为了让
/todo路径完全由汇总插件控制,需要确保quartz/plugins/emitters/contentPage.tsx中跳过了该路径的处理。