commit
55368dea50
238
README.md
238
README.md
@ -7,32 +7,33 @@ This is a plugin template for [Zotero](https://www.zotero.org/).
|
||||
|
||||
Plugins created with this template:
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
[](https://github.com/windingwind/zotero-better-notes)
|
||||
[](https://github.com/windingwind/zotero-pdf-preview)
|
||||
[](https://github.com/windingwind/zotero-pdf-translate)
|
||||
[](https://github.com/windingwind/zotero-tag)
|
||||
[](https://github.com/iShareStuff/ZoteroTheme)
|
||||
[](https://github.com/MuiseDestiny/zotero-reference)
|
||||
[](https://github.com/MuiseDestiny/zotero-citation)
|
||||
[](https://github.com/MuiseDestiny/ZoteroStyle)
|
||||
[](https://github.com/volatile-static/Chartero)
|
||||
[](https://github.com/l0o0/tara)
|
||||
[](https://github.com/redleafnew/delitemwithatt)
|
||||
[](https://github.com/redleafnew/zotero-updateifsE)
|
||||
[](https://github.com/northword/zotero-format-metadata)
|
||||
[](https://github.com/inciteful-xyz/inciteful-zotero-plugin)
|
||||
[](https://github.com/MuiseDestiny/zotero-gpt)
|
||||
[](https://github.com/zoushucai/zotero-journalabbr)
|
||||
[](https://github.com/MuiseDestiny/zotero-figure)
|
||||
|
||||
📖[Plugin Development Documentation](https://zotero.yuque.com/books/share/8d230829-6004-4934-b4c6-685a7001bfa0/vec88d)(Chinese, provides English translation)
|
||||
📖 [Plugin Development Documentation](https://zotero.yuque.com/books/share/8d230829-6004-4934-b4c6-685a7001bfa0/vec88d) (Chinese, provides English translation)
|
||||
|
||||
🛠️[Zotero Plugin Toolkit](https://github.com/windingwind/zotero-plugin-toolkit) | [API Documentation](https://github.com/windingwind/zotero-plugin-toolkit/blob/master/docs/zotero-plugin-toolkit.md)
|
||||
🛠️ [Zotero Plugin Toolkit](https://github.com/windingwind/zotero-plugin-toolkit) | [API Documentation](https://github.com/windingwind/zotero-plugin-toolkit/blob/master/docs/zotero-plugin-toolkit.md)
|
||||
|
||||
ℹ️[Zotero Type Definitions](https://github.com/windingwind/zotero-types)
|
||||
ℹ️ [Zotero Type Definitions](https://github.com/windingwind/zotero-types)
|
||||
|
||||
📜[Zotero Source Code](https://github.com/zotero/zotero)
|
||||
📜 [Zotero Source Code](https://github.com/zotero/zotero)
|
||||
|
||||
📌[Zotero Plugin Template](https://github.com/windingwind/zotero-plugin-template)(This repo)
|
||||
📌 [Zotero Plugin Template](https://github.com/windingwind/zotero-plugin-template) (This repo)
|
||||
|
||||
> 👁 Watch this repo so that you can be notified whenever there are fixes & updates.
|
||||
|
||||
@ -141,32 +142,32 @@ This is also how your plugin will be released and used by others.
|
||||
- Enter the repo folder;
|
||||
- Modify the settings in `./package.json`, including:
|
||||
|
||||
```json5
|
||||
{
|
||||
version,
|
||||
author,
|
||||
description,
|
||||
homepage,
|
||||
config {
|
||||
releasepage, // URL to releases(`.xpi`)
|
||||
updaterdf, // URL to update.json
|
||||
addonName, // name to be displayed in the plugin manager
|
||||
addonID, // ID to avoid confliction. IMPORTANT!
|
||||
addonRef, // e.g. Element ID prefix
|
||||
addonInstance // the plugin's root instance: Zotero.${addonInstance}
|
||||
```json5
|
||||
{
|
||||
version,
|
||||
author,
|
||||
description,
|
||||
homepage,
|
||||
config {
|
||||
releasepage, // URL to releases(`.xpi`)
|
||||
updaterdf, // URL to update.json
|
||||
addonName, // name to be displayed in the plugin manager
|
||||
addonID, // ID to avoid confliction. IMPORTANT!
|
||||
addonRef, // e.g. Element ID prefix
|
||||
addonInstance // the plugin's root instance: Zotero.${addonInstance}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
```
|
||||
|
||||
> Be careful to set the addonID and addonRef to avoid confliction.
|
||||
> Be careful to set the addonID and addonRef to avoid confliction.
|
||||
|
||||
- Run `npm install` to set up the plugin and install dependencies. If you don't have NodeJS installed, please download it [here](https://nodejs.org/en/);
|
||||
- Run `npm run build` to build the plugin in production mode. Run `npm run build-dev` to build the plugin in development mode. The xpi for installation and the built code is under `builds` folder.
|
||||
- Run `npm run build` to build the plugin in production mode. Run `npm run build-dev` to build the plugin in development mode. The xpi for installation and the built code is under `build` folder.
|
||||
|
||||
> What the difference between dev & prod?
|
||||
>
|
||||
> - This environment variable is stored in `Zotero.${addonInstance}.data.env`. The outputs to console is disabled in prod mode.
|
||||
> - You can decide what users cannot see/use based on this variable.
|
||||
> What the difference between dev & prod?
|
||||
>
|
||||
> - This environment variable is stored in `Zotero.${addonInstance}.data.env`. The outputs to console is disabled in prod mode.
|
||||
> - You can decide what users cannot see/use based on this variable.
|
||||
|
||||
### Release
|
||||
|
||||
@ -181,29 +182,29 @@ npm run release
|
||||
|
||||
### Setup Development Environment
|
||||
|
||||
1. Install a beta version of Zotero: https://www.zotero.org/support/beta_builds (Zotero 7 beta: https://www.zotero.org/support/dev/zotero_7_for_developers)
|
||||
1. Install a beta version of Zotero: <https://www.zotero.org/support/beta_builds> (Zotero 7 beta: <https://www.zotero.org/support/dev/zotero_7_for_developers>)
|
||||
|
||||
2. Install Firefox 102(for Zotero 7)
|
||||
2. Install Firefox 102 (for Zotero 7)
|
||||
|
||||
3. Copy zotero command line config file. Modify the commands that starts your installation of the beta Zotero.
|
||||
|
||||
> (Optional) Do this only once: Start the beta Zotero with `/path/to/zotero -p`. Create a new profile and use it as your development profile.
|
||||
> Use `/path/to/zotero -p {profile_name}` to specify which profile to run with.
|
||||
> (Optional) Do this only once: Start the beta Zotero with `/path/to/zotero -p`. Create a new profile and use it as your development profile.
|
||||
> Use `/path/to/zotero -p {profile_name}` to specify which profile to run with.
|
||||
|
||||
```sh
|
||||
cp ./scripts/zotero-cmd-default.json ./scripts/zotero-cmd.json
|
||||
vim ./scripts/zotero-cmd.json
|
||||
```
|
||||
```sh
|
||||
cp ./scripts/zotero-cmd-default.json ./scripts/zotero-cmd.json
|
||||
vim ./scripts/zotero-cmd.json
|
||||
```
|
||||
|
||||
4. Setup plugin development environment following this [link](https://www.zotero.org/support/dev/client_coding/plugin_development#setting_up_a_plugin_development_environment).
|
||||
|
||||
5. Build plugin and restart Zotero with `npm run restart`.
|
||||
|
||||
6. Launch Firefox 102(Zotero 7)
|
||||
6. Launch Firefox 102 (Zotero 7)
|
||||
|
||||
7. In Firefox, go to devtools, go to settings, click "enable remote debugging" and the one next to it that's also about debugging
|
||||
|
||||
> Enter `about:debugging#/setup` in FF 102.
|
||||
> Enter `about:debugging#/setup` in FF 102.
|
||||
|
||||
8. In Zotero, go to setting, advanced, config editor, look up "debugging" and click on "allow remote debugging".
|
||||
|
||||
@ -239,7 +240,7 @@ You can also:
|
||||
- Test code snipastes in Tools->Developer->Run Javascript;
|
||||
- Debug output with `Zotero.debug()`. Find the outputs in Help->Debug Output Logging->View Output;
|
||||
- Debug UI. Zotero is built on the Firefox XUL framework. Debug XUL UI with software like [XUL Explorer](https://udn.realityripple.com/docs/Archive/Mozilla/XUL_Explorer).
|
||||
> XUL Documentation: http://www.devdoc.net/web/developer.mozilla.org/en-US/docs/XUL.html
|
||||
> XUL Documentation: <http://www.devdoc.net/web/developer.mozilla.org/en-US/docs/XUL.html>
|
||||
|
||||
## Details
|
||||
|
||||
@ -286,89 +287,98 @@ createElement(document, "button", { namespace: "xul" }); // manually set namespa
|
||||
|
||||
Use Esbuild to build `.ts` source code to `.js`.
|
||||
|
||||
Use `replace-in-file` to replace keywords and configurations defined in `package.json` in non-build files (`.xul/xhtml`, `.dtd`, and `.properties`).
|
||||
Use `replace-in-file` to replace keywords and configurations defined in `package.json` in non-build files (`xhtml`, `.flt`, et. al.).
|
||||
|
||||
Steps in `scripts/build.js`:
|
||||
Steps in `scripts/build.mjs`:
|
||||
|
||||
1. Clean `./builds`
|
||||
2. Copy `./addon` to `./builds`
|
||||
3. Esbuild to `./builds/addon/chrome/content/scripts`
|
||||
4. Replace `__buildVersion__` and `__buildTime__` in `./builds/addon`
|
||||
5. Zip the `./builds/addon` to `./builds/*.xpi`
|
||||
1. Clean `./build`
|
||||
2. Copy `./addon` to `./build`
|
||||
3. Esbuild to `./build/addon/chrome/content/scripts`
|
||||
4. Replace `__buildVersion__` and `__buildTime__` in `./build/addon`
|
||||
5. Zip the `./build/addon` to `./build/*.xpi`
|
||||
|
||||
### About Zotero API
|
||||
|
||||
Zotero docs are outdated and incomplete. Clone https://github.com/zotero/zotero and search the keyword globally.
|
||||
Zotero docs are outdated and incomplete. Clone <https://github.com/zotero/zotero> and search the keyword globally.
|
||||
|
||||
> ⭐The [zotero-types](https://github.com/windingwind/zotero-types) provides most frequently used Zotero APIs. It's included in this template by default. Your IDE would provide hint for most of the APIs.
|
||||
|
||||
A trick for finding the API you want:
|
||||
|
||||
Search the UI label in `.xul`(`.xhtml`)/`.dtd`/`.properties` files, find the corresponding key in locale file. Then search this keys in `.js`/`.jsx` files.
|
||||
Search the UI label in `.xhtml`/`.flt` files, find the corresponding key in locale file. Then search this keys in `.js`/`.jsx` files.
|
||||
|
||||
### Directory Structure
|
||||
|
||||
This section shows the directory structure of a template.
|
||||
|
||||
- All `.js/.ts` code files are in `./src`;
|
||||
- Addon config files: `./addon/chrome.manifest`, `./addon/install.rdf`, and `./addon/manifest.json`;
|
||||
- Addon config files: `./addon/manifest.json`;
|
||||
- UI files: `./addon/chrome/content/*.xhtml`.
|
||||
- Locale files: `./addon/chrome/locale/[*.dtd, *.properties]`;
|
||||
- Resource files: `./addon/chrome/skin/default/__addonRef__/*.dtd`;
|
||||
- Preferences file: `./addon/chrome/defaults/preferences/defaults.js`;
|
||||
> Don't break the lines in the `defaults.js`
|
||||
- Locale files: `./addon/locale/**/*.flt`;
|
||||
- Preferences file: `./addon/prefs.js`;
|
||||
> Don't break the lines in the `prefs.js`
|
||||
|
||||
```shell
|
||||
│ .gitignore
|
||||
│ .release-it.json # release-it conf
|
||||
| tsconfig.json # https://code.visualstudio.com/docs/languages/jsconfig#
|
||||
│ build.js # esbuild
|
||||
│ LICENSE
|
||||
│ package.json # npm conf
|
||||
│ README.md # readme
|
||||
│ update.rdf # addon update
|
||||
│
|
||||
├─.github # github conf
|
||||
│
|
||||
├─addon # addon dir
|
||||
│ │ manifest.json # addon config
|
||||
│ │ bootstrap.js # addon load/unload script, like a main.c
|
||||
│ │
|
||||
│ └─chrome
|
||||
│ ├─content # UI
|
||||
│ │ │ preferences.xhtml
|
||||
│ │ │
|
||||
│ │ ├─icons
|
||||
│ │ │ favicon.png
|
||||
│ │ │ favicon@0.5x.png
|
||||
│ │ │
|
||||
│ │ └─scripts
|
||||
│ └─locale # locale
|
||||
│ ├─en-US
|
||||
│ │ overlay.dtd
|
||||
│ │ addon.properties
|
||||
│ │
|
||||
│ ├─zh-CN
|
||||
│ | overlay.dtd
|
||||
│ └─ addon.properties
|
||||
│
|
||||
├─builds # build dir
|
||||
│ └─.xpi
|
||||
│
|
||||
└─src # source code
|
||||
│ index.ts # main entry
|
||||
│ addon.ts # base class
|
||||
│ hooks.ts # lifecycle hooks
|
||||
|
|
||||
└─modules # sub modules
|
||||
│ examples.ts # examples factory
|
||||
│ locale.ts # locale .properties
|
||||
│ preferenceScript.ts # script runs in preferences.xhtml
|
||||
└─ progressWindow.ts # progressWindow tool
|
||||
.
|
||||
|-- .eslintrc.json # eslint conf
|
||||
|-- .gitattributes # git conf
|
||||
|-- .github/ # github conf
|
||||
|-- .gitignore # git conf
|
||||
|-- .prettierrc # prettier conf
|
||||
|-- .release-it.json # release-it conf
|
||||
|-- .vscode # vs code conf
|
||||
| |-- extensions.json
|
||||
| |-- launch.json
|
||||
| |-- setting.json
|
||||
| `-- toolkit.code-snippets
|
||||
|-- package-lock.json # npm conf
|
||||
|-- package.json # npm conf
|
||||
|-- LICENSE
|
||||
|-- README.md
|
||||
|-- addon
|
||||
| |-- bootstrap.js # addon load/unload script, like a main.c
|
||||
| |-- chrome
|
||||
| | `-- content
|
||||
| | |-- icons/
|
||||
| | |-- preferences.xhtml # preference panel
|
||||
| | `-- zoteroPane.css
|
||||
| |-- locale # locale
|
||||
| | |-- en-US
|
||||
| | | |-- addon.ftl
|
||||
| | | `-- preferences.ftl
|
||||
| | `-- zh-CN
|
||||
| | |-- addon.ftl
|
||||
| | `-- preferences.ftl
|
||||
| |-- manifest.json # addon config
|
||||
| `-- prefs.js
|
||||
|-- build/ # build dir
|
||||
|-- scripts # scripts for dev
|
||||
| |-- build.mjs # esbuild and replace
|
||||
| |-- reload.mjs
|
||||
| |-- start.mjs
|
||||
| |-- stop.mjs
|
||||
| `-- zotero-cmd-default.json
|
||||
|-- src # source code
|
||||
| |-- addon.ts # base class
|
||||
| |-- hooks.ts # lifecycle hooks
|
||||
| |-- index.ts # main entry
|
||||
| |-- modules # sub modules
|
||||
| | |-- examples.ts
|
||||
| | `-- preferenceScript.ts
|
||||
| `-- utils # utilities
|
||||
| |-- locale.ts
|
||||
| |-- prefs.ts
|
||||
| |-- wait.ts
|
||||
| `-- window.ts
|
||||
|-- tsconfig.json # https://code.visualstudio.com/docs/languages/jsconfig
|
||||
|-- typings # ts typings
|
||||
| `-- global.d.ts
|
||||
|-- update-template.json # template of `update.json`
|
||||
`-- update.json
|
||||
```
|
||||
|
||||
## Disclaimer
|
||||
|
||||
Use this code under AGPL. No warranties are provided. Keep the laws of your locality in mind!
|
||||
|
||||
If you want to change the license, please contact me at wyzlshx@foxmail.com
|
||||
If you want to change the license, please contact me at <wyzlshx@foxmail.com>
|
||||
|
Loading…
x
Reference in New Issue
Block a user