Update README.md
This commit is contained in:
		
							parent
							
								
									08d72a4e2b
								
							
						
					
					
						commit
						8cc7ace414
					
				
							
								
								
									
										79
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										79
									
								
								README.md
									
									
									
									
									
								
							@ -1,8 +1,26 @@
 | 
				
			|||||||
# Zotero Addon Template
 | 
					# Zotero Plugin Template
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This is an addon/plugin template for [Zotero](https://www.zotero.org/).
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Documentation](https://zotero.yuque.com/books/share/8d230829-6004-4934-b4c6-685a7001bfa0/vec88d)(Chinese, provides English translation)
 | 
					This is a plugin template for [Zotero](https://www.zotero.org/). Plugins using this template are shown above.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					📖[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 Type Definitions](https://github.com/windingwind/zotero-types)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					📜[Zotero Source Code](https://github.com/zotero/zotero)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					📌[Zotero Plugin Template](https://github.com/windingwind/zotero-plugin-template)(This repo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> 👍You are currently in `bootstrap` extension mode. To use `overlay` mode, plsase switch to `overlay` branch in git.
 | 
					> 👍You are currently in `bootstrap` extension mode. To use `overlay` mode, plsase switch to `overlay` branch in git.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -10,14 +28,17 @@ This is an addon/plugin template for [Zotero](https://www.zotero.org/).
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Features
 | 
					## Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- TypeScript support;
 | 
					- Event-driven, functional programming, under extensive skeleton;
 | 
				
			||||||
- Build addon settings and versions automatically;
 | 
					- Simple and user-friendly, works out-of-the-box.
 | 
				
			||||||
- Build and reload code in Zotero automatically;
 | 
					- Abundant examples in `src/modules/examples.ts`, covering most of the commonly used APIs in plugins(using [zotero-plugin-toolkit](https://github.com/windingwind/zotero-plugin-toolkit));
 | 
				
			||||||
- Development/production build environment;
 | 
					- TypeScript support:
 | 
				
			||||||
- Release to GitHub automatically(using [release-it](https://github.com/release-it/release-it));
 | 
					  - Full type definition support for the whole Zotero project, which is written in JavaScript(using [zotero-types](https://github.com/windingwind/zotero-types));
 | 
				
			||||||
- Extensive skeleton;
 | 
					  - Global variables and environment setup;
 | 
				
			||||||
- Some sample code of UI and lifecycle.
 | 
					- Plugin build/test/release workflow:
 | 
				
			||||||
- ⭐Compatibilities for Zotero 6 & Zotero 7.(using [zotero-plugin-toolkit](https://github.com/windingwind/zotero-plugin-toolkit))
 | 
					  - Automatically generate/update plugin id/version, update configrations, and set environment variables(`development/production`);
 | 
				
			||||||
 | 
					  - Automatically build and reload code in Zotero;
 | 
				
			||||||
 | 
					  - Automatically release to GitHub(using [release-it](https://github.com/release-it/release-it));
 | 
				
			||||||
 | 
					- ⭐[New!]Compatibilities for Zotero 6 & Zotero 7.(using [zotero-plugin-toolkit](https://github.com/windingwind/zotero-plugin-toolkit))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Examples
 | 
					## Examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -85,7 +106,7 @@ Search `@example` in `src/examples.ts`. The examples are called in `src/hooks.ts
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### About Hooks
 | 
					### About Hooks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> See also `src/hooks.ts`
 | 
					> See also [`src/hooks.ts`](https://github.com/windingwind/zotero-plugin-template/blob/bootstrap/src/hooks.ts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. When install/enable/startup triggered from Zotero, `bootstrap.js` > `startup` is called
 | 
					1. When install/enable/startup triggered from Zotero, `bootstrap.js` > `startup` is called
 | 
				
			||||||
   - Wait for Zotero ready
 | 
					   - Wait for Zotero ready
 | 
				
			||||||
@ -99,7 +120,7 @@ Search `@example` in `src/examples.ts`. The examples are called in `src/hooks.ts
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### About Global Variables
 | 
					### About Global Variables
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> See also `src/index.ts`
 | 
					> See also [`src/index.ts`](https://github.com/windingwind/zotero-plugin-template/blob/bootstrap/src/index.ts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The bootstrapped plugin runs in a sandbox, which does not have default global variables like `Zotero` or `window`, which we used to have in the overlay plugins' window environment.
 | 
					The bootstrapped plugin runs in a sandbox, which does not have default global variables like `Zotero` or `window`, which we used to have in the overlay plugins' window environment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -128,28 +149,23 @@ You only need to maintain one `preferences.xhtml` which runs natively on Zotero
 | 
				
			|||||||
    </tr>
 | 
					    </tr>
 | 
				
			||||||
</table>
 | 
					</table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
https://github.com/windingwind/zotero-addon-template/blob/574ce88b9fd3535a9d062db51cf16e99dda35288/src/views.ts#L63-L82
 | 
					https://github.com/windingwind/zotero-plugin-template/blob/08d72a4e2b3bacff574f537bbd06cb33e6b22480/src/modules/examples.ts#L73-L85
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Call `registerPrefPane` when it's on Zotero 6.
 | 
					> `<preferences>` element is deprecated. Please use the full pref-key in the elements' `preference` attribute. Like:
 | 
				
			||||||
 | 
					 | 
				
			||||||
Note that `<preferences>` element is deprecated. Please use the full pref-key in the elements' `preference` attribute. Like:
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
```xml
 | 
					```xml
 | 
				
			||||||
<checkbox label="&zotero.__addonRef__.pref.enable.label;" preference="extensions.zotero.__addonRef__.enable"
 | 
					<checkbox label="&zotero.__addonRef__.pref.enable.label;" preference="extensions.zotero.__addonRef__.enable" />
 | 
				
			||||||
/>
 | 
					 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The elements with `preference` attributes will bind to Zotero preferences.
 | 
					The elements with `preference` attributes will bind to Zotero preferences.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Remember to call `unregisterPrefPane()` on plugin unload.
 | 
					Remember to call `unregister()` on plugin unload.
 | 
				
			||||||
 | 
					 | 
				
			||||||
https://github.com/windingwind/zotero-addon-template/blob/574ce88b9fd3535a9d062db51cf16e99dda35288/src/views.ts#L88-L90
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Create Elements API
 | 
					### Create Elements API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The plugin template provides new APIs for bootstrap plugins. We have two reasons to use these APIs, instead of the `createElement/createElementNS`:
 | 
					The plugin template provides new APIs for bootstrap plugins. We have two reasons to use these APIs, instead of the `createElement/createElementNS`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- In bootstrap mode, plugins have to clean up all UI elements on exit (disable or uninstall), which is very annoying. Using the `createElement`, the plugin template will maintain these elements. Just `removeAddonElements` on exit.
 | 
					- In bootstrap mode, plugins have to clean up all UI elements on exit (disable or uninstall), which is very annoying. Using the `createElement`, the plugin template will maintain these elements. Just `unregister` on exit.
 | 
				
			||||||
- Zotero 7 requires createElement()/createElementNS() → createXULElement() for remaining XUL elements, while Zotero 6 doesn't support `createXULElement`. Using `createElement`, it switches API depending on the current platform automatically.
 | 
					- Zotero 7 requires createElement()/createElementNS() → createXULElement() for remaining XUL elements, while Zotero 6 doesn't support `createXULElement`. Using `createElement`, it switches API depending on the current platform automatically.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There are more advanced APIs for creating elements in batch: `creatElementsFromJSON`. Input an element tree in JSON and return a fragment/element. These elements are also maintained by this plugin template.
 | 
					There are more advanced APIs for creating elements in batch: `creatElementsFromJSON`. Input an element tree in JSON and return a fragment/element. These elements are also maintained by this plugin template.
 | 
				
			||||||
@ -198,7 +214,7 @@ This section shows the directory structure of a template.
 | 
				
			|||||||
│         │      overlay.dtd
 | 
					│         │      overlay.dtd
 | 
				
			||||||
│         │      addon.properties
 | 
					│         │      addon.properties
 | 
				
			||||||
│         │
 | 
					│         │
 | 
				
			||||||
│         └─zh-CN
 | 
					│         ├─zh-CN
 | 
				
			||||||
│         |      overlay.dtd
 | 
					│         |      overlay.dtd
 | 
				
			||||||
│         └─     addon.properties
 | 
					│         └─     addon.properties
 | 
				
			||||||
│
 | 
					│
 | 
				
			||||||
@ -214,7 +230,7 @@ This section shows the directory structure of a template.
 | 
				
			|||||||
       │  examples.ts           # examples factory
 | 
					       │  examples.ts           # examples factory
 | 
				
			||||||
       │  locale.ts             # locale .properties
 | 
					       │  locale.ts             # locale .properties
 | 
				
			||||||
       │  preferenceScript.ts   # script runs in preferences.xhtml
 | 
					       │  preferenceScript.ts   # script runs in preferences.xhtml
 | 
				
			||||||
       │  progressWindow.ts     # progressWindow tool
 | 
					       └─ progressWindow.ts     # progressWindow tool
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Build
 | 
					### Build
 | 
				
			||||||
@ -245,9 +261,9 @@ cp ./scripts/zotero-cmd-default.json ./scripts/zotero-cmd.json
 | 
				
			|||||||
vim ./scripts/zotero-cmd.json
 | 
					vim ./scripts/zotero-cmd.json
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2. Setup addon development environment following this [link](https://www.zotero.org/support/dev/client_coding/plugin_development#setting_up_a_plugin_development_environment).
 | 
					2. Setup plugin development environment following this [link](https://www.zotero.org/support/dev/client_coding/plugin_development#setting_up_a_plugin_development_environment).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
3. Build addon and restart Zotero with this npm command.
 | 
					3. Build plugin and restart Zotero with this npm command.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
4. Launch Firefox 60
 | 
					4. Launch Firefox 60
 | 
				
			||||||
5. In Firefox, go to devtools, go to settings, click "enable remote debugging" and the one next to it that's also about debugging(or press `shift+F8`).
 | 
					5. In Firefox, go to devtools, go to settings, click "enable remote debugging" and the one next to it that's also about debugging(or press `shift+F8`).
 | 
				
			||||||
@ -288,11 +304,4 @@ Part of the code of this repo refers to other open-source projects within the al
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- zotero-better-bibtex(`d.ts`)
 | 
					- zotero-better-bibtex(`d.ts`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Zotero Addons Build with the Template
 | 
					## Zotero Plugins Build with the Template
 | 
				
			||||||
 | 
					 | 
				
			||||||
- [zotero-better-notes](https://github.com/windingwind/zotero-better-notes): Everything about note management. All in Zotero.
 | 
					 | 
				
			||||||
- [zotero-pdf-preview](https://github.com/windingwind/zotero-pdf-preview): PDF Preview for Zotero.
 | 
					 | 
				
			||||||
- [zotero-pdf-translate](https://github.com/windingwind/zotero-pdf-translate): PDF Translation for Zotero 6.
 | 
					 | 
				
			||||||
- [zotero-tag](https://github.com/windingwind/zotero-tag): Automatically tag items/Batch tagging
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- [zotero-theme](https://github.com/iShareStuff/ZoteroTheme): Customize Zotero theme
 | 
					 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user