Releases: zhongrubo/zotero-annotation-filter
Release list
v0.2
批注筛选 Annotation Filter v0.1
批注筛选 Annotation Filter
在 Zotero 阅读器左侧侧栏的「注释」列表底部添加一个筛选工具栏,可按 批注类型 进行多选筛选,帮助研究者快速定位特定批注。
A Zotero plugin that adds a filter toolbar at the bottom of the reader's annotation list, allowing you to filter annotations by type.
目录
简介
在文献阅读中,我们经常会在 PDF / EPUB 上做大量批注。当批注数量变多(几十甚至数百条)时,要从中找到某一类批注会变得困难。本插件在 Zotero 阅读器左侧侧栏的注释列表底部加入一个轻量工具栏,让你可以:
- 按 批注类型 筛选(高亮 / 下划线 / 笔记 / 文本 / 选区 / 手写);
- 多选组合(可同时选中多个类型,只显示匹配类型的批注)。
说明:Zotero 阅读器已原生支持按颜色筛选,因此本插件专注于按类型筛选,避免功能重复。
工具栏的 UI 复用 Zotero 阅读器侧栏原生的 CSS 变量与字体,自动适配浅色 / 深色主题,与 Zotero 界面融为一体。
功能特性
-
✅ 六种批注类型筛选(多选)
图标含义 类型 英文 说明 🖍️ 高亮 Highlight 划重点的高亮标记 ▔ 下划线 Underline 下划线标记 🗒️ 笔记 Note 用户笔记注释 ➕ 文本 / 新增文字 Inserted Text 在原文中插入的文字 ⬚ 选区 / 图片 Area Selection 框选区域截图 ✍️ 手写标记 Ink / Handwriting 手写 / 笔迹批注 -
✅ 多选组合:可同时选中多个类型,只显示匹配所选类型的批注。
-
✅ 隐藏而非删除:未匹配的批注仅被隐藏(
display: none),不会修改或删除任何数据;点击「重置」即可完整恢复。 -
✅ 一键重置:工具栏内置「重置」按钮,清空所有筛选条件。
-
✅ 原生风格 UI:字体、字号、配色与 Zotero 阅读器侧栏一致,支持浅色 / 深色模式;类型按钮带等大线框,排列为 2×3 网格,标题为「按类型筛选批注」。
-
✅ 高性能:筛选仅做 DOM 显示 / 隐藏,不改变批注数据,数百条批注下依然流畅。
-
✅ 零配置:安装后工具栏自动出现在注释列表底部,无需任何设置。
安装
方法一:安装 Release 中的 .xpi(推荐)
- 到本仓库 Releases 页面下载最新版
zotero-annotation-filter-0.1.xpi; - 打开 Zotero → 菜单「工具」→「插件」;
- 点击右上角齿轮 →「Install Plugin From File…(从文件安装附加组件)」;
- 选择下载的
.xpi文件,确认安装; - 重启 Zotero。
方法二:从源码构建
见 从源码构建。
使用
- 在 Zotero 中打开任意 PDF / EPUB 附件(进入阅读器);
- 打开左侧侧栏的「注释」标签页(工具栏自动出现在注释列表底部);
- 点击类型按钮进行多选筛选,再次点击取消;
- 点击「重置」清空全部筛选条件。
提示:类型按钮为多选,可自由组合。筛选结果会实时更新。
兼容性
| 项目 | 说明 |
|---|---|
| Zotero 版本 | 7.0 及以上(strict_min_version: 7.0,strict_max_version: 10.9.9),已在 Zotero 9.0.x 实测通过 |
| 操作系统 | Windows / macOS / Linux |
| 文档类型 | PDF、EPUB、Snapshot(快照)等 Zotero 阅读器支持的所有附件 |
更新源:
manifest.json的update_url指向本仓库的update.json(GitHub Raw),用于 Zotero 自动更新检查。发布新版本时请同步更新该文件,详见 发布新版本。
目录结构
zotero-annotation-filter/
├── manifest.json # 插件清单(Zotero 7 WebExtension 风格)
├── bootstrap.js # 插件主逻辑(注入工具栏 + 筛选)
├── update.json # Zotero 自动更新清单
├── README.md # 本说明文档
├── LICENSE # AGPL-3.0 许可证
├── CHANGELOG.md # 更新日志
├── .gitignore # Git 忽略规则
└── screenshots/ # 截图(可选)
.xpi本质是 ZIP 压缩包,其中manifest.json与bootstrap.js必须位于压缩包根目录(不能多套一层文件夹)。
从源码构建
# 1. 克隆仓库
git clone https://github.com/zhongrubo/zotero-annotation-filter.git
cd zotero-annotation-filter
# 2. 打包为 .xpi(仅需这两个文件,且位于压缩包根目录)
zip -X -r zotero-annotation-filter-0.1.xpi manifest.json bootstrap.js然后按 安装 的步骤安装生成的 .xpi 即可。
本插件为零依赖的纯 JavaScript 插件,无需 Node.js / npm 构建流程即可直接打包运行。
发布新版本
-
按需修改
manifest.json的version与bootstrap.js; -
打包新的
.xpi:zip -X -r zotero-annotation-filter-<version>.xpi manifest.json bootstrap.js
-
在 GitHub 创建 Release(tag 用
v<version>),并把.xpi作为附件上传; -
在
update.json的updates数组中新增一条,填写version与对应的 Release 下载地址update_link。
update.json 示例:
{
"addons": {
"annotation-filter@zhongrubo.github.io": {
"updates": [
{
"version": "0.1",
"update_link": "https://github.com/zhongrubo/zotero-annotation-filter/releases/download/v0.1/zotero-annotation-filter-0.1.xpi"
}
]
}
}
}注意:
update.json中的插件 ID 必须与manifest.json的applications.zotero.id完全一致。
收录到 Zotero 插件市场
本插件可被收录进 Zotero 插件市场(Add-on Market for Zotero,即 Zotero 内置的「插件市场」),供用户在 Zotero 内直接检索、安装。
收录条件:
- 插件托管在公开的 GitHub 仓库,并通过 Release 发布
.xpi(见 发布新版本); - 向市场数据源 syt2/zotero-addons-scraper 提交 PR,新增一个条目文件。
提交步骤:
- Fork syt2/zotero-addons-scraper;
- 在
addons/目录下新增一个文件:- 文件名:
zhongrubo@zotero-annotation-filter - 内容(标签最多两个,本插件归属「阅读器 / 批注」):
{"tags": ["reader"]}
- 文件名:
- 提交并创建 Pull Request;
- 待 CI 抓取信息、维护者合并后,即可在 Zotero 插件市场中检索到本插件。
可用标签:
ai/metadata/reader/notes/attachment/interface/integration/utility。本插件推荐reader(阅读与批注),也可追加utility。
技术实现
- 注入时机:通过
Zotero.Reader.registerEventListener("renderToolbar", …)在阅读器每次渲染后注入工具栏; - 数据监听:通过
Zotero.Notifier(item类型)监听批注的新增 / 修改 / 删除; - 兜底刷新:低频轮询(700ms)处理插件启用前已打开的阅读器与侧栏重挂载等情况,这是最可靠的注入手段;
- 筛选映射:从
reader._item.getAnnotations()读取每个批注的annotationType,与侧栏 DOM 中的data-sidebar-annotation-id(即批注 item key)一一对应,据此显示 / 隐藏.annotation元素; - 样式:复用 Zotero 阅读器侧栏的 CSS 变量(
--material-sidepane、--material-panedivider、--fill-secondary、--color-border等),自动适配主题。
常见问题
Q:安装后工具栏没有出现?
A:请确认已重启 Zotero,并在阅读器中打开「注释」侧栏标签页。工具栏位于注释列表最底部。
Q:筛选后批注“消失”了,是数据被删除了吗?
A:没有。筛选只是隐藏(display: none),不会修改或删除任何批注。点击「重置」即可恢复全部批注。
Q:如何更新插件?
A:Zotero 会通过 update_url 指向的 update.json 自动检查更新;也可以手动下载最新 .xpi 覆盖安装。
参与贡献
欢迎提交 Issue 与 Pull Request!
- Fork 本仓库;
- 创建特性分支(
git checkout -b feature/xxx); - 提交修改(
git commit -m 'feat: xxx'); - 推送到分支(
git push origin feature/xxx); - 发起 Pull Request。
提交前请确保 bootstrap.js 语法正确(node --check bootstrap.js)并重新打包验证。
许可证
本项目采用 GNU Affero General Public License v3.0 (AGPL-3.0) 开源许可。详见 LICENSE。
选择 AGPL-3.0 与 Zotero 本体保持一致。使用、修改与分发时请遵守许可证条款。
致谢
- 感谢 Zotero 提供的开放平台与插件体系;
- 参考了 Zotero 官方 Make It Red 示例 与 zotero/reader 源码中的侧栏 / 事件机制。