Skip to content
This repository was archived by the owner on Jul 3, 2024. It is now read-only.

Commit d31d84f

Browse files
feat: initial plugin
1 parent 3de67b5 commit d31d84f

14 files changed

+357
-219
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
# npm
99
node_modules
10+
package-lock.json
1011

1112
# Don't include the compiled main.js file in the repo.
1213
# They should be uploaded to GitHub releases instead.

LICENSE

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2022, Alex Maldonado
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

+13-65
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,21 @@
1-
# Obsidian Sample Plugin
1+
# Obsidian BibTeX Adder
22

3-
This is a sample plugin for Obsidian (https://obsidian.md).
3+
Add BibTeX entries from DOIs using the [Crossref REST API](https://www.crossref.org/documentation/retrieve-metadata/rest-api/).
44

5-
This project uses Typescript to provide type checking and documentation.
6-
The repo depends on the latest plugin API (obsidian.d.ts) in Typescript Definition format, which contains TSDoc comments describing what it does.
5+
## Usage
76

8-
**Note:** The Obsidian API is still in early alpha and is subject to change at any time!
7+
Ideally, this plugin should be paired with the [Citation](https://github.com/hans/obsidian-citation-plugin) plugin when an external reference manage (e.g., Mendeley, EndNote, Zotero, etc.) is not being used.
8+
This plugin essentially acts as a reference importer by providing an simple way to add BibTeX entries from DOIs.
99

10-
This sample plugin demonstrates some of the basic functionality the plugin API can do.
11-
- Changes the default font color to red using `styles.css`.
12-
- Adds a ribbon icon, which shows a Notice when clicked.
13-
- Adds a command "Open Sample Modal" which opens a Modal.
14-
- Adds a plugin setting tab to the settings page.
15-
- Registers a global click event and output 'click' to the console.
16-
- Registers a global interval which logs 'setInterval' to the console.
10+
- Adds a command, ``"Add BibTeX entry from DOI"``, that prompts the user for a DOI and proceeds to lookup and add the BibTeX entry.
1711

18-
## First time developing plugins?
12+
## Installation
1913

20-
Quick starting guide for new plugin devs:
14+
- Clone this repo (``git clone github.com/aalexmmaldonado/obsidian-bibtex-adder``).
15+
- `npm i` or `yarn` to install dependencies.
16+
- `npm run dev` to compile.
17+
- Copy `main.js` and `manifest.json` into your vault in `.obsidian/plugins/obsidian-bibtex-adder`.
2118

22-
- Check if [someone already developed a plugin for what you want](https://obsidian.md/plugins)! There might be an existing plugin similar enough that you can partner up with.
23-
- Make a copy of this repo as a template with the "Use this template" button (login to GitHub if you don't see it).
24-
- Clone your repo to a local development folder. For convenience, you can place this folder in your `.obsidian/plugins/your-plugin-name` folder.
25-
- Install NodeJS, then run `npm i` in the command line under your repo folder.
26-
- Run `npm run dev` to compile your plugin from `main.ts` to `main.js`.
27-
- Make changes to `main.ts` (or create new `.ts` files). Those changes should be automatically compiled into `main.js`.
28-
- Reload Obsidian to load the new version of your plugin.
29-
- Enable plugin in settings window.
30-
- For updates to the Obsidian API run `npm update` in the command line under your repo folder.
19+
## License
3120

32-
## Releasing new releases
33-
34-
- Update your `manifest.json` with your new version number, such as `1.0.1`, and the minimum Obsidian version required for your latest release.
35-
- Update your `versions.json` file with `"new-plugin-version": "minimum-obsidian-version"` so older versions of Obsidian can download an older version of your plugin that's compatible.
36-
- Create new GitHub release using your new version number as the "Tag version". Use the exact version number, don't include a prefix `v`. See here for an example: https://github.com/obsidianmd/obsidian-sample-plugin/releases
37-
- Upload the files `manifest.json`, `main.js`, `styles.css` as binary attachments. Note: The manifest.json file must be in two places, first the root path of your repository and also in the release.
38-
- Publish the release.
39-
40-
> You can simplify the version bump process by running `npm version patch`, `npm version minor` or `npm version major` after updating `minAppVersion` manually in `manifest.json`.
41-
> The command will bump version in `manifest.json` and `package.json`, and add the entry for the new version to `versions.json`
42-
43-
## Adding your plugin to the community plugin list
44-
45-
- Check https://github.com/obsidianmd/obsidian-releases/blob/master/plugin-review.md
46-
- Publish an initial version.
47-
- Make sure you have a `README.md` file in the root of your repo.
48-
- Make a pull request at https://github.com/obsidianmd/obsidian-releases to add your plugin.
49-
50-
## How to use
51-
52-
- Clone this repo.
53-
- `npm i` or `yarn` to install dependencies
54-
- `npm run dev` to start compilation in watch mode.
55-
56-
## Manually installing the plugin
57-
58-
- Copy over `main.js`, `styles.css`, `manifest.json` to your vault `VaultFolder/.obsidian/plugins/your-plugin-id/`.
59-
60-
## Improve code quality with eslint (optional)
61-
- [ESLint](https://eslint.org/) is a tool that analyzes your code to quickly find problems. You can run ESLint against your plugin to find common bugs and ways to improve your code.
62-
- To use eslint with this project, make sure to install eslint from terminal:
63-
- `npm install -g eslint`
64-
- To use eslint to analyze this project use this command:
65-
- `eslint main.ts`
66-
- eslint will then create a report with suggestions for code improvement by file and line number.
67-
- If your source code is in a folder, such as `src`, you can use eslint with this command to analyze all files in that folder:
68-
- `eslint .\src\`
69-
70-
71-
## API Documentation
72-
73-
See https://github.com/obsidianmd/obsidian-api
21+
Distributed under the MIT License. See `LICENSE` for more information.

esbuild.config.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ esbuild.build({
1515
banner: {
1616
js: banner,
1717
},
18-
entryPoints: ['main.ts'],
18+
entryPoints: ['src/main.ts'],
1919
bundle: true,
2020
external: [
2121
'obsidian',

main.ts

-137
This file was deleted.

manifest.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
2-
"id": "obsidian-sample-plugin",
3-
"name": "Sample Plugin",
4-
"version": "1.0.1",
2+
"id": "obsidian-bibtex-adder",
3+
"name": "BibTeX Adder",
4+
"version": "0.0.1",
55
"minAppVersion": "0.12.0",
6-
"description": "This is a sample plugin for Obsidian. This plugin demonstrates some of the capabilities of the Obsidian API.",
7-
"author": "Obsidian",
8-
"authorUrl": "https://obsidian.md",
6+
"description": "Add BibTeX entries from DOIs using the Crossref REST API.",
7+
"author": "Alex Maldonado",
8+
"authorUrl": "https://aalexmmaldonado.com",
99
"isDesktopOnly": false
1010
}

package.json

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
{
2-
"name": "obsidian-sample-plugin",
3-
"version": "1.0.1",
4-
"description": "This is a sample plugin for Obsidian (https://obsidian.md)",
2+
"name": "obsidian-bibtex-adder",
3+
"version": "0.0.1",
4+
"description": "Add BibTeX entries from DOIs using the Crossref REST API.",
55
"main": "main.js",
66
"scripts": {
77
"dev": "node esbuild.config.mjs",
88
"build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production",
99
"version": "node version-bump.mjs && git add manifest.json versions.json"
1010
},
1111
"keywords": [],
12-
"author": "",
12+
"author": "Alex Maldonado",
1313
"license": "MIT",
1414
"devDependencies": {
1515
"@types/node": "^16.11.6",
@@ -20,5 +20,8 @@
2020
"obsidian": "latest",
2121
"tslib": "2.4.0",
2222
"typescript": "4.7.4"
23+
},
24+
"dependencies": {
25+
"axios": "^0.27.2"
2326
}
2427
}

src/main.ts

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { Plugin } from 'obsidian';
2+
3+
import { BibtexAdderPluginSettings, BIBTEX_ADDER_DEFAULT_SETTINGS, BibtexAdderSettingTab } from './settings';
4+
import { BibtexAdderModal } from './modal';
5+
6+
7+
export default class BibtexAdderPlugin extends Plugin {
8+
settings: BibtexAdderPluginSettings;
9+
10+
async onload() {
11+
await this.loadSettings();
12+
13+
// This creates an icon in the left ribbon.
14+
if (this.settings.addRibbonAction) {
15+
const ribbonIconEl = this.addRibbonIcon('paper-plane', 'Add BibTeX from DOI', (evt: MouseEvent) => {
16+
// Called when the user clicks the icon.
17+
new BibtexAdderModal(this.app, this.settings).open();
18+
});
19+
}
20+
21+
// for settings
22+
this.addSettingTab(new BibtexAdderSettingTab(this.app, this));
23+
24+
// Command that creates a note from DOI information.
25+
this.addCommand({
26+
id: "add-bibtex-modal",
27+
name: "Add BibTeX entry from DOI",
28+
callback: () => {
29+
new BibtexAdderModal(this.app, this.settings).open();
30+
},
31+
});
32+
}
33+
34+
async loadSettings() {
35+
this.settings = Object.assign(
36+
{}, BIBTEX_ADDER_DEFAULT_SETTINGS, await this.loadData()
37+
);
38+
}
39+
40+
async saveSettings() {
41+
await this.saveData(this.settings);
42+
}
43+
44+
}

0 commit comments

Comments
 (0)