{"id":27647064,"url":"https://github.com/volatile-static/chartero","last_synced_at":"2026-04-22T06:07:03.412Z","repository":{"id":60977316,"uuid":"531426070","full_name":"volatile-static/Chartero","owner":"volatile-static","description":"Chart in Zotero","archived":false,"fork":false,"pushed_at":"2025-09-01T21:55:55.000Z","size":3971,"stargazers_count":459,"open_issues_count":21,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-01T23:32:01.805Z","etag":null,"topics":["highcharts","t-design","vue3","zotero","zotero-addon","zotero-plugin"],"latest_commit_sha":null,"homepage":"https://gitee.com/const_volatile/chartero","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/volatile-static.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-01T08:17:39.000Z","updated_at":"2025-09-01T21:55:58.000Z","dependencies_parsed_at":"2023-02-09T21:00:49.117Z","dependency_job_id":"fe4fde3c-6d54-44d7-b881-5f4f7c3ad488","html_url":"https://github.com/volatile-static/Chartero","commit_stats":null,"previous_names":[],"tags_count":72,"template":false,"template_full_name":null,"purl":"pkg:github/volatile-static/Chartero","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volatile-static%2FChartero","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volatile-static%2FChartero/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volatile-static%2FChartero/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volatile-static%2FChartero/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/volatile-static","download_url":"https://codeload.github.com/volatile-static/Chartero/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/volatile-static%2FChartero/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32123605,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T00:31:26.853Z","status":"online","status_checked_at":"2026-04-22T02:00:05.693Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["highcharts","t-design","vue3","zotero","zotero-addon","zotero-plugin"],"created_at":"2025-04-24T01:31:02.344Z","updated_at":"2026-04-22T06:07:03.395Z","avatar_url":"https://github.com/volatile-static.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align='center'\u003eChartero\u003c/h1\u003e\r\n\u003cp align='center'\u003e\r\n    \u003ca href=\"https://app.codacy.com/gh/volatile-static/Chartero/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade\"\u003e\r\n        \u003cimg src=\"https://app.codacy.com/project/badge/Grade/e9a03b20fb90462180218819b41eb34d\" alt='codacy' /\u003e\r\n    \u003c/a\u003e\r\n    \u003ca href='../src/'\u003e\r\n        \u003cimg src='https://img.shields.io/github/languages/code-size/volatile-static/Chartero?logo=vuedotjs' alt='code size' /\u003e\r\n    \u003c/a\u003e\r\n    \u003ca href='https://github.com/volatile-static/Chartero/releases/latest/download/chartero.xpi'\u003e\r\n        \u003cimg src='https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fapi.github.com%2Frepos%2Fvolatile-static%2FChartero%2Freleases%2Flatest\u0026query=%24.assets%5B0%5D.size\u0026suffix=%20Bytes\u0026label=XPI\u0026logo=Zotero\u0026logoColor=%23CC2936' alt='xpi size' /\u003e\r\n    \u003c/a\u003e\r\n    \u003ca href='https://github.com/volatile-static/Chartero/releases'\u003e\r\n        \u003cimg src=\"https://img.shields.io/github/downloads/volatile-static/Chartero/total?logo=github\" alt='download' /\u003e\r\n    \u003c/a\u003e\r\n    \u003ca href='https://github.com/volatile-static/Chartero/releases/latest/'\u003e\r\n        \u003cimg src=\"https://img.shields.io/github/downloads/volatile-static/Chartero/latest/total\" alt='latest' /\u003e\r\n    \u003c/a\u003e\r\n\u003c/p\u003e\r\n\u003cp align='center'\u003e\r\n    \u003ckbd\u003eEnglish\u003c/kbd\u003e | \u003ca href='doc/readme.Md'\u003e简体中文\u003c/a\u003e\r\n\u003c/p\u003e\r\n\r\n## Abstract\r\n\r\nThe name _Chartero_ is a combination of **Char**t and Zo**tero**. As a [Zotero](https://www.zotero.org/) plugin, it can make your library livelier.\r\n\r\n## User Guide\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cu\u003e👉 \u003cb\u003eIntroduction\u003c/b\u003e 👈\u003c/u\u003e\u003c/summary\u003e\r\n\r\n|                   Screenshots                   | Features                                                                                                                     |\r\n| :---------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------- |\r\n|      ![history recording](doc/record.jpg)       | The kernel of `Chartero`. It records page numbers and timestamps when you read.                                              |\r\n|         ![open recent](doc/recent.png)          | In the main menu `File`, you can open the recently read documents.                                                           |\r\n|            ![column](doc/column.png)            | In `items tree` of the library view, you can add a column to show reading progress.                                          |\r\n|         ![dashboard](doc/dashboard.jpg)         | Illustrates all information about a `top-level item`. Updating as soon as record changes when in a `Reader`.                 |\r\n|           ![summary](doc/summary.jpg)           | Summary of two or more `items`. _Will not_ be loaded if the number of selected items is larger than you set in preferences.  |\r\n|          ![overview](doc/overview.jpg)          | Click `Main menu -\u003e View -\u003e Overview` and jump to a new tab.                                                                 |\r\n|           ![minimap](doc/minimap.gif)           | Besides the scrollbar of `Reader`(PDF and ePub), grayscale blocks for read pages and color strips for annotations.           |\r\n| ![images](doc/images.png) ![more](doc/more.png) | At the left sidebar of `Reader`, you can see all images in the current document. Click to navigate and double-click to copy. |\r\n\r\n\u003c/details\u003e\r\n\r\n### Troubleshooting\r\n\r\nPlease disable all other plugins when necessary, then file an issue with the exported debug output. Feel free to ask anything in issue😁\r\n\r\n\u003e [Known Issues](https://github.com/volatile-static/Chartero/issues?q=is%3Aissue+is%3Aopen+label%3Abug)\r\n\r\n## Developer Guide\r\n\r\n- [![Using Zotero Plugin Template](https://img.shields.io/badge/Using-Zotero%20Plugin%20Template-blue?style=flat-square\u0026logo=github)](https://github.com/windingwind/zotero-plugin-template)\r\n- Using [![Highcharts](https://img.shields.io/github/package-json/dependency-version/volatile-static/Chartero/highcharts?logo=npm)](https://www.npmjs.com/package/highcharts) to generate charts\r\n- [Minimap](src/bootstrap/modules/minimap/) and [All Images](src/bootstrap/modules/images/) are rendered by **built-in** [![GitHub package.json dependency version (dev dep on branch)](https://img.shields.io/github/package-json/dependency-version/volatile-static/chartero/dev/%40types%2Freact?logo=npm)](https://17.reactjs.org/)\r\n- [All Images](src/bootstrap/modules/images/) uses **built-in** [PDF.js](https://github.com/zotero/pdf.js) in [ChromeWorker](https://devdoc.net/web/developer.mozilla.org/en-US/docs/Web/API/ChromeWorker.html) to extract images from PDFs.\r\n- UI components are from [![T-Design](https://img.shields.io/github/package-json/dependency-version/volatile-static/Chartero/tdesign-vue-next?logo=npm)](https://tdesign.tencent.com/vue-next)\r\n- For the legacy Zotero `6` version, please check out [this branch](https://github.com/volatile-static/Chartero/tree/js_overlay).\r\n\r\n### Directory Structure\r\n\r\n- [addon](addon): The assets of the plugin, see [template](https://github.com/windingwind/zotero-plugin-template) for details.\r\n- [tools](tools): Scripts for development.\r\n- src\r\n  - [src/bootstrap](src/bootstrap): The entry point of the plugin.\r\n    - [src/bootstrap/modules](src/bootstrap/modules): Implementation of modules.\r\n  - [src/vue](src/vue): The `iframe` windows using [Vue](https://v3.vuejs.org/)\r\n    - [src/vue/summary](src/vue/summary): At sidebar.\r\n    - [src/vue/dashboard](src/vue/dashboard): At sidebar tab-panel.\r\n    - [src/vue/overview](src/vue/overview): At new tab.\r\n    - [src/vue/utility](src/vue/utility): The utility functions.\r\n    - [src/vue/test](src/vue/test): The unit test for Vue components.\r\n  - [src/modules](src/modules): Git-submodules for VS Code debugging.\r\n    - use the following command to initialize the submodules:\r\n\r\n      ```bash\r\n      git submodule init\r\n      git submodule update\r\n      ```\r\n\r\n- [src/worker](src/worker): The worker for data processing.\r\n\r\n### URL\r\n\r\nThese URLs are registered in [bootstrap.ts](addon/content/bootstrap.ts), and you can access them via `fetch` in Zotero.\r\n\r\n- `chrome://chartero/`: Access to folder [addon](addon).\r\n- `resource://chartero/`: Access to folder [addon/content](addon/content).\r\n\r\n### Preferences\r\n\r\nThe `config.defaultSettings` field of [package.json](package.json) defines the default values of preferences. The keys will be automatically replaced when compiling [addon](addon).\r\n\r\n### Locales\r\n\r\n| Locales | [zh-CN](addon/locale/zh-CN/) | [en-US](addon/locale/en-US/) | [ja-JP](addon/locale/ja-JP/) | [it-IT](addon/locale/it-IT/) |\r\n| :-----: | :--------------------------: | :--------------------------: | :--------------------------: | :--------------------------: |\r\n\r\nAll locale strings are defined in [locale](addon/locale), which will be loaded dynamically when the plugin starts.\r\n\r\n### Development Environment\r\n\r\n- [.env](./.env):\r\n\r\n```bash\r\nZOTERO_PLUGIN_ZOTERO_BIN_PATH = */Zotero.app/Contents/MacOS/zotero\r\nZOTERO_PLUGIN_PROFILE_PATH = /path/to/profile\r\nZOTERO_PLUGIN_DATA_DIR =\r\n```\r\n\r\n- Here are some useful scripts:\r\n  - `reload-all`: Build and reload the Zotero in **production** environment.\r\n  - `reload-dev`: Build in **development** environment without Vue pages and reload Zotero.\r\n  - `build`: Build in **development** environment and reload Zotero.\r\n  - `watch`: Watch changes of files in `src/vue` and reload Zotero.\r\n  - `dev`: Open a hot-reload server for `src/vue/test/`.\r\n\r\n### ⚡Hot-reload and Breakpoints in Source\r\n\r\nWith the Chartero running, you can run debug config `Vue` in the sidebar of the VS Code. This will launch the Vue unit test in Firefox with hot-reload. You can then utilize [vue devtools](https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/) in Firefox as well as set breakpoints in VS Code for single-step debugging.\r\n\r\nWhen running in development environment, Chartero will register a `/test/chartero` route in [HTTP server](https://www.zotero.org/support/dev/client_coding/connector_http_server), accepting any command from a POST request and returning its `eval` results in JSON format. By accessing this `Endpoint`, the [Vue test module](src/vue/test/) provides a series of \"dummy\" classes to simulate the Zotero environment. This method is of great reference value for other Zotero client applications.\r\n\r\n### Record Structure\r\n\r\nThe data structure of history records is defined in [history/data.ts](src/bootstrap/modules/history/data.ts), and the JSON string is like this:\r\n\r\n```json\r\n{\r\n    \"pages\": {\r\n        \"0\": {\r\n            \"p\": {\r\n                \"1693200000\": 6\r\n            }\r\n        }\r\n    },\r\n    \"numPages\": 27\r\n}\r\n```\r\n\r\n### Inter-plugin Compatibility\r\n\r\n\u003e This section is for developers who have suspected compatibility issues with `Chartero`.\r\n\r\n- Patched the `search` method of object `Zotero.Search` to hide the note items that record the reading history.\r\n- Add click events to tabs in the left side-bar of `Reader`.\r\n- When adding \"Overview\" tab, `contextPane.js` throws `extraData[ids[0]] is undefined` error, caused by the `type` of this tab being `library`.\r\n\r\n## See Also\r\n\r\n- [🤩 Awesome Zotero Plugins](https://plugins.zotero-chinese.com/charts.html)\r\n\r\n---\r\n\r\n\u003cbr /\u003e\r\n\u003cp align='center'\u003e\u003cimg src='addon/content/icons/icon32.png' alt='icon' /\u003e\u003c/p\u003e\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvolatile-static%2Fchartero","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvolatile-static%2Fchartero","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvolatile-static%2Fchartero/lists"}