You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-06-27 23:28:38 +02:00
Update plugin templates
This commit is contained in:
@ -27,10 +27,10 @@ export default class JoplinCommands {
|
|||||||
*
|
*
|
||||||
* // Create a new sub-notebook under the provided notebook
|
* // Create a new sub-notebook under the provided notebook
|
||||||
* // Note: internally, notebooks are called "folders".
|
* // Note: internally, notebooks are called "folders".
|
||||||
* await joplin.commands.execute('newFolder', { parent_id: "SOME_FOLDER_ID" });
|
* await joplin.commands.execute('newFolder', "SOME_FOLDER_ID");
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
execute(commandName: string, props?: any): Promise<any>;
|
execute(commandName: string, ...args: any[]): Promise<any>;
|
||||||
/**
|
/**
|
||||||
* <span class="platform-desktop">desktop</span> Registers a new command.
|
* <span class="platform-desktop">desktop</span> Registers a new command.
|
||||||
*
|
*
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import Logger from 'lib/Logger';
|
import Logger from 'lib/Logger';
|
||||||
import { Script } from './types';
|
import { ContentScriptType, Script } from './types';
|
||||||
/**
|
/**
|
||||||
* This class provides access to plugin-related features.
|
* This class provides access to plugin-related features.
|
||||||
*/
|
*/
|
||||||
@ -21,4 +21,18 @@ export default class JoplinPlugins {
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
register(script: Script): Promise<void>;
|
register(script: Script): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Registers a new content script. Unlike regular plugin code, which runs in a separate process, content scripts run within the main process code
|
||||||
|
* and thus allow improved performances and more customisations in specific cases. It can be used for example to load a Markdown or editor plugin.
|
||||||
|
*
|
||||||
|
* Note that registering a content script in itself will do nothing - it will only be loaded in specific cases by the relevant app modules
|
||||||
|
* (eg. the Markdown renderer or the code editor). So it is not a way to inject and run arbitrary code in the app, which for safety and performance reasons is not supported.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/content_script)
|
||||||
|
*
|
||||||
|
* @param type Defines how the script will be used. See the type definition for more information about each supported type.
|
||||||
|
* @param id A unique ID for the content script.
|
||||||
|
* @param scriptPath Must be a path relative to the plugin main script. For example, if your file content_script.js is next to your index.ts file, you would set `scriptPath` to `"./content_script.js`.
|
||||||
|
*/
|
||||||
|
registerContentScript(type: ContentScriptType, id: string, scriptPath: string): Promise<void>;
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,47 @@
|
|||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export interface Command {
|
export interface Command {
|
||||||
|
/**
|
||||||
|
* Name of command - must be globally unique
|
||||||
|
*/
|
||||||
name: string
|
name: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label to be displayed on menu items or keyboard shortcut editor for example
|
||||||
|
*/
|
||||||
label: string
|
label: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icon to be used on toolbar buttons for example
|
||||||
|
*/
|
||||||
iconName?: string,
|
iconName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code to be ran when the command is executed. It maybe return a result.
|
||||||
|
*/
|
||||||
execute(props:any):Promise<any>
|
execute(props:any):Promise<any>
|
||||||
isEnabled?(props:any):boolean
|
|
||||||
mapStateToProps?(state:any):any
|
/**
|
||||||
|
* Defines whether the command should be enabled or disabled, which in turns affects
|
||||||
|
* the enabled state of any associated button or menu item.
|
||||||
|
*
|
||||||
|
* The condition should be expressed as a "when-clause" (as in Visual Studio Code). It's a simple boolean expression that evaluates to
|
||||||
|
* `true` or `false`. It supports the following operators:
|
||||||
|
*
|
||||||
|
* Operator | Symbol | Example
|
||||||
|
* -- | -- | --
|
||||||
|
* Equality | == | "editorType == markdown"
|
||||||
|
* Inequality | != | "currentScreen != config"
|
||||||
|
* Or | \|\| | "noteIsTodo \|\| noteTodoCompleted"
|
||||||
|
* And | && | "oneNoteSelected && !inConflictFolder"
|
||||||
|
*
|
||||||
|
* Currently the supported context variables aren't documented, but you can find the list there:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts
|
||||||
|
*
|
||||||
|
* Note: Commands are enabled by default unless you use this property.
|
||||||
|
*/
|
||||||
|
enabledCondition?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
@ -277,3 +312,54 @@ export interface SettingSection {
|
|||||||
* [2]: (Optional) Resource link.
|
* [2]: (Optional) Resource link.
|
||||||
*/
|
*/
|
||||||
export type Path = string[];
|
export type Path = string[];
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// Plugins type
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export enum ContentScriptType {
|
||||||
|
/**
|
||||||
|
* Registers a new Markdown-It plugin, which should follow this template:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* // The module should export an object as below:
|
||||||
|
*
|
||||||
|
* module.exports = {
|
||||||
|
*
|
||||||
|
* // The "context" variable is currently unused but could be used later on to provide
|
||||||
|
* // access to your own plugin so that the content script and plugin can communicate.
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
*
|
||||||
|
* // This is the actual Markdown-It plugin - check the [official doc](https://github.com/markdown-it/markdown-it) for more information
|
||||||
|
* // The `options` parameter is of type [RuleOptions](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts), which
|
||||||
|
* // contains a number of options, mostly useful for Joplin's internal code.
|
||||||
|
* plugin: function(markdownIt, options) {
|
||||||
|
* // ...
|
||||||
|
* },
|
||||||
|
*
|
||||||
|
* // You may also specify additional assets such as JS or CSS that should be loaded in the rendered HTML document.
|
||||||
|
* // Check for example the Joplin [Mermaid plugin](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts) to
|
||||||
|
* // see how the data should be structured.
|
||||||
|
* assets: {},
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To include a regular Markdown-It plugin, that doesn't make use of any Joplin-specific feature, you
|
||||||
|
* would simply create a file such as this:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* module.exports = {
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
* plugin: require('markdown-it-toc-done-right');
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
MarkdownItPlugin = 'markdownItPlugin',
|
||||||
|
CodeMirrorPlugin = 'codeMirrorPlugin',
|
||||||
|
}
|
||||||
|
@ -2,6 +2,6 @@ import joplin from 'api';
|
|||||||
|
|
||||||
joplin.plugins.register({
|
joplin.plugins.register({
|
||||||
onStart: async function() {
|
onStart: async function() {
|
||||||
await (joplin.plugins as any).registerContentScript('markdownItPlugin', 'justtesting', './markdownItTestPlugin.js');
|
await joplin.plugins.registerContentScript('markdownItPlugin', 'justtesting', './markdownItTestPlugin.js');
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -3,7 +3,7 @@ import { Command } from './types';
|
|||||||
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
||||||
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*
|
*
|
||||||
* ## Executing Joplin's internal commands
|
* ## Executing Joplin's internal commands
|
||||||
*
|
*
|
||||||
@ -27,10 +27,10 @@ export default class JoplinCommands {
|
|||||||
*
|
*
|
||||||
* // Create a new sub-notebook under the provided notebook
|
* // Create a new sub-notebook under the provided notebook
|
||||||
* // Note: internally, notebooks are called "folders".
|
* // Note: internally, notebooks are called "folders".
|
||||||
* await joplin.commands.execute('newFolder', { parent_id: "SOME_FOLDER_ID" });
|
* await joplin.commands.execute('newFolder', "SOME_FOLDER_ID");
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
execute(commandName: string, props?: any): Promise<any>;
|
execute(commandName: string, ...args: any[]): Promise<any>;
|
||||||
/**
|
/**
|
||||||
* <span class="platform-desktop">desktop</span> Registers a new command.
|
* <span class="platform-desktop">desktop</span> Registers a new command.
|
||||||
*
|
*
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { Path } from './types';
|
import { Path } from './types';
|
||||||
/**
|
/**
|
||||||
* This module provides access to the Joplin data API: https://joplinapp.org/api/
|
* This module provides access to the Joplin data API: https://joplinapp.org/api/references/rest_api/
|
||||||
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
||||||
* or to update them or delete them.
|
* or to update them or delete them.
|
||||||
*
|
*
|
||||||
* This is also what you would use to search notes, via the `search` endpoint.
|
* This is also what you would use to search notes, via the `search` endpoint.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/simple)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/simple)
|
||||||
*
|
*
|
||||||
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
||||||
* And each method takes these parameters:
|
* And each method takes these parameters:
|
||||||
@ -16,7 +16,7 @@ import { Path } from './types';
|
|||||||
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
||||||
* * `files`: (Optional) Used to create new resources and associate them with files.
|
* * `files`: (Optional) Used to create new resources and associate them with files.
|
||||||
*
|
*
|
||||||
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/references/rest_api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
||||||
*
|
*
|
||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
|
@ -2,14 +2,14 @@ import { ExportModule, ImportModule } from './types';
|
|||||||
/**
|
/**
|
||||||
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export)
|
||||||
*
|
*
|
||||||
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
||||||
* by the application during the import/export process.
|
* by the application during the import/export process.
|
||||||
*
|
*
|
||||||
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
||||||
*
|
*
|
||||||
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/
|
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/references/rest_api/
|
||||||
*/
|
*/
|
||||||
export default class JoplinInterop {
|
export default class JoplinInterop {
|
||||||
registerExportModule(module: ExportModule): Promise<void>;
|
registerExportModule(module: ExportModule): Promise<void>;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import Logger from 'lib/Logger';
|
import Logger from 'lib/Logger';
|
||||||
import { Script } from './types';
|
import { ContentScriptType, Script } from './types';
|
||||||
/**
|
/**
|
||||||
* This class provides access to plugin-related features.
|
* This class provides access to plugin-related features.
|
||||||
*/
|
*/
|
||||||
@ -21,4 +21,18 @@ export default class JoplinPlugins {
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
register(script: Script): Promise<void>;
|
register(script: Script): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Registers a new content script. Unlike regular plugin code, which runs in a separate process, content scripts run within the main process code
|
||||||
|
* and thus allow improved performances and more customisations in specific cases. It can be used for example to load a Markdown or editor plugin.
|
||||||
|
*
|
||||||
|
* Note that registering a content script in itself will do nothing - it will only be loaded in specific cases by the relevant app modules
|
||||||
|
* (eg. the Markdown renderer or the code editor). So it is not a way to inject and run arbitrary code in the app, which for safety and performance reasons is not supported.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/content_script)
|
||||||
|
*
|
||||||
|
* @param type Defines how the script will be used. See the type definition for more information about each supported type.
|
||||||
|
* @param id A unique ID for the content script.
|
||||||
|
* @param scriptPath Must be a path relative to the plugin main script. For example, if your file content_script.js is next to your index.ts file, you would set `scriptPath` to `"./content_script.js`.
|
||||||
|
*/
|
||||||
|
registerContentScript(type: ContentScriptType, id: string, scriptPath: string): Promise<void>;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import { SettingItem, SettingSection } from './types';
|
|||||||
*
|
*
|
||||||
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/settings)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/settings)
|
||||||
*/
|
*/
|
||||||
export default class JoplinSettings {
|
export default class JoplinSettings {
|
||||||
private plugin_;
|
private plugin_;
|
||||||
@ -32,4 +32,12 @@ export default class JoplinSettings {
|
|||||||
* Sets a setting value (only applies to setting you registered from your plugin)
|
* Sets a setting value (only applies to setting you registered from your plugin)
|
||||||
*/
|
*/
|
||||||
setValue(key: string, value: any): Promise<void>;
|
setValue(key: string, value: any): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Gets a global setting value, including app-specific settings and those set by other plugins.
|
||||||
|
*
|
||||||
|
* The list of available settings is not documented yet, but can be found by looking at the source code:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/3539a452a359162c461d2849829d2d42973eab50/ReactNativeClient/lib/models/Setting.ts#L142
|
||||||
|
*/
|
||||||
|
globalValue(key: string): Promise<any>;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
||||||
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
||||||
|
import JoplinViewsMenus from './JoplinViewsMenus';
|
||||||
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
||||||
import JoplinViewsPanels from './JoplinViewsPanels';
|
import JoplinViewsPanels from './JoplinViewsPanels';
|
||||||
/**
|
/**
|
||||||
@ -15,10 +16,13 @@ export default class JoplinViews {
|
|||||||
private dialogs_;
|
private dialogs_;
|
||||||
private panels_;
|
private panels_;
|
||||||
private menuItems_;
|
private menuItems_;
|
||||||
|
private menus_;
|
||||||
private toolbarButtons_;
|
private toolbarButtons_;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
get dialogs(): JoplinViewsDialogs;
|
get dialogs(): JoplinViewsDialogs;
|
||||||
get panels(): JoplinViewsPanels;
|
get panels(): JoplinViewsPanels;
|
||||||
get menuItems(): JoplinViewsMenuItems;
|
get menuItems(): JoplinViewsMenuItems;
|
||||||
|
get menus(): JoplinViewsMenus;
|
||||||
get toolbarButtons(): JoplinViewsToolbarButtons;
|
get toolbarButtons(): JoplinViewsToolbarButtons;
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,22 @@ import { ButtonSpec, ViewHandle, ButtonId } from './types';
|
|||||||
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
||||||
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/dialog)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/dialog)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsDialogs {
|
export default class JoplinViewsDialogs {
|
||||||
private store;
|
private store;
|
||||||
private plugin;
|
private plugin;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
private controller;
|
private controller;
|
||||||
/**
|
/**
|
||||||
* Creates a new dialog
|
* Creates a new dialog
|
||||||
*/
|
*/
|
||||||
create(): Promise<ViewHandle>;
|
create(): Promise<ViewHandle>;
|
||||||
|
/**
|
||||||
|
* Displays a message box with OK/Cancel buttons. Returns the button index that was clicked - "0" for OK and "1" for "Cancel"
|
||||||
|
*/
|
||||||
|
showMessageBox(message: string): Promise<number>;
|
||||||
/**
|
/**
|
||||||
* Sets the dialog HTML content
|
* Sets the dialog HTML content
|
||||||
*/
|
*/
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing menu items.
|
* Allows creating and managing menu items.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsMenuItems {
|
export default class JoplinViewsMenuItems {
|
||||||
private store;
|
private store;
|
||||||
|
18
CliClient/tests/support/plugins/dialog/api/JoplinViewsMenus.d.ts
vendored
Normal file
18
CliClient/tests/support/plugins/dialog/api/JoplinViewsMenus.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { MenuItem, MenuItemLocation } from './types';
|
||||||
|
import Plugin from '../Plugin';
|
||||||
|
/**
|
||||||
|
* Allows creating menus.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/menu)
|
||||||
|
*/
|
||||||
|
export default class JoplinViewsMenus {
|
||||||
|
private store;
|
||||||
|
private plugin;
|
||||||
|
constructor(plugin: Plugin, store: any);
|
||||||
|
private registerCommandAccelerators;
|
||||||
|
/**
|
||||||
|
* Creates a new menu from the provided menu items and place it at the given location. As of now, it is only possible to place the
|
||||||
|
* menu as a sub-menu of the application build-in menus.
|
||||||
|
*/
|
||||||
|
create(label: string, menuItems: MenuItem[], location?: MenuItemLocation): Promise<void>;
|
||||||
|
}
|
@ -4,7 +4,7 @@ import { ViewHandle } from './types';
|
|||||||
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
||||||
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/toc)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/toc)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsPanels {
|
export default class JoplinViewsPanels {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing toolbar buttons.
|
* Allows creating and managing toolbar buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsToolbarButtons {
|
export default class JoplinViewsToolbarButtons {
|
||||||
private store;
|
private store;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
||||||
* as various related events, such as when a new note is selected, or when the note content changes.
|
* as various related events, such as when a new note is selected, or when the note content changes.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins)
|
||||||
*/
|
*/
|
||||||
export default class JoplinWorkspace {
|
export default class JoplinWorkspace {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,12 +3,47 @@
|
|||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export interface Command {
|
export interface Command {
|
||||||
|
/**
|
||||||
|
* Name of command - must be globally unique
|
||||||
|
*/
|
||||||
name: string
|
name: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label to be displayed on menu items or keyboard shortcut editor for example
|
||||||
|
*/
|
||||||
label: string
|
label: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icon to be used on toolbar buttons for example
|
||||||
|
*/
|
||||||
iconName?: string,
|
iconName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code to be ran when the command is executed. It maybe return a result.
|
||||||
|
*/
|
||||||
execute(props:any):Promise<any>
|
execute(props:any):Promise<any>
|
||||||
isEnabled?(props:any):boolean
|
|
||||||
mapStateToProps?(state:any):any
|
/**
|
||||||
|
* Defines whether the command should be enabled or disabled, which in turns affects
|
||||||
|
* the enabled state of any associated button or menu item.
|
||||||
|
*
|
||||||
|
* The condition should be expressed as a "when-clause" (as in Visual Studio Code). It's a simple boolean expression that evaluates to
|
||||||
|
* `true` or `false`. It supports the following operators:
|
||||||
|
*
|
||||||
|
* Operator | Symbol | Example
|
||||||
|
* -- | -- | --
|
||||||
|
* Equality | == | "editorType == markdown"
|
||||||
|
* Inequality | != | "currentScreen != config"
|
||||||
|
* Or | \|\| | "noteIsTodo \|\| noteTodoCompleted"
|
||||||
|
* And | && | "oneNoteSelected && !inConflictFolder"
|
||||||
|
*
|
||||||
|
* Currently the supported context variables aren't documented, but you can find the list there:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts
|
||||||
|
*
|
||||||
|
* Note: Commands are enabled by default unless you use this property.
|
||||||
|
*/
|
||||||
|
enabledCondition?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
@ -26,7 +61,7 @@ export enum ImportModuleOutputFormat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export) for an example.
|
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export) for an example.
|
||||||
*
|
*
|
||||||
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
||||||
*
|
*
|
||||||
@ -154,17 +189,9 @@ export interface Script {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
// View API types
|
// Menu types
|
||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export type ButtonId = string;
|
|
||||||
|
|
||||||
export interface ButtonSpec {
|
|
||||||
id: ButtonId,
|
|
||||||
title?: string,
|
|
||||||
onClick?():void,
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CreateMenuItemOptions {
|
export interface CreateMenuItemOptions {
|
||||||
accelerator: string,
|
accelerator: string,
|
||||||
}
|
}
|
||||||
@ -179,6 +206,41 @@ export enum MenuItemLocation {
|
|||||||
Context = 'context',
|
Context = 'context',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface MenuItem {
|
||||||
|
/**
|
||||||
|
* Command that should be associated with the menu item. All menu item should
|
||||||
|
* have a command associated with them unless they are a sub-menu.
|
||||||
|
*/
|
||||||
|
commandName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accelerator associated with the menu item
|
||||||
|
*/
|
||||||
|
accelerator?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu items that should appear below this menu item. Allows creating a menu tree.
|
||||||
|
*/
|
||||||
|
submenu?: MenuItem[],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu item label. If not specified, the command label will be used instead.
|
||||||
|
*/
|
||||||
|
label?: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// View API types
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export interface ButtonSpec {
|
||||||
|
id: ButtonId,
|
||||||
|
title?: string,
|
||||||
|
onClick?():void,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ButtonId = string;
|
||||||
|
|
||||||
export enum ToolbarButtonLocation {
|
export enum ToolbarButtonLocation {
|
||||||
/**
|
/**
|
||||||
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
||||||
@ -250,3 +312,54 @@ export interface SettingSection {
|
|||||||
* [2]: (Optional) Resource link.
|
* [2]: (Optional) Resource link.
|
||||||
*/
|
*/
|
||||||
export type Path = string[];
|
export type Path = string[];
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// Plugins type
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export enum ContentScriptType {
|
||||||
|
/**
|
||||||
|
* Registers a new Markdown-It plugin, which should follow this template:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* // The module should export an object as below:
|
||||||
|
*
|
||||||
|
* module.exports = {
|
||||||
|
*
|
||||||
|
* // The "context" variable is currently unused but could be used later on to provide
|
||||||
|
* // access to your own plugin so that the content script and plugin can communicate.
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
*
|
||||||
|
* // This is the actual Markdown-It plugin - check the [official doc](https://github.com/markdown-it/markdown-it) for more information
|
||||||
|
* // The `options` parameter is of type [RuleOptions](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts), which
|
||||||
|
* // contains a number of options, mostly useful for Joplin's internal code.
|
||||||
|
* plugin: function(markdownIt, options) {
|
||||||
|
* // ...
|
||||||
|
* },
|
||||||
|
*
|
||||||
|
* // You may also specify additional assets such as JS or CSS that should be loaded in the rendered HTML document.
|
||||||
|
* // Check for example the Joplin [Mermaid plugin](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts) to
|
||||||
|
* // see how the data should be structured.
|
||||||
|
* assets: {},
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To include a regular Markdown-It plugin, that doesn't make use of any Joplin-specific feature, you
|
||||||
|
* would simply create a file such as this:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* module.exports = {
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
* plugin: require('markdown-it-toc-done-right');
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
MarkdownItPlugin = 'markdownItPlugin',
|
||||||
|
CodeMirrorPlugin = 'codeMirrorPlugin',
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@ import { Command } from './types';
|
|||||||
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
||||||
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*
|
*
|
||||||
* ## Executing Joplin's internal commands
|
* ## Executing Joplin's internal commands
|
||||||
*
|
*
|
||||||
@ -27,10 +27,10 @@ export default class JoplinCommands {
|
|||||||
*
|
*
|
||||||
* // Create a new sub-notebook under the provided notebook
|
* // Create a new sub-notebook under the provided notebook
|
||||||
* // Note: internally, notebooks are called "folders".
|
* // Note: internally, notebooks are called "folders".
|
||||||
* await joplin.commands.execute('newFolder', { parent_id: "SOME_FOLDER_ID" });
|
* await joplin.commands.execute('newFolder', "SOME_FOLDER_ID");
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
execute(commandName: string, props?: any): Promise<any>;
|
execute(commandName: string, ...args: any[]): Promise<any>;
|
||||||
/**
|
/**
|
||||||
* <span class="platform-desktop">desktop</span> Registers a new command.
|
* <span class="platform-desktop">desktop</span> Registers a new command.
|
||||||
*
|
*
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { Path } from './types';
|
import { Path } from './types';
|
||||||
/**
|
/**
|
||||||
* This module provides access to the Joplin data API: https://joplinapp.org/api/
|
* This module provides access to the Joplin data API: https://joplinapp.org/api/references/rest_api/
|
||||||
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
||||||
* or to update them or delete them.
|
* or to update them or delete them.
|
||||||
*
|
*
|
||||||
* This is also what you would use to search notes, via the `search` endpoint.
|
* This is also what you would use to search notes, via the `search` endpoint.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/simple)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/simple)
|
||||||
*
|
*
|
||||||
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
||||||
* And each method takes these parameters:
|
* And each method takes these parameters:
|
||||||
@ -16,7 +16,7 @@ import { Path } from './types';
|
|||||||
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
||||||
* * `files`: (Optional) Used to create new resources and associate them with files.
|
* * `files`: (Optional) Used to create new resources and associate them with files.
|
||||||
*
|
*
|
||||||
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/references/rest_api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
||||||
*
|
*
|
||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
|
@ -2,14 +2,14 @@ import { ExportModule, ImportModule } from './types';
|
|||||||
/**
|
/**
|
||||||
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export)
|
||||||
*
|
*
|
||||||
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
||||||
* by the application during the import/export process.
|
* by the application during the import/export process.
|
||||||
*
|
*
|
||||||
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
||||||
*
|
*
|
||||||
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/
|
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/references/rest_api/
|
||||||
*/
|
*/
|
||||||
export default class JoplinInterop {
|
export default class JoplinInterop {
|
||||||
registerExportModule(module: ExportModule): Promise<void>;
|
registerExportModule(module: ExportModule): Promise<void>;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import Logger from 'lib/Logger';
|
import Logger from 'lib/Logger';
|
||||||
import { Script } from './types';
|
import { ContentScriptType, Script } from './types';
|
||||||
/**
|
/**
|
||||||
* This class provides access to plugin-related features.
|
* This class provides access to plugin-related features.
|
||||||
*/
|
*/
|
||||||
@ -21,4 +21,18 @@ export default class JoplinPlugins {
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
register(script: Script): Promise<void>;
|
register(script: Script): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Registers a new content script. Unlike regular plugin code, which runs in a separate process, content scripts run within the main process code
|
||||||
|
* and thus allow improved performances and more customisations in specific cases. It can be used for example to load a Markdown or editor plugin.
|
||||||
|
*
|
||||||
|
* Note that registering a content script in itself will do nothing - it will only be loaded in specific cases by the relevant app modules
|
||||||
|
* (eg. the Markdown renderer or the code editor). So it is not a way to inject and run arbitrary code in the app, which for safety and performance reasons is not supported.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/content_script)
|
||||||
|
*
|
||||||
|
* @param type Defines how the script will be used. See the type definition for more information about each supported type.
|
||||||
|
* @param id A unique ID for the content script.
|
||||||
|
* @param scriptPath Must be a path relative to the plugin main script. For example, if your file content_script.js is next to your index.ts file, you would set `scriptPath` to `"./content_script.js`.
|
||||||
|
*/
|
||||||
|
registerContentScript(type: ContentScriptType, id: string, scriptPath: string): Promise<void>;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import { SettingItem, SettingSection } from './types';
|
|||||||
*
|
*
|
||||||
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/settings)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/settings)
|
||||||
*/
|
*/
|
||||||
export default class JoplinSettings {
|
export default class JoplinSettings {
|
||||||
private plugin_;
|
private plugin_;
|
||||||
@ -32,4 +32,12 @@ export default class JoplinSettings {
|
|||||||
* Sets a setting value (only applies to setting you registered from your plugin)
|
* Sets a setting value (only applies to setting you registered from your plugin)
|
||||||
*/
|
*/
|
||||||
setValue(key: string, value: any): Promise<void>;
|
setValue(key: string, value: any): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Gets a global setting value, including app-specific settings and those set by other plugins.
|
||||||
|
*
|
||||||
|
* The list of available settings is not documented yet, but can be found by looking at the source code:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/3539a452a359162c461d2849829d2d42973eab50/ReactNativeClient/lib/models/Setting.ts#L142
|
||||||
|
*/
|
||||||
|
globalValue(key: string): Promise<any>;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
||||||
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
||||||
|
import JoplinViewsMenus from './JoplinViewsMenus';
|
||||||
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
||||||
import JoplinViewsPanels from './JoplinViewsPanels';
|
import JoplinViewsPanels from './JoplinViewsPanels';
|
||||||
/**
|
/**
|
||||||
@ -15,10 +16,13 @@ export default class JoplinViews {
|
|||||||
private dialogs_;
|
private dialogs_;
|
||||||
private panels_;
|
private panels_;
|
||||||
private menuItems_;
|
private menuItems_;
|
||||||
|
private menus_;
|
||||||
private toolbarButtons_;
|
private toolbarButtons_;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
get dialogs(): JoplinViewsDialogs;
|
get dialogs(): JoplinViewsDialogs;
|
||||||
get panels(): JoplinViewsPanels;
|
get panels(): JoplinViewsPanels;
|
||||||
get menuItems(): JoplinViewsMenuItems;
|
get menuItems(): JoplinViewsMenuItems;
|
||||||
|
get menus(): JoplinViewsMenus;
|
||||||
get toolbarButtons(): JoplinViewsToolbarButtons;
|
get toolbarButtons(): JoplinViewsToolbarButtons;
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,22 @@ import { ButtonSpec, ViewHandle, ButtonId } from './types';
|
|||||||
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
||||||
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/dialog)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/dialog)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsDialogs {
|
export default class JoplinViewsDialogs {
|
||||||
private store;
|
private store;
|
||||||
private plugin;
|
private plugin;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
private controller;
|
private controller;
|
||||||
/**
|
/**
|
||||||
* Creates a new dialog
|
* Creates a new dialog
|
||||||
*/
|
*/
|
||||||
create(): Promise<ViewHandle>;
|
create(): Promise<ViewHandle>;
|
||||||
|
/**
|
||||||
|
* Displays a message box with OK/Cancel buttons. Returns the button index that was clicked - "0" for OK and "1" for "Cancel"
|
||||||
|
*/
|
||||||
|
showMessageBox(message: string): Promise<number>;
|
||||||
/**
|
/**
|
||||||
* Sets the dialog HTML content
|
* Sets the dialog HTML content
|
||||||
*/
|
*/
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing menu items.
|
* Allows creating and managing menu items.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsMenuItems {
|
export default class JoplinViewsMenuItems {
|
||||||
private store;
|
private store;
|
||||||
|
18
CliClient/tests/support/plugins/events/api/JoplinViewsMenus.d.ts
vendored
Normal file
18
CliClient/tests/support/plugins/events/api/JoplinViewsMenus.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { MenuItem, MenuItemLocation } from './types';
|
||||||
|
import Plugin from '../Plugin';
|
||||||
|
/**
|
||||||
|
* Allows creating menus.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/menu)
|
||||||
|
*/
|
||||||
|
export default class JoplinViewsMenus {
|
||||||
|
private store;
|
||||||
|
private plugin;
|
||||||
|
constructor(plugin: Plugin, store: any);
|
||||||
|
private registerCommandAccelerators;
|
||||||
|
/**
|
||||||
|
* Creates a new menu from the provided menu items and place it at the given location. As of now, it is only possible to place the
|
||||||
|
* menu as a sub-menu of the application build-in menus.
|
||||||
|
*/
|
||||||
|
create(label: string, menuItems: MenuItem[], location?: MenuItemLocation): Promise<void>;
|
||||||
|
}
|
@ -4,7 +4,7 @@ import { ViewHandle } from './types';
|
|||||||
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
||||||
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/toc)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/toc)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsPanels {
|
export default class JoplinViewsPanels {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing toolbar buttons.
|
* Allows creating and managing toolbar buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsToolbarButtons {
|
export default class JoplinViewsToolbarButtons {
|
||||||
private store;
|
private store;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
||||||
* as various related events, such as when a new note is selected, or when the note content changes.
|
* as various related events, such as when a new note is selected, or when the note content changes.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins)
|
||||||
*/
|
*/
|
||||||
export default class JoplinWorkspace {
|
export default class JoplinWorkspace {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,12 +3,47 @@
|
|||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export interface Command {
|
export interface Command {
|
||||||
|
/**
|
||||||
|
* Name of command - must be globally unique
|
||||||
|
*/
|
||||||
name: string
|
name: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label to be displayed on menu items or keyboard shortcut editor for example
|
||||||
|
*/
|
||||||
label: string
|
label: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icon to be used on toolbar buttons for example
|
||||||
|
*/
|
||||||
iconName?: string,
|
iconName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code to be ran when the command is executed. It maybe return a result.
|
||||||
|
*/
|
||||||
execute(props:any):Promise<any>
|
execute(props:any):Promise<any>
|
||||||
isEnabled?(props:any):boolean
|
|
||||||
mapStateToProps?(state:any):any
|
/**
|
||||||
|
* Defines whether the command should be enabled or disabled, which in turns affects
|
||||||
|
* the enabled state of any associated button or menu item.
|
||||||
|
*
|
||||||
|
* The condition should be expressed as a "when-clause" (as in Visual Studio Code). It's a simple boolean expression that evaluates to
|
||||||
|
* `true` or `false`. It supports the following operators:
|
||||||
|
*
|
||||||
|
* Operator | Symbol | Example
|
||||||
|
* -- | -- | --
|
||||||
|
* Equality | == | "editorType == markdown"
|
||||||
|
* Inequality | != | "currentScreen != config"
|
||||||
|
* Or | \|\| | "noteIsTodo \|\| noteTodoCompleted"
|
||||||
|
* And | && | "oneNoteSelected && !inConflictFolder"
|
||||||
|
*
|
||||||
|
* Currently the supported context variables aren't documented, but you can find the list there:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts
|
||||||
|
*
|
||||||
|
* Note: Commands are enabled by default unless you use this property.
|
||||||
|
*/
|
||||||
|
enabledCondition?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
@ -26,7 +61,7 @@ export enum ImportModuleOutputFormat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export) for an example.
|
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export) for an example.
|
||||||
*
|
*
|
||||||
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
||||||
*
|
*
|
||||||
@ -154,17 +189,9 @@ export interface Script {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
// View API types
|
// Menu types
|
||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export type ButtonId = string;
|
|
||||||
|
|
||||||
export interface ButtonSpec {
|
|
||||||
id: ButtonId,
|
|
||||||
title?: string,
|
|
||||||
onClick?():void,
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CreateMenuItemOptions {
|
export interface CreateMenuItemOptions {
|
||||||
accelerator: string,
|
accelerator: string,
|
||||||
}
|
}
|
||||||
@ -179,6 +206,41 @@ export enum MenuItemLocation {
|
|||||||
Context = 'context',
|
Context = 'context',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface MenuItem {
|
||||||
|
/**
|
||||||
|
* Command that should be associated with the menu item. All menu item should
|
||||||
|
* have a command associated with them unless they are a sub-menu.
|
||||||
|
*/
|
||||||
|
commandName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accelerator associated with the menu item
|
||||||
|
*/
|
||||||
|
accelerator?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu items that should appear below this menu item. Allows creating a menu tree.
|
||||||
|
*/
|
||||||
|
submenu?: MenuItem[],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu item label. If not specified, the command label will be used instead.
|
||||||
|
*/
|
||||||
|
label?: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// View API types
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export interface ButtonSpec {
|
||||||
|
id: ButtonId,
|
||||||
|
title?: string,
|
||||||
|
onClick?():void,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ButtonId = string;
|
||||||
|
|
||||||
export enum ToolbarButtonLocation {
|
export enum ToolbarButtonLocation {
|
||||||
/**
|
/**
|
||||||
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
||||||
@ -250,3 +312,54 @@ export interface SettingSection {
|
|||||||
* [2]: (Optional) Resource link.
|
* [2]: (Optional) Resource link.
|
||||||
*/
|
*/
|
||||||
export type Path = string[];
|
export type Path = string[];
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// Plugins type
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export enum ContentScriptType {
|
||||||
|
/**
|
||||||
|
* Registers a new Markdown-It plugin, which should follow this template:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* // The module should export an object as below:
|
||||||
|
*
|
||||||
|
* module.exports = {
|
||||||
|
*
|
||||||
|
* // The "context" variable is currently unused but could be used later on to provide
|
||||||
|
* // access to your own plugin so that the content script and plugin can communicate.
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
*
|
||||||
|
* // This is the actual Markdown-It plugin - check the [official doc](https://github.com/markdown-it/markdown-it) for more information
|
||||||
|
* // The `options` parameter is of type [RuleOptions](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts), which
|
||||||
|
* // contains a number of options, mostly useful for Joplin's internal code.
|
||||||
|
* plugin: function(markdownIt, options) {
|
||||||
|
* // ...
|
||||||
|
* },
|
||||||
|
*
|
||||||
|
* // You may also specify additional assets such as JS or CSS that should be loaded in the rendered HTML document.
|
||||||
|
* // Check for example the Joplin [Mermaid plugin](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts) to
|
||||||
|
* // see how the data should be structured.
|
||||||
|
* assets: {},
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To include a regular Markdown-It plugin, that doesn't make use of any Joplin-specific feature, you
|
||||||
|
* would simply create a file such as this:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* module.exports = {
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
* plugin: require('markdown-it-toc-done-right');
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
MarkdownItPlugin = 'markdownItPlugin',
|
||||||
|
CodeMirrorPlugin = 'codeMirrorPlugin',
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@ import { Command } from './types';
|
|||||||
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
||||||
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*
|
*
|
||||||
* ## Executing Joplin's internal commands
|
* ## Executing Joplin's internal commands
|
||||||
*
|
*
|
||||||
@ -27,10 +27,10 @@ export default class JoplinCommands {
|
|||||||
*
|
*
|
||||||
* // Create a new sub-notebook under the provided notebook
|
* // Create a new sub-notebook under the provided notebook
|
||||||
* // Note: internally, notebooks are called "folders".
|
* // Note: internally, notebooks are called "folders".
|
||||||
* await joplin.commands.execute('newFolder', { parent_id: "SOME_FOLDER_ID" });
|
* await joplin.commands.execute('newFolder', "SOME_FOLDER_ID");
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
execute(commandName: string, props?: any): Promise<any>;
|
execute(commandName: string, ...args: any[]): Promise<any>;
|
||||||
/**
|
/**
|
||||||
* <span class="platform-desktop">desktop</span> Registers a new command.
|
* <span class="platform-desktop">desktop</span> Registers a new command.
|
||||||
*
|
*
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { Path } from './types';
|
import { Path } from './types';
|
||||||
/**
|
/**
|
||||||
* This module provides access to the Joplin data API: https://joplinapp.org/api/
|
* This module provides access to the Joplin data API: https://joplinapp.org/api/references/rest_api/
|
||||||
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
||||||
* or to update them or delete them.
|
* or to update them or delete them.
|
||||||
*
|
*
|
||||||
* This is also what you would use to search notes, via the `search` endpoint.
|
* This is also what you would use to search notes, via the `search` endpoint.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/simple)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/simple)
|
||||||
*
|
*
|
||||||
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
||||||
* And each method takes these parameters:
|
* And each method takes these parameters:
|
||||||
@ -16,7 +16,7 @@ import { Path } from './types';
|
|||||||
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
||||||
* * `files`: (Optional) Used to create new resources and associate them with files.
|
* * `files`: (Optional) Used to create new resources and associate them with files.
|
||||||
*
|
*
|
||||||
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/references/rest_api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
||||||
*
|
*
|
||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
|
@ -2,14 +2,14 @@ import { ExportModule, ImportModule } from './types';
|
|||||||
/**
|
/**
|
||||||
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export)
|
||||||
*
|
*
|
||||||
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
||||||
* by the application during the import/export process.
|
* by the application during the import/export process.
|
||||||
*
|
*
|
||||||
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
||||||
*
|
*
|
||||||
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/
|
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/references/rest_api/
|
||||||
*/
|
*/
|
||||||
export default class JoplinInterop {
|
export default class JoplinInterop {
|
||||||
registerExportModule(module: ExportModule): Promise<void>;
|
registerExportModule(module: ExportModule): Promise<void>;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import Logger from 'lib/Logger';
|
import Logger from 'lib/Logger';
|
||||||
import { Script } from './types';
|
import { ContentScriptType, Script } from './types';
|
||||||
/**
|
/**
|
||||||
* This class provides access to plugin-related features.
|
* This class provides access to plugin-related features.
|
||||||
*/
|
*/
|
||||||
@ -21,4 +21,18 @@ export default class JoplinPlugins {
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
register(script: Script): Promise<void>;
|
register(script: Script): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Registers a new content script. Unlike regular plugin code, which runs in a separate process, content scripts run within the main process code
|
||||||
|
* and thus allow improved performances and more customisations in specific cases. It can be used for example to load a Markdown or editor plugin.
|
||||||
|
*
|
||||||
|
* Note that registering a content script in itself will do nothing - it will only be loaded in specific cases by the relevant app modules
|
||||||
|
* (eg. the Markdown renderer or the code editor). So it is not a way to inject and run arbitrary code in the app, which for safety and performance reasons is not supported.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/content_script)
|
||||||
|
*
|
||||||
|
* @param type Defines how the script will be used. See the type definition for more information about each supported type.
|
||||||
|
* @param id A unique ID for the content script.
|
||||||
|
* @param scriptPath Must be a path relative to the plugin main script. For example, if your file content_script.js is next to your index.ts file, you would set `scriptPath` to `"./content_script.js`.
|
||||||
|
*/
|
||||||
|
registerContentScript(type: ContentScriptType, id: string, scriptPath: string): Promise<void>;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import { SettingItem, SettingSection } from './types';
|
|||||||
*
|
*
|
||||||
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/settings)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/settings)
|
||||||
*/
|
*/
|
||||||
export default class JoplinSettings {
|
export default class JoplinSettings {
|
||||||
private plugin_;
|
private plugin_;
|
||||||
@ -32,4 +32,12 @@ export default class JoplinSettings {
|
|||||||
* Sets a setting value (only applies to setting you registered from your plugin)
|
* Sets a setting value (only applies to setting you registered from your plugin)
|
||||||
*/
|
*/
|
||||||
setValue(key: string, value: any): Promise<void>;
|
setValue(key: string, value: any): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Gets a global setting value, including app-specific settings and those set by other plugins.
|
||||||
|
*
|
||||||
|
* The list of available settings is not documented yet, but can be found by looking at the source code:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/3539a452a359162c461d2849829d2d42973eab50/ReactNativeClient/lib/models/Setting.ts#L142
|
||||||
|
*/
|
||||||
|
globalValue(key: string): Promise<any>;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
||||||
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
||||||
|
import JoplinViewsMenus from './JoplinViewsMenus';
|
||||||
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
||||||
import JoplinViewsPanels from './JoplinViewsPanels';
|
import JoplinViewsPanels from './JoplinViewsPanels';
|
||||||
/**
|
/**
|
||||||
@ -15,10 +16,13 @@ export default class JoplinViews {
|
|||||||
private dialogs_;
|
private dialogs_;
|
||||||
private panels_;
|
private panels_;
|
||||||
private menuItems_;
|
private menuItems_;
|
||||||
|
private menus_;
|
||||||
private toolbarButtons_;
|
private toolbarButtons_;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
get dialogs(): JoplinViewsDialogs;
|
get dialogs(): JoplinViewsDialogs;
|
||||||
get panels(): JoplinViewsPanels;
|
get panels(): JoplinViewsPanels;
|
||||||
get menuItems(): JoplinViewsMenuItems;
|
get menuItems(): JoplinViewsMenuItems;
|
||||||
|
get menus(): JoplinViewsMenus;
|
||||||
get toolbarButtons(): JoplinViewsToolbarButtons;
|
get toolbarButtons(): JoplinViewsToolbarButtons;
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,22 @@ import { ButtonSpec, ViewHandle, ButtonId } from './types';
|
|||||||
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
||||||
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/dialog)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/dialog)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsDialogs {
|
export default class JoplinViewsDialogs {
|
||||||
private store;
|
private store;
|
||||||
private plugin;
|
private plugin;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
private controller;
|
private controller;
|
||||||
/**
|
/**
|
||||||
* Creates a new dialog
|
* Creates a new dialog
|
||||||
*/
|
*/
|
||||||
create(): Promise<ViewHandle>;
|
create(): Promise<ViewHandle>;
|
||||||
|
/**
|
||||||
|
* Displays a message box with OK/Cancel buttons. Returns the button index that was clicked - "0" for OK and "1" for "Cancel"
|
||||||
|
*/
|
||||||
|
showMessageBox(message: string): Promise<number>;
|
||||||
/**
|
/**
|
||||||
* Sets the dialog HTML content
|
* Sets the dialog HTML content
|
||||||
*/
|
*/
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing menu items.
|
* Allows creating and managing menu items.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsMenuItems {
|
export default class JoplinViewsMenuItems {
|
||||||
private store;
|
private store;
|
||||||
|
18
CliClient/tests/support/plugins/json_export/api/JoplinViewsMenus.d.ts
vendored
Normal file
18
CliClient/tests/support/plugins/json_export/api/JoplinViewsMenus.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { MenuItem, MenuItemLocation } from './types';
|
||||||
|
import Plugin from '../Plugin';
|
||||||
|
/**
|
||||||
|
* Allows creating menus.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/menu)
|
||||||
|
*/
|
||||||
|
export default class JoplinViewsMenus {
|
||||||
|
private store;
|
||||||
|
private plugin;
|
||||||
|
constructor(plugin: Plugin, store: any);
|
||||||
|
private registerCommandAccelerators;
|
||||||
|
/**
|
||||||
|
* Creates a new menu from the provided menu items and place it at the given location. As of now, it is only possible to place the
|
||||||
|
* menu as a sub-menu of the application build-in menus.
|
||||||
|
*/
|
||||||
|
create(label: string, menuItems: MenuItem[], location?: MenuItemLocation): Promise<void>;
|
||||||
|
}
|
@ -4,7 +4,7 @@ import { ViewHandle } from './types';
|
|||||||
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
||||||
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/toc)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/toc)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsPanels {
|
export default class JoplinViewsPanels {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing toolbar buttons.
|
* Allows creating and managing toolbar buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsToolbarButtons {
|
export default class JoplinViewsToolbarButtons {
|
||||||
private store;
|
private store;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
||||||
* as various related events, such as when a new note is selected, or when the note content changes.
|
* as various related events, such as when a new note is selected, or when the note content changes.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins)
|
||||||
*/
|
*/
|
||||||
export default class JoplinWorkspace {
|
export default class JoplinWorkspace {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,12 +3,47 @@
|
|||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export interface Command {
|
export interface Command {
|
||||||
|
/**
|
||||||
|
* Name of command - must be globally unique
|
||||||
|
*/
|
||||||
name: string
|
name: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label to be displayed on menu items or keyboard shortcut editor for example
|
||||||
|
*/
|
||||||
label: string
|
label: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icon to be used on toolbar buttons for example
|
||||||
|
*/
|
||||||
iconName?: string,
|
iconName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code to be ran when the command is executed. It maybe return a result.
|
||||||
|
*/
|
||||||
execute(props:any):Promise<any>
|
execute(props:any):Promise<any>
|
||||||
isEnabled?(props:any):boolean
|
|
||||||
mapStateToProps?(state:any):any
|
/**
|
||||||
|
* Defines whether the command should be enabled or disabled, which in turns affects
|
||||||
|
* the enabled state of any associated button or menu item.
|
||||||
|
*
|
||||||
|
* The condition should be expressed as a "when-clause" (as in Visual Studio Code). It's a simple boolean expression that evaluates to
|
||||||
|
* `true` or `false`. It supports the following operators:
|
||||||
|
*
|
||||||
|
* Operator | Symbol | Example
|
||||||
|
* -- | -- | --
|
||||||
|
* Equality | == | "editorType == markdown"
|
||||||
|
* Inequality | != | "currentScreen != config"
|
||||||
|
* Or | \|\| | "noteIsTodo \|\| noteTodoCompleted"
|
||||||
|
* And | && | "oneNoteSelected && !inConflictFolder"
|
||||||
|
*
|
||||||
|
* Currently the supported context variables aren't documented, but you can find the list there:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts
|
||||||
|
*
|
||||||
|
* Note: Commands are enabled by default unless you use this property.
|
||||||
|
*/
|
||||||
|
enabledCondition?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
@ -26,7 +61,7 @@ export enum ImportModuleOutputFormat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export) for an example.
|
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export) for an example.
|
||||||
*
|
*
|
||||||
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
||||||
*
|
*
|
||||||
@ -154,17 +189,9 @@ export interface Script {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
// View API types
|
// Menu types
|
||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export type ButtonId = string;
|
|
||||||
|
|
||||||
export interface ButtonSpec {
|
|
||||||
id: ButtonId,
|
|
||||||
title?: string,
|
|
||||||
onClick?():void,
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CreateMenuItemOptions {
|
export interface CreateMenuItemOptions {
|
||||||
accelerator: string,
|
accelerator: string,
|
||||||
}
|
}
|
||||||
@ -179,6 +206,41 @@ export enum MenuItemLocation {
|
|||||||
Context = 'context',
|
Context = 'context',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface MenuItem {
|
||||||
|
/**
|
||||||
|
* Command that should be associated with the menu item. All menu item should
|
||||||
|
* have a command associated with them unless they are a sub-menu.
|
||||||
|
*/
|
||||||
|
commandName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accelerator associated with the menu item
|
||||||
|
*/
|
||||||
|
accelerator?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu items that should appear below this menu item. Allows creating a menu tree.
|
||||||
|
*/
|
||||||
|
submenu?: MenuItem[],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu item label. If not specified, the command label will be used instead.
|
||||||
|
*/
|
||||||
|
label?: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// View API types
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export interface ButtonSpec {
|
||||||
|
id: ButtonId,
|
||||||
|
title?: string,
|
||||||
|
onClick?():void,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ButtonId = string;
|
||||||
|
|
||||||
export enum ToolbarButtonLocation {
|
export enum ToolbarButtonLocation {
|
||||||
/**
|
/**
|
||||||
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
||||||
@ -250,3 +312,54 @@ export interface SettingSection {
|
|||||||
* [2]: (Optional) Resource link.
|
* [2]: (Optional) Resource link.
|
||||||
*/
|
*/
|
||||||
export type Path = string[];
|
export type Path = string[];
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// Plugins type
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export enum ContentScriptType {
|
||||||
|
/**
|
||||||
|
* Registers a new Markdown-It plugin, which should follow this template:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* // The module should export an object as below:
|
||||||
|
*
|
||||||
|
* module.exports = {
|
||||||
|
*
|
||||||
|
* // The "context" variable is currently unused but could be used later on to provide
|
||||||
|
* // access to your own plugin so that the content script and plugin can communicate.
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
*
|
||||||
|
* // This is the actual Markdown-It plugin - check the [official doc](https://github.com/markdown-it/markdown-it) for more information
|
||||||
|
* // The `options` parameter is of type [RuleOptions](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts), which
|
||||||
|
* // contains a number of options, mostly useful for Joplin's internal code.
|
||||||
|
* plugin: function(markdownIt, options) {
|
||||||
|
* // ...
|
||||||
|
* },
|
||||||
|
*
|
||||||
|
* // You may also specify additional assets such as JS or CSS that should be loaded in the rendered HTML document.
|
||||||
|
* // Check for example the Joplin [Mermaid plugin](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts) to
|
||||||
|
* // see how the data should be structured.
|
||||||
|
* assets: {},
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To include a regular Markdown-It plugin, that doesn't make use of any Joplin-specific feature, you
|
||||||
|
* would simply create a file such as this:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* module.exports = {
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
* plugin: require('markdown-it-toc-done-right');
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
MarkdownItPlugin = 'markdownItPlugin',
|
||||||
|
CodeMirrorPlugin = 'codeMirrorPlugin',
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@ import { Command } from './types';
|
|||||||
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
||||||
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*
|
*
|
||||||
* ## Executing Joplin's internal commands
|
* ## Executing Joplin's internal commands
|
||||||
*
|
*
|
||||||
@ -27,10 +27,10 @@ export default class JoplinCommands {
|
|||||||
*
|
*
|
||||||
* // Create a new sub-notebook under the provided notebook
|
* // Create a new sub-notebook under the provided notebook
|
||||||
* // Note: internally, notebooks are called "folders".
|
* // Note: internally, notebooks are called "folders".
|
||||||
* await joplin.commands.execute('newFolder', { parent_id: "SOME_FOLDER_ID" });
|
* await joplin.commands.execute('newFolder', "SOME_FOLDER_ID");
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
execute(commandName: string, props?: any): Promise<any>;
|
execute(commandName: string, ...args: any[]): Promise<any>;
|
||||||
/**
|
/**
|
||||||
* <span class="platform-desktop">desktop</span> Registers a new command.
|
* <span class="platform-desktop">desktop</span> Registers a new command.
|
||||||
*
|
*
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { Path } from './types';
|
import { Path } from './types';
|
||||||
/**
|
/**
|
||||||
* This module provides access to the Joplin data API: https://joplinapp.org/api/
|
* This module provides access to the Joplin data API: https://joplinapp.org/api/references/rest_api/
|
||||||
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
||||||
* or to update them or delete them.
|
* or to update them or delete them.
|
||||||
*
|
*
|
||||||
* This is also what you would use to search notes, via the `search` endpoint.
|
* This is also what you would use to search notes, via the `search` endpoint.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/simple)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/simple)
|
||||||
*
|
*
|
||||||
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
||||||
* And each method takes these parameters:
|
* And each method takes these parameters:
|
||||||
@ -16,7 +16,7 @@ import { Path } from './types';
|
|||||||
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
||||||
* * `files`: (Optional) Used to create new resources and associate them with files.
|
* * `files`: (Optional) Used to create new resources and associate them with files.
|
||||||
*
|
*
|
||||||
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/references/rest_api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
||||||
*
|
*
|
||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
|
@ -2,14 +2,14 @@ import { ExportModule, ImportModule } from './types';
|
|||||||
/**
|
/**
|
||||||
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export)
|
||||||
*
|
*
|
||||||
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
||||||
* by the application during the import/export process.
|
* by the application during the import/export process.
|
||||||
*
|
*
|
||||||
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
||||||
*
|
*
|
||||||
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/
|
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/references/rest_api/
|
||||||
*/
|
*/
|
||||||
export default class JoplinInterop {
|
export default class JoplinInterop {
|
||||||
registerExportModule(module: ExportModule): Promise<void>;
|
registerExportModule(module: ExportModule): Promise<void>;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import Logger from 'lib/Logger';
|
import Logger from 'lib/Logger';
|
||||||
import { Script } from './types';
|
import { ContentScriptType, Script } from './types';
|
||||||
/**
|
/**
|
||||||
* This class provides access to plugin-related features.
|
* This class provides access to plugin-related features.
|
||||||
*/
|
*/
|
||||||
@ -21,4 +21,18 @@ export default class JoplinPlugins {
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
register(script: Script): Promise<void>;
|
register(script: Script): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Registers a new content script. Unlike regular plugin code, which runs in a separate process, content scripts run within the main process code
|
||||||
|
* and thus allow improved performances and more customisations in specific cases. It can be used for example to load a Markdown or editor plugin.
|
||||||
|
*
|
||||||
|
* Note that registering a content script in itself will do nothing - it will only be loaded in specific cases by the relevant app modules
|
||||||
|
* (eg. the Markdown renderer or the code editor). So it is not a way to inject and run arbitrary code in the app, which for safety and performance reasons is not supported.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/content_script)
|
||||||
|
*
|
||||||
|
* @param type Defines how the script will be used. See the type definition for more information about each supported type.
|
||||||
|
* @param id A unique ID for the content script.
|
||||||
|
* @param scriptPath Must be a path relative to the plugin main script. For example, if your file content_script.js is next to your index.ts file, you would set `scriptPath` to `"./content_script.js`.
|
||||||
|
*/
|
||||||
|
registerContentScript(type: ContentScriptType, id: string, scriptPath: string): Promise<void>;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import { SettingItem, SettingSection } from './types';
|
|||||||
*
|
*
|
||||||
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/settings)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/settings)
|
||||||
*/
|
*/
|
||||||
export default class JoplinSettings {
|
export default class JoplinSettings {
|
||||||
private plugin_;
|
private plugin_;
|
||||||
@ -32,4 +32,12 @@ export default class JoplinSettings {
|
|||||||
* Sets a setting value (only applies to setting you registered from your plugin)
|
* Sets a setting value (only applies to setting you registered from your plugin)
|
||||||
*/
|
*/
|
||||||
setValue(key: string, value: any): Promise<void>;
|
setValue(key: string, value: any): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Gets a global setting value, including app-specific settings and those set by other plugins.
|
||||||
|
*
|
||||||
|
* The list of available settings is not documented yet, but can be found by looking at the source code:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/3539a452a359162c461d2849829d2d42973eab50/ReactNativeClient/lib/models/Setting.ts#L142
|
||||||
|
*/
|
||||||
|
globalValue(key: string): Promise<any>;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
||||||
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
||||||
|
import JoplinViewsMenus from './JoplinViewsMenus';
|
||||||
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
||||||
import JoplinViewsPanels from './JoplinViewsPanels';
|
import JoplinViewsPanels from './JoplinViewsPanels';
|
||||||
/**
|
/**
|
||||||
@ -15,10 +16,13 @@ export default class JoplinViews {
|
|||||||
private dialogs_;
|
private dialogs_;
|
||||||
private panels_;
|
private panels_;
|
||||||
private menuItems_;
|
private menuItems_;
|
||||||
|
private menus_;
|
||||||
private toolbarButtons_;
|
private toolbarButtons_;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
get dialogs(): JoplinViewsDialogs;
|
get dialogs(): JoplinViewsDialogs;
|
||||||
get panels(): JoplinViewsPanels;
|
get panels(): JoplinViewsPanels;
|
||||||
get menuItems(): JoplinViewsMenuItems;
|
get menuItems(): JoplinViewsMenuItems;
|
||||||
|
get menus(): JoplinViewsMenus;
|
||||||
get toolbarButtons(): JoplinViewsToolbarButtons;
|
get toolbarButtons(): JoplinViewsToolbarButtons;
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,22 @@ import { ButtonSpec, ViewHandle, ButtonId } from './types';
|
|||||||
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
||||||
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/dialog)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/dialog)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsDialogs {
|
export default class JoplinViewsDialogs {
|
||||||
private store;
|
private store;
|
||||||
private plugin;
|
private plugin;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
private controller;
|
private controller;
|
||||||
/**
|
/**
|
||||||
* Creates a new dialog
|
* Creates a new dialog
|
||||||
*/
|
*/
|
||||||
create(): Promise<ViewHandle>;
|
create(): Promise<ViewHandle>;
|
||||||
|
/**
|
||||||
|
* Displays a message box with OK/Cancel buttons. Returns the button index that was clicked - "0" for OK and "1" for "Cancel"
|
||||||
|
*/
|
||||||
|
showMessageBox(message: string): Promise<number>;
|
||||||
/**
|
/**
|
||||||
* Sets the dialog HTML content
|
* Sets the dialog HTML content
|
||||||
*/
|
*/
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing menu items.
|
* Allows creating and managing menu items.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsMenuItems {
|
export default class JoplinViewsMenuItems {
|
||||||
private store;
|
private store;
|
||||||
|
18
CliClient/tests/support/plugins/multi_selection/api/JoplinViewsMenus.d.ts
vendored
Normal file
18
CliClient/tests/support/plugins/multi_selection/api/JoplinViewsMenus.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { MenuItem, MenuItemLocation } from './types';
|
||||||
|
import Plugin from '../Plugin';
|
||||||
|
/**
|
||||||
|
* Allows creating menus.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/menu)
|
||||||
|
*/
|
||||||
|
export default class JoplinViewsMenus {
|
||||||
|
private store;
|
||||||
|
private plugin;
|
||||||
|
constructor(plugin: Plugin, store: any);
|
||||||
|
private registerCommandAccelerators;
|
||||||
|
/**
|
||||||
|
* Creates a new menu from the provided menu items and place it at the given location. As of now, it is only possible to place the
|
||||||
|
* menu as a sub-menu of the application build-in menus.
|
||||||
|
*/
|
||||||
|
create(label: string, menuItems: MenuItem[], location?: MenuItemLocation): Promise<void>;
|
||||||
|
}
|
@ -4,7 +4,7 @@ import { ViewHandle } from './types';
|
|||||||
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
||||||
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/toc)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/toc)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsPanels {
|
export default class JoplinViewsPanels {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing toolbar buttons.
|
* Allows creating and managing toolbar buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsToolbarButtons {
|
export default class JoplinViewsToolbarButtons {
|
||||||
private store;
|
private store;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
||||||
* as various related events, such as when a new note is selected, or when the note content changes.
|
* as various related events, such as when a new note is selected, or when the note content changes.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins)
|
||||||
*/
|
*/
|
||||||
export default class JoplinWorkspace {
|
export default class JoplinWorkspace {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,12 +3,47 @@
|
|||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export interface Command {
|
export interface Command {
|
||||||
|
/**
|
||||||
|
* Name of command - must be globally unique
|
||||||
|
*/
|
||||||
name: string
|
name: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label to be displayed on menu items or keyboard shortcut editor for example
|
||||||
|
*/
|
||||||
label: string
|
label: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icon to be used on toolbar buttons for example
|
||||||
|
*/
|
||||||
iconName?: string,
|
iconName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code to be ran when the command is executed. It maybe return a result.
|
||||||
|
*/
|
||||||
execute(props:any):Promise<any>
|
execute(props:any):Promise<any>
|
||||||
isEnabled?(props:any):boolean
|
|
||||||
mapStateToProps?(state:any):any
|
/**
|
||||||
|
* Defines whether the command should be enabled or disabled, which in turns affects
|
||||||
|
* the enabled state of any associated button or menu item.
|
||||||
|
*
|
||||||
|
* The condition should be expressed as a "when-clause" (as in Visual Studio Code). It's a simple boolean expression that evaluates to
|
||||||
|
* `true` or `false`. It supports the following operators:
|
||||||
|
*
|
||||||
|
* Operator | Symbol | Example
|
||||||
|
* -- | -- | --
|
||||||
|
* Equality | == | "editorType == markdown"
|
||||||
|
* Inequality | != | "currentScreen != config"
|
||||||
|
* Or | \|\| | "noteIsTodo \|\| noteTodoCompleted"
|
||||||
|
* And | && | "oneNoteSelected && !inConflictFolder"
|
||||||
|
*
|
||||||
|
* Currently the supported context variables aren't documented, but you can find the list there:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts
|
||||||
|
*
|
||||||
|
* Note: Commands are enabled by default unless you use this property.
|
||||||
|
*/
|
||||||
|
enabledCondition?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
@ -26,7 +61,7 @@ export enum ImportModuleOutputFormat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export) for an example.
|
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export) for an example.
|
||||||
*
|
*
|
||||||
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
||||||
*
|
*
|
||||||
@ -154,17 +189,9 @@ export interface Script {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
// View API types
|
// Menu types
|
||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export type ButtonId = string;
|
|
||||||
|
|
||||||
export interface ButtonSpec {
|
|
||||||
id: ButtonId,
|
|
||||||
title?: string,
|
|
||||||
onClick?():void,
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CreateMenuItemOptions {
|
export interface CreateMenuItemOptions {
|
||||||
accelerator: string,
|
accelerator: string,
|
||||||
}
|
}
|
||||||
@ -179,6 +206,41 @@ export enum MenuItemLocation {
|
|||||||
Context = 'context',
|
Context = 'context',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface MenuItem {
|
||||||
|
/**
|
||||||
|
* Command that should be associated with the menu item. All menu item should
|
||||||
|
* have a command associated with them unless they are a sub-menu.
|
||||||
|
*/
|
||||||
|
commandName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accelerator associated with the menu item
|
||||||
|
*/
|
||||||
|
accelerator?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu items that should appear below this menu item. Allows creating a menu tree.
|
||||||
|
*/
|
||||||
|
submenu?: MenuItem[],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu item label. If not specified, the command label will be used instead.
|
||||||
|
*/
|
||||||
|
label?: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// View API types
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export interface ButtonSpec {
|
||||||
|
id: ButtonId,
|
||||||
|
title?: string,
|
||||||
|
onClick?():void,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ButtonId = string;
|
||||||
|
|
||||||
export enum ToolbarButtonLocation {
|
export enum ToolbarButtonLocation {
|
||||||
/**
|
/**
|
||||||
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
||||||
@ -250,3 +312,54 @@ export interface SettingSection {
|
|||||||
* [2]: (Optional) Resource link.
|
* [2]: (Optional) Resource link.
|
||||||
*/
|
*/
|
||||||
export type Path = string[];
|
export type Path = string[];
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// Plugins type
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export enum ContentScriptType {
|
||||||
|
/**
|
||||||
|
* Registers a new Markdown-It plugin, which should follow this template:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* // The module should export an object as below:
|
||||||
|
*
|
||||||
|
* module.exports = {
|
||||||
|
*
|
||||||
|
* // The "context" variable is currently unused but could be used later on to provide
|
||||||
|
* // access to your own plugin so that the content script and plugin can communicate.
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
*
|
||||||
|
* // This is the actual Markdown-It plugin - check the [official doc](https://github.com/markdown-it/markdown-it) for more information
|
||||||
|
* // The `options` parameter is of type [RuleOptions](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts), which
|
||||||
|
* // contains a number of options, mostly useful for Joplin's internal code.
|
||||||
|
* plugin: function(markdownIt, options) {
|
||||||
|
* // ...
|
||||||
|
* },
|
||||||
|
*
|
||||||
|
* // You may also specify additional assets such as JS or CSS that should be loaded in the rendered HTML document.
|
||||||
|
* // Check for example the Joplin [Mermaid plugin](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts) to
|
||||||
|
* // see how the data should be structured.
|
||||||
|
* assets: {},
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To include a regular Markdown-It plugin, that doesn't make use of any Joplin-specific feature, you
|
||||||
|
* would simply create a file such as this:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* module.exports = {
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
* plugin: require('markdown-it-toc-done-right');
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
MarkdownItPlugin = 'markdownItPlugin',
|
||||||
|
CodeMirrorPlugin = 'codeMirrorPlugin',
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@ import { Command } from './types';
|
|||||||
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
||||||
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*
|
*
|
||||||
* ## Executing Joplin's internal commands
|
* ## Executing Joplin's internal commands
|
||||||
*
|
*
|
||||||
@ -27,10 +27,10 @@ export default class JoplinCommands {
|
|||||||
*
|
*
|
||||||
* // Create a new sub-notebook under the provided notebook
|
* // Create a new sub-notebook under the provided notebook
|
||||||
* // Note: internally, notebooks are called "folders".
|
* // Note: internally, notebooks are called "folders".
|
||||||
* await joplin.commands.execute('newFolder', { parent_id: "SOME_FOLDER_ID" });
|
* await joplin.commands.execute('newFolder', "SOME_FOLDER_ID");
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
execute(commandName: string, props?: any): Promise<any>;
|
execute(commandName: string, ...args: any[]): Promise<any>;
|
||||||
/**
|
/**
|
||||||
* <span class="platform-desktop">desktop</span> Registers a new command.
|
* <span class="platform-desktop">desktop</span> Registers a new command.
|
||||||
*
|
*
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { Path } from './types';
|
import { Path } from './types';
|
||||||
/**
|
/**
|
||||||
* This module provides access to the Joplin data API: https://joplinapp.org/api/
|
* This module provides access to the Joplin data API: https://joplinapp.org/api/references/rest_api/
|
||||||
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
||||||
* or to update them or delete them.
|
* or to update them or delete them.
|
||||||
*
|
*
|
||||||
* This is also what you would use to search notes, via the `search` endpoint.
|
* This is also what you would use to search notes, via the `search` endpoint.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/simple)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/simple)
|
||||||
*
|
*
|
||||||
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
||||||
* And each method takes these parameters:
|
* And each method takes these parameters:
|
||||||
@ -16,7 +16,7 @@ import { Path } from './types';
|
|||||||
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
||||||
* * `files`: (Optional) Used to create new resources and associate them with files.
|
* * `files`: (Optional) Used to create new resources and associate them with files.
|
||||||
*
|
*
|
||||||
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/references/rest_api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
||||||
*
|
*
|
||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
|
@ -2,14 +2,14 @@ import { ExportModule, ImportModule } from './types';
|
|||||||
/**
|
/**
|
||||||
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export)
|
||||||
*
|
*
|
||||||
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
||||||
* by the application during the import/export process.
|
* by the application during the import/export process.
|
||||||
*
|
*
|
||||||
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
||||||
*
|
*
|
||||||
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/
|
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/references/rest_api/
|
||||||
*/
|
*/
|
||||||
export default class JoplinInterop {
|
export default class JoplinInterop {
|
||||||
registerExportModule(module: ExportModule): Promise<void>;
|
registerExportModule(module: ExportModule): Promise<void>;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import Logger from 'lib/Logger';
|
import Logger from 'lib/Logger';
|
||||||
import { Script } from './types';
|
import { ContentScriptType, Script } from './types';
|
||||||
/**
|
/**
|
||||||
* This class provides access to plugin-related features.
|
* This class provides access to plugin-related features.
|
||||||
*/
|
*/
|
||||||
@ -21,4 +21,18 @@ export default class JoplinPlugins {
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
register(script: Script): Promise<void>;
|
register(script: Script): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Registers a new content script. Unlike regular plugin code, which runs in a separate process, content scripts run within the main process code
|
||||||
|
* and thus allow improved performances and more customisations in specific cases. It can be used for example to load a Markdown or editor plugin.
|
||||||
|
*
|
||||||
|
* Note that registering a content script in itself will do nothing - it will only be loaded in specific cases by the relevant app modules
|
||||||
|
* (eg. the Markdown renderer or the code editor). So it is not a way to inject and run arbitrary code in the app, which for safety and performance reasons is not supported.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/content_script)
|
||||||
|
*
|
||||||
|
* @param type Defines how the script will be used. See the type definition for more information about each supported type.
|
||||||
|
* @param id A unique ID for the content script.
|
||||||
|
* @param scriptPath Must be a path relative to the plugin main script. For example, if your file content_script.js is next to your index.ts file, you would set `scriptPath` to `"./content_script.js`.
|
||||||
|
*/
|
||||||
|
registerContentScript(type: ContentScriptType, id: string, scriptPath: string): Promise<void>;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import { SettingItem, SettingSection } from './types';
|
|||||||
*
|
*
|
||||||
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/settings)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/settings)
|
||||||
*/
|
*/
|
||||||
export default class JoplinSettings {
|
export default class JoplinSettings {
|
||||||
private plugin_;
|
private plugin_;
|
||||||
@ -32,4 +32,12 @@ export default class JoplinSettings {
|
|||||||
* Sets a setting value (only applies to setting you registered from your plugin)
|
* Sets a setting value (only applies to setting you registered from your plugin)
|
||||||
*/
|
*/
|
||||||
setValue(key: string, value: any): Promise<void>;
|
setValue(key: string, value: any): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Gets a global setting value, including app-specific settings and those set by other plugins.
|
||||||
|
*
|
||||||
|
* The list of available settings is not documented yet, but can be found by looking at the source code:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/3539a452a359162c461d2849829d2d42973eab50/ReactNativeClient/lib/models/Setting.ts#L142
|
||||||
|
*/
|
||||||
|
globalValue(key: string): Promise<any>;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
||||||
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
||||||
|
import JoplinViewsMenus from './JoplinViewsMenus';
|
||||||
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
||||||
import JoplinViewsPanels from './JoplinViewsPanels';
|
import JoplinViewsPanels from './JoplinViewsPanels';
|
||||||
/**
|
/**
|
||||||
@ -15,10 +16,13 @@ export default class JoplinViews {
|
|||||||
private dialogs_;
|
private dialogs_;
|
||||||
private panels_;
|
private panels_;
|
||||||
private menuItems_;
|
private menuItems_;
|
||||||
|
private menus_;
|
||||||
private toolbarButtons_;
|
private toolbarButtons_;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
get dialogs(): JoplinViewsDialogs;
|
get dialogs(): JoplinViewsDialogs;
|
||||||
get panels(): JoplinViewsPanels;
|
get panels(): JoplinViewsPanels;
|
||||||
get menuItems(): JoplinViewsMenuItems;
|
get menuItems(): JoplinViewsMenuItems;
|
||||||
|
get menus(): JoplinViewsMenus;
|
||||||
get toolbarButtons(): JoplinViewsToolbarButtons;
|
get toolbarButtons(): JoplinViewsToolbarButtons;
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,22 @@ import { ButtonSpec, ViewHandle, ButtonId } from './types';
|
|||||||
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
||||||
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/dialog)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/dialog)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsDialogs {
|
export default class JoplinViewsDialogs {
|
||||||
private store;
|
private store;
|
||||||
private plugin;
|
private plugin;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
private controller;
|
private controller;
|
||||||
/**
|
/**
|
||||||
* Creates a new dialog
|
* Creates a new dialog
|
||||||
*/
|
*/
|
||||||
create(): Promise<ViewHandle>;
|
create(): Promise<ViewHandle>;
|
||||||
|
/**
|
||||||
|
* Displays a message box with OK/Cancel buttons. Returns the button index that was clicked - "0" for OK and "1" for "Cancel"
|
||||||
|
*/
|
||||||
|
showMessageBox(message: string): Promise<number>;
|
||||||
/**
|
/**
|
||||||
* Sets the dialog HTML content
|
* Sets the dialog HTML content
|
||||||
*/
|
*/
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing menu items.
|
* Allows creating and managing menu items.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsMenuItems {
|
export default class JoplinViewsMenuItems {
|
||||||
private store;
|
private store;
|
||||||
|
18
CliClient/tests/support/plugins/register_command/api/JoplinViewsMenus.d.ts
vendored
Normal file
18
CliClient/tests/support/plugins/register_command/api/JoplinViewsMenus.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { MenuItem, MenuItemLocation } from './types';
|
||||||
|
import Plugin from '../Plugin';
|
||||||
|
/**
|
||||||
|
* Allows creating menus.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/menu)
|
||||||
|
*/
|
||||||
|
export default class JoplinViewsMenus {
|
||||||
|
private store;
|
||||||
|
private plugin;
|
||||||
|
constructor(plugin: Plugin, store: any);
|
||||||
|
private registerCommandAccelerators;
|
||||||
|
/**
|
||||||
|
* Creates a new menu from the provided menu items and place it at the given location. As of now, it is only possible to place the
|
||||||
|
* menu as a sub-menu of the application build-in menus.
|
||||||
|
*/
|
||||||
|
create(label: string, menuItems: MenuItem[], location?: MenuItemLocation): Promise<void>;
|
||||||
|
}
|
@ -4,7 +4,7 @@ import { ViewHandle } from './types';
|
|||||||
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
||||||
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/toc)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/toc)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsPanels {
|
export default class JoplinViewsPanels {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing toolbar buttons.
|
* Allows creating and managing toolbar buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsToolbarButtons {
|
export default class JoplinViewsToolbarButtons {
|
||||||
private store;
|
private store;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
||||||
* as various related events, such as when a new note is selected, or when the note content changes.
|
* as various related events, such as when a new note is selected, or when the note content changes.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins)
|
||||||
*/
|
*/
|
||||||
export default class JoplinWorkspace {
|
export default class JoplinWorkspace {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,12 +3,47 @@
|
|||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export interface Command {
|
export interface Command {
|
||||||
|
/**
|
||||||
|
* Name of command - must be globally unique
|
||||||
|
*/
|
||||||
name: string
|
name: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label to be displayed on menu items or keyboard shortcut editor for example
|
||||||
|
*/
|
||||||
label: string
|
label: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icon to be used on toolbar buttons for example
|
||||||
|
*/
|
||||||
iconName?: string,
|
iconName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code to be ran when the command is executed. It maybe return a result.
|
||||||
|
*/
|
||||||
execute(props:any):Promise<any>
|
execute(props:any):Promise<any>
|
||||||
isEnabled?(props:any):boolean
|
|
||||||
mapStateToProps?(state:any):any
|
/**
|
||||||
|
* Defines whether the command should be enabled or disabled, which in turns affects
|
||||||
|
* the enabled state of any associated button or menu item.
|
||||||
|
*
|
||||||
|
* The condition should be expressed as a "when-clause" (as in Visual Studio Code). It's a simple boolean expression that evaluates to
|
||||||
|
* `true` or `false`. It supports the following operators:
|
||||||
|
*
|
||||||
|
* Operator | Symbol | Example
|
||||||
|
* -- | -- | --
|
||||||
|
* Equality | == | "editorType == markdown"
|
||||||
|
* Inequality | != | "currentScreen != config"
|
||||||
|
* Or | \|\| | "noteIsTodo \|\| noteTodoCompleted"
|
||||||
|
* And | && | "oneNoteSelected && !inConflictFolder"
|
||||||
|
*
|
||||||
|
* Currently the supported context variables aren't documented, but you can find the list there:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts
|
||||||
|
*
|
||||||
|
* Note: Commands are enabled by default unless you use this property.
|
||||||
|
*/
|
||||||
|
enabledCondition?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
@ -26,7 +61,7 @@ export enum ImportModuleOutputFormat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export) for an example.
|
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export) for an example.
|
||||||
*
|
*
|
||||||
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
||||||
*
|
*
|
||||||
@ -154,17 +189,9 @@ export interface Script {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
// View API types
|
// Menu types
|
||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export type ButtonId = string;
|
|
||||||
|
|
||||||
export interface ButtonSpec {
|
|
||||||
id: ButtonId,
|
|
||||||
title?: string,
|
|
||||||
onClick?():void,
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CreateMenuItemOptions {
|
export interface CreateMenuItemOptions {
|
||||||
accelerator: string,
|
accelerator: string,
|
||||||
}
|
}
|
||||||
@ -179,6 +206,41 @@ export enum MenuItemLocation {
|
|||||||
Context = 'context',
|
Context = 'context',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface MenuItem {
|
||||||
|
/**
|
||||||
|
* Command that should be associated with the menu item. All menu item should
|
||||||
|
* have a command associated with them unless they are a sub-menu.
|
||||||
|
*/
|
||||||
|
commandName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accelerator associated with the menu item
|
||||||
|
*/
|
||||||
|
accelerator?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu items that should appear below this menu item. Allows creating a menu tree.
|
||||||
|
*/
|
||||||
|
submenu?: MenuItem[],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu item label. If not specified, the command label will be used instead.
|
||||||
|
*/
|
||||||
|
label?: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// View API types
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export interface ButtonSpec {
|
||||||
|
id: ButtonId,
|
||||||
|
title?: string,
|
||||||
|
onClick?():void,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ButtonId = string;
|
||||||
|
|
||||||
export enum ToolbarButtonLocation {
|
export enum ToolbarButtonLocation {
|
||||||
/**
|
/**
|
||||||
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
||||||
@ -250,3 +312,54 @@ export interface SettingSection {
|
|||||||
* [2]: (Optional) Resource link.
|
* [2]: (Optional) Resource link.
|
||||||
*/
|
*/
|
||||||
export type Path = string[];
|
export type Path = string[];
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// Plugins type
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export enum ContentScriptType {
|
||||||
|
/**
|
||||||
|
* Registers a new Markdown-It plugin, which should follow this template:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* // The module should export an object as below:
|
||||||
|
*
|
||||||
|
* module.exports = {
|
||||||
|
*
|
||||||
|
* // The "context" variable is currently unused but could be used later on to provide
|
||||||
|
* // access to your own plugin so that the content script and plugin can communicate.
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
*
|
||||||
|
* // This is the actual Markdown-It plugin - check the [official doc](https://github.com/markdown-it/markdown-it) for more information
|
||||||
|
* // The `options` parameter is of type [RuleOptions](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts), which
|
||||||
|
* // contains a number of options, mostly useful for Joplin's internal code.
|
||||||
|
* plugin: function(markdownIt, options) {
|
||||||
|
* // ...
|
||||||
|
* },
|
||||||
|
*
|
||||||
|
* // You may also specify additional assets such as JS or CSS that should be loaded in the rendered HTML document.
|
||||||
|
* // Check for example the Joplin [Mermaid plugin](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts) to
|
||||||
|
* // see how the data should be structured.
|
||||||
|
* assets: {},
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To include a regular Markdown-It plugin, that doesn't make use of any Joplin-specific feature, you
|
||||||
|
* would simply create a file such as this:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* module.exports = {
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
* plugin: require('markdown-it-toc-done-right');
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
MarkdownItPlugin = 'markdownItPlugin',
|
||||||
|
CodeMirrorPlugin = 'codeMirrorPlugin',
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@ import { Command } from './types';
|
|||||||
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
||||||
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*
|
*
|
||||||
* ## Executing Joplin's internal commands
|
* ## Executing Joplin's internal commands
|
||||||
*
|
*
|
||||||
@ -27,10 +27,10 @@ export default class JoplinCommands {
|
|||||||
*
|
*
|
||||||
* // Create a new sub-notebook under the provided notebook
|
* // Create a new sub-notebook under the provided notebook
|
||||||
* // Note: internally, notebooks are called "folders".
|
* // Note: internally, notebooks are called "folders".
|
||||||
* await joplin.commands.execute('newFolder', { parent_id: "SOME_FOLDER_ID" });
|
* await joplin.commands.execute('newFolder', "SOME_FOLDER_ID");
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
execute(commandName: string, props?: any): Promise<any>;
|
execute(commandName: string, ...args: any[]): Promise<any>;
|
||||||
/**
|
/**
|
||||||
* <span class="platform-desktop">desktop</span> Registers a new command.
|
* <span class="platform-desktop">desktop</span> Registers a new command.
|
||||||
*
|
*
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { Path } from './types';
|
import { Path } from './types';
|
||||||
/**
|
/**
|
||||||
* This module provides access to the Joplin data API: https://joplinapp.org/api/
|
* This module provides access to the Joplin data API: https://joplinapp.org/api/references/rest_api/
|
||||||
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
||||||
* or to update them or delete them.
|
* or to update them or delete them.
|
||||||
*
|
*
|
||||||
* This is also what you would use to search notes, via the `search` endpoint.
|
* This is also what you would use to search notes, via the `search` endpoint.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/simple)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/simple)
|
||||||
*
|
*
|
||||||
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
||||||
* And each method takes these parameters:
|
* And each method takes these parameters:
|
||||||
@ -16,7 +16,7 @@ import { Path } from './types';
|
|||||||
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
||||||
* * `files`: (Optional) Used to create new resources and associate them with files.
|
* * `files`: (Optional) Used to create new resources and associate them with files.
|
||||||
*
|
*
|
||||||
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/references/rest_api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
||||||
*
|
*
|
||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
|
@ -2,14 +2,14 @@ import { ExportModule, ImportModule } from './types';
|
|||||||
/**
|
/**
|
||||||
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export)
|
||||||
*
|
*
|
||||||
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
||||||
* by the application during the import/export process.
|
* by the application during the import/export process.
|
||||||
*
|
*
|
||||||
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
||||||
*
|
*
|
||||||
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/
|
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/references/rest_api/
|
||||||
*/
|
*/
|
||||||
export default class JoplinInterop {
|
export default class JoplinInterop {
|
||||||
registerExportModule(module: ExportModule): Promise<void>;
|
registerExportModule(module: ExportModule): Promise<void>;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import Logger from 'lib/Logger';
|
import Logger from 'lib/Logger';
|
||||||
import { Script } from './types';
|
import { ContentScriptType, Script } from './types';
|
||||||
/**
|
/**
|
||||||
* This class provides access to plugin-related features.
|
* This class provides access to plugin-related features.
|
||||||
*/
|
*/
|
||||||
@ -21,4 +21,18 @@ export default class JoplinPlugins {
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
register(script: Script): Promise<void>;
|
register(script: Script): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Registers a new content script. Unlike regular plugin code, which runs in a separate process, content scripts run within the main process code
|
||||||
|
* and thus allow improved performances and more customisations in specific cases. It can be used for example to load a Markdown or editor plugin.
|
||||||
|
*
|
||||||
|
* Note that registering a content script in itself will do nothing - it will only be loaded in specific cases by the relevant app modules
|
||||||
|
* (eg. the Markdown renderer or the code editor). So it is not a way to inject and run arbitrary code in the app, which for safety and performance reasons is not supported.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/content_script)
|
||||||
|
*
|
||||||
|
* @param type Defines how the script will be used. See the type definition for more information about each supported type.
|
||||||
|
* @param id A unique ID for the content script.
|
||||||
|
* @param scriptPath Must be a path relative to the plugin main script. For example, if your file content_script.js is next to your index.ts file, you would set `scriptPath` to `"./content_script.js`.
|
||||||
|
*/
|
||||||
|
registerContentScript(type: ContentScriptType, id: string, scriptPath: string): Promise<void>;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import { SettingItem, SettingSection } from './types';
|
|||||||
*
|
*
|
||||||
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/settings)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/settings)
|
||||||
*/
|
*/
|
||||||
export default class JoplinSettings {
|
export default class JoplinSettings {
|
||||||
private plugin_;
|
private plugin_;
|
||||||
@ -32,4 +32,12 @@ export default class JoplinSettings {
|
|||||||
* Sets a setting value (only applies to setting you registered from your plugin)
|
* Sets a setting value (only applies to setting you registered from your plugin)
|
||||||
*/
|
*/
|
||||||
setValue(key: string, value: any): Promise<void>;
|
setValue(key: string, value: any): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Gets a global setting value, including app-specific settings and those set by other plugins.
|
||||||
|
*
|
||||||
|
* The list of available settings is not documented yet, but can be found by looking at the source code:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/3539a452a359162c461d2849829d2d42973eab50/ReactNativeClient/lib/models/Setting.ts#L142
|
||||||
|
*/
|
||||||
|
globalValue(key: string): Promise<any>;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
||||||
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
||||||
|
import JoplinViewsMenus from './JoplinViewsMenus';
|
||||||
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
||||||
import JoplinViewsPanels from './JoplinViewsPanels';
|
import JoplinViewsPanels from './JoplinViewsPanels';
|
||||||
/**
|
/**
|
||||||
@ -15,10 +16,13 @@ export default class JoplinViews {
|
|||||||
private dialogs_;
|
private dialogs_;
|
||||||
private panels_;
|
private panels_;
|
||||||
private menuItems_;
|
private menuItems_;
|
||||||
|
private menus_;
|
||||||
private toolbarButtons_;
|
private toolbarButtons_;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
get dialogs(): JoplinViewsDialogs;
|
get dialogs(): JoplinViewsDialogs;
|
||||||
get panels(): JoplinViewsPanels;
|
get panels(): JoplinViewsPanels;
|
||||||
get menuItems(): JoplinViewsMenuItems;
|
get menuItems(): JoplinViewsMenuItems;
|
||||||
|
get menus(): JoplinViewsMenus;
|
||||||
get toolbarButtons(): JoplinViewsToolbarButtons;
|
get toolbarButtons(): JoplinViewsToolbarButtons;
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,22 @@ import { ButtonSpec, ViewHandle, ButtonId } from './types';
|
|||||||
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
||||||
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/dialog)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/dialog)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsDialogs {
|
export default class JoplinViewsDialogs {
|
||||||
private store;
|
private store;
|
||||||
private plugin;
|
private plugin;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
private controller;
|
private controller;
|
||||||
/**
|
/**
|
||||||
* Creates a new dialog
|
* Creates a new dialog
|
||||||
*/
|
*/
|
||||||
create(): Promise<ViewHandle>;
|
create(): Promise<ViewHandle>;
|
||||||
|
/**
|
||||||
|
* Displays a message box with OK/Cancel buttons. Returns the button index that was clicked - "0" for OK and "1" for "Cancel"
|
||||||
|
*/
|
||||||
|
showMessageBox(message: string): Promise<number>;
|
||||||
/**
|
/**
|
||||||
* Sets the dialog HTML content
|
* Sets the dialog HTML content
|
||||||
*/
|
*/
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing menu items.
|
* Allows creating and managing menu items.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsMenuItems {
|
export default class JoplinViewsMenuItems {
|
||||||
private store;
|
private store;
|
||||||
|
18
CliClient/tests/support/plugins/selected_text/api/JoplinViewsMenus.d.ts
vendored
Normal file
18
CliClient/tests/support/plugins/selected_text/api/JoplinViewsMenus.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { MenuItem, MenuItemLocation } from './types';
|
||||||
|
import Plugin from '../Plugin';
|
||||||
|
/**
|
||||||
|
* Allows creating menus.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/menu)
|
||||||
|
*/
|
||||||
|
export default class JoplinViewsMenus {
|
||||||
|
private store;
|
||||||
|
private plugin;
|
||||||
|
constructor(plugin: Plugin, store: any);
|
||||||
|
private registerCommandAccelerators;
|
||||||
|
/**
|
||||||
|
* Creates a new menu from the provided menu items and place it at the given location. As of now, it is only possible to place the
|
||||||
|
* menu as a sub-menu of the application build-in menus.
|
||||||
|
*/
|
||||||
|
create(label: string, menuItems: MenuItem[], location?: MenuItemLocation): Promise<void>;
|
||||||
|
}
|
@ -4,7 +4,7 @@ import { ViewHandle } from './types';
|
|||||||
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
||||||
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/toc)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/toc)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsPanels {
|
export default class JoplinViewsPanels {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing toolbar buttons.
|
* Allows creating and managing toolbar buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsToolbarButtons {
|
export default class JoplinViewsToolbarButtons {
|
||||||
private store;
|
private store;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
||||||
* as various related events, such as when a new note is selected, or when the note content changes.
|
* as various related events, such as when a new note is selected, or when the note content changes.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins)
|
||||||
*/
|
*/
|
||||||
export default class JoplinWorkspace {
|
export default class JoplinWorkspace {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,12 +3,47 @@
|
|||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export interface Command {
|
export interface Command {
|
||||||
|
/**
|
||||||
|
* Name of command - must be globally unique
|
||||||
|
*/
|
||||||
name: string
|
name: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label to be displayed on menu items or keyboard shortcut editor for example
|
||||||
|
*/
|
||||||
label: string
|
label: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icon to be used on toolbar buttons for example
|
||||||
|
*/
|
||||||
iconName?: string,
|
iconName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code to be ran when the command is executed. It maybe return a result.
|
||||||
|
*/
|
||||||
execute(props:any):Promise<any>
|
execute(props:any):Promise<any>
|
||||||
isEnabled?(props:any):boolean
|
|
||||||
mapStateToProps?(state:any):any
|
/**
|
||||||
|
* Defines whether the command should be enabled or disabled, which in turns affects
|
||||||
|
* the enabled state of any associated button or menu item.
|
||||||
|
*
|
||||||
|
* The condition should be expressed as a "when-clause" (as in Visual Studio Code). It's a simple boolean expression that evaluates to
|
||||||
|
* `true` or `false`. It supports the following operators:
|
||||||
|
*
|
||||||
|
* Operator | Symbol | Example
|
||||||
|
* -- | -- | --
|
||||||
|
* Equality | == | "editorType == markdown"
|
||||||
|
* Inequality | != | "currentScreen != config"
|
||||||
|
* Or | \|\| | "noteIsTodo \|\| noteTodoCompleted"
|
||||||
|
* And | && | "oneNoteSelected && !inConflictFolder"
|
||||||
|
*
|
||||||
|
* Currently the supported context variables aren't documented, but you can find the list there:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts
|
||||||
|
*
|
||||||
|
* Note: Commands are enabled by default unless you use this property.
|
||||||
|
*/
|
||||||
|
enabledCondition?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
@ -26,7 +61,7 @@ export enum ImportModuleOutputFormat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export) for an example.
|
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export) for an example.
|
||||||
*
|
*
|
||||||
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
||||||
*
|
*
|
||||||
@ -154,17 +189,9 @@ export interface Script {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
// View API types
|
// Menu types
|
||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export type ButtonId = string;
|
|
||||||
|
|
||||||
export interface ButtonSpec {
|
|
||||||
id: ButtonId,
|
|
||||||
title?: string,
|
|
||||||
onClick?():void,
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CreateMenuItemOptions {
|
export interface CreateMenuItemOptions {
|
||||||
accelerator: string,
|
accelerator: string,
|
||||||
}
|
}
|
||||||
@ -179,6 +206,41 @@ export enum MenuItemLocation {
|
|||||||
Context = 'context',
|
Context = 'context',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface MenuItem {
|
||||||
|
/**
|
||||||
|
* Command that should be associated with the menu item. All menu item should
|
||||||
|
* have a command associated with them unless they are a sub-menu.
|
||||||
|
*/
|
||||||
|
commandName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accelerator associated with the menu item
|
||||||
|
*/
|
||||||
|
accelerator?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu items that should appear below this menu item. Allows creating a menu tree.
|
||||||
|
*/
|
||||||
|
submenu?: MenuItem[],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu item label. If not specified, the command label will be used instead.
|
||||||
|
*/
|
||||||
|
label?: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// View API types
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export interface ButtonSpec {
|
||||||
|
id: ButtonId,
|
||||||
|
title?: string,
|
||||||
|
onClick?():void,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ButtonId = string;
|
||||||
|
|
||||||
export enum ToolbarButtonLocation {
|
export enum ToolbarButtonLocation {
|
||||||
/**
|
/**
|
||||||
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
||||||
@ -250,3 +312,54 @@ export interface SettingSection {
|
|||||||
* [2]: (Optional) Resource link.
|
* [2]: (Optional) Resource link.
|
||||||
*/
|
*/
|
||||||
export type Path = string[];
|
export type Path = string[];
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// Plugins type
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export enum ContentScriptType {
|
||||||
|
/**
|
||||||
|
* Registers a new Markdown-It plugin, which should follow this template:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* // The module should export an object as below:
|
||||||
|
*
|
||||||
|
* module.exports = {
|
||||||
|
*
|
||||||
|
* // The "context" variable is currently unused but could be used later on to provide
|
||||||
|
* // access to your own plugin so that the content script and plugin can communicate.
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
*
|
||||||
|
* // This is the actual Markdown-It plugin - check the [official doc](https://github.com/markdown-it/markdown-it) for more information
|
||||||
|
* // The `options` parameter is of type [RuleOptions](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts), which
|
||||||
|
* // contains a number of options, mostly useful for Joplin's internal code.
|
||||||
|
* plugin: function(markdownIt, options) {
|
||||||
|
* // ...
|
||||||
|
* },
|
||||||
|
*
|
||||||
|
* // You may also specify additional assets such as JS or CSS that should be loaded in the rendered HTML document.
|
||||||
|
* // Check for example the Joplin [Mermaid plugin](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts) to
|
||||||
|
* // see how the data should be structured.
|
||||||
|
* assets: {},
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To include a regular Markdown-It plugin, that doesn't make use of any Joplin-specific feature, you
|
||||||
|
* would simply create a file such as this:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* module.exports = {
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
* plugin: require('markdown-it-toc-done-right');
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
MarkdownItPlugin = 'markdownItPlugin',
|
||||||
|
CodeMirrorPlugin = 'codeMirrorPlugin',
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@ import { Command } from './types';
|
|||||||
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
||||||
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*
|
*
|
||||||
* ## Executing Joplin's internal commands
|
* ## Executing Joplin's internal commands
|
||||||
*
|
*
|
||||||
@ -27,10 +27,10 @@ export default class JoplinCommands {
|
|||||||
*
|
*
|
||||||
* // Create a new sub-notebook under the provided notebook
|
* // Create a new sub-notebook under the provided notebook
|
||||||
* // Note: internally, notebooks are called "folders".
|
* // Note: internally, notebooks are called "folders".
|
||||||
* await joplin.commands.execute('newFolder', { parent_id: "SOME_FOLDER_ID" });
|
* await joplin.commands.execute('newFolder', "SOME_FOLDER_ID");
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
execute(commandName: string, props?: any): Promise<any>;
|
execute(commandName: string, ...args: any[]): Promise<any>;
|
||||||
/**
|
/**
|
||||||
* <span class="platform-desktop">desktop</span> Registers a new command.
|
* <span class="platform-desktop">desktop</span> Registers a new command.
|
||||||
*
|
*
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { Path } from './types';
|
import { Path } from './types';
|
||||||
/**
|
/**
|
||||||
* This module provides access to the Joplin data API: https://joplinapp.org/api/
|
* This module provides access to the Joplin data API: https://joplinapp.org/api/references/rest_api/
|
||||||
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
||||||
* or to update them or delete them.
|
* or to update them or delete them.
|
||||||
*
|
*
|
||||||
* This is also what you would use to search notes, via the `search` endpoint.
|
* This is also what you would use to search notes, via the `search` endpoint.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/simple)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/simple)
|
||||||
*
|
*
|
||||||
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
||||||
* And each method takes these parameters:
|
* And each method takes these parameters:
|
||||||
@ -16,7 +16,7 @@ import { Path } from './types';
|
|||||||
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
||||||
* * `files`: (Optional) Used to create new resources and associate them with files.
|
* * `files`: (Optional) Used to create new resources and associate them with files.
|
||||||
*
|
*
|
||||||
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/references/rest_api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
||||||
*
|
*
|
||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
|
@ -2,14 +2,14 @@ import { ExportModule, ImportModule } from './types';
|
|||||||
/**
|
/**
|
||||||
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export)
|
||||||
*
|
*
|
||||||
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
||||||
* by the application during the import/export process.
|
* by the application during the import/export process.
|
||||||
*
|
*
|
||||||
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
||||||
*
|
*
|
||||||
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/
|
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/references/rest_api/
|
||||||
*/
|
*/
|
||||||
export default class JoplinInterop {
|
export default class JoplinInterop {
|
||||||
registerExportModule(module: ExportModule): Promise<void>;
|
registerExportModule(module: ExportModule): Promise<void>;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import Logger from 'lib/Logger';
|
import Logger from 'lib/Logger';
|
||||||
import { Script } from './types';
|
import { ContentScriptType, Script } from './types';
|
||||||
/**
|
/**
|
||||||
* This class provides access to plugin-related features.
|
* This class provides access to plugin-related features.
|
||||||
*/
|
*/
|
||||||
@ -21,4 +21,18 @@ export default class JoplinPlugins {
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
register(script: Script): Promise<void>;
|
register(script: Script): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Registers a new content script. Unlike regular plugin code, which runs in a separate process, content scripts run within the main process code
|
||||||
|
* and thus allow improved performances and more customisations in specific cases. It can be used for example to load a Markdown or editor plugin.
|
||||||
|
*
|
||||||
|
* Note that registering a content script in itself will do nothing - it will only be loaded in specific cases by the relevant app modules
|
||||||
|
* (eg. the Markdown renderer or the code editor). So it is not a way to inject and run arbitrary code in the app, which for safety and performance reasons is not supported.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/content_script)
|
||||||
|
*
|
||||||
|
* @param type Defines how the script will be used. See the type definition for more information about each supported type.
|
||||||
|
* @param id A unique ID for the content script.
|
||||||
|
* @param scriptPath Must be a path relative to the plugin main script. For example, if your file content_script.js is next to your index.ts file, you would set `scriptPath` to `"./content_script.js`.
|
||||||
|
*/
|
||||||
|
registerContentScript(type: ContentScriptType, id: string, scriptPath: string): Promise<void>;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import { SettingItem, SettingSection } from './types';
|
|||||||
*
|
*
|
||||||
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/settings)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/settings)
|
||||||
*/
|
*/
|
||||||
export default class JoplinSettings {
|
export default class JoplinSettings {
|
||||||
private plugin_;
|
private plugin_;
|
||||||
@ -32,4 +32,12 @@ export default class JoplinSettings {
|
|||||||
* Sets a setting value (only applies to setting you registered from your plugin)
|
* Sets a setting value (only applies to setting you registered from your plugin)
|
||||||
*/
|
*/
|
||||||
setValue(key: string, value: any): Promise<void>;
|
setValue(key: string, value: any): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Gets a global setting value, including app-specific settings and those set by other plugins.
|
||||||
|
*
|
||||||
|
* The list of available settings is not documented yet, but can be found by looking at the source code:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/3539a452a359162c461d2849829d2d42973eab50/ReactNativeClient/lib/models/Setting.ts#L142
|
||||||
|
*/
|
||||||
|
globalValue(key: string): Promise<any>;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
import JoplinViewsDialogs from './JoplinViewsDialogs';
|
||||||
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
import JoplinViewsMenuItems from './JoplinViewsMenuItems';
|
||||||
|
import JoplinViewsMenus from './JoplinViewsMenus';
|
||||||
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
import JoplinViewsToolbarButtons from './JoplinViewsToolbarButtons';
|
||||||
import JoplinViewsPanels from './JoplinViewsPanels';
|
import JoplinViewsPanels from './JoplinViewsPanels';
|
||||||
/**
|
/**
|
||||||
@ -15,10 +16,13 @@ export default class JoplinViews {
|
|||||||
private dialogs_;
|
private dialogs_;
|
||||||
private panels_;
|
private panels_;
|
||||||
private menuItems_;
|
private menuItems_;
|
||||||
|
private menus_;
|
||||||
private toolbarButtons_;
|
private toolbarButtons_;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
get dialogs(): JoplinViewsDialogs;
|
get dialogs(): JoplinViewsDialogs;
|
||||||
get panels(): JoplinViewsPanels;
|
get panels(): JoplinViewsPanels;
|
||||||
get menuItems(): JoplinViewsMenuItems;
|
get menuItems(): JoplinViewsMenuItems;
|
||||||
|
get menus(): JoplinViewsMenus;
|
||||||
get toolbarButtons(): JoplinViewsToolbarButtons;
|
get toolbarButtons(): JoplinViewsToolbarButtons;
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,22 @@ import { ButtonSpec, ViewHandle, ButtonId } from './types';
|
|||||||
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
* Dialogs are hidden by default and you need to call `open()` to open them. Once the user clicks on a button, the `open` call will return and provide the button ID that was
|
||||||
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
* clicked on. There is currently no "close" method since the dialog should be thought as a modal one and thus can only be closed by clicking on one of the buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/dialog)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/dialog)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsDialogs {
|
export default class JoplinViewsDialogs {
|
||||||
private store;
|
private store;
|
||||||
private plugin;
|
private plugin;
|
||||||
constructor(plugin: Plugin, store: any);
|
private implementation_;
|
||||||
|
constructor(implementation: any, plugin: Plugin, store: any);
|
||||||
private controller;
|
private controller;
|
||||||
/**
|
/**
|
||||||
* Creates a new dialog
|
* Creates a new dialog
|
||||||
*/
|
*/
|
||||||
create(): Promise<ViewHandle>;
|
create(): Promise<ViewHandle>;
|
||||||
|
/**
|
||||||
|
* Displays a message box with OK/Cancel buttons. Returns the button index that was clicked - "0" for OK and "1" for "Cancel"
|
||||||
|
*/
|
||||||
|
showMessageBox(message: string): Promise<number>;
|
||||||
/**
|
/**
|
||||||
* Sets the dialog HTML content
|
* Sets the dialog HTML content
|
||||||
*/
|
*/
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing menu items.
|
* Allows creating and managing menu items.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsMenuItems {
|
export default class JoplinViewsMenuItems {
|
||||||
private store;
|
private store;
|
||||||
|
18
CliClient/tests/support/plugins/settings/api/JoplinViewsMenus.d.ts
vendored
Normal file
18
CliClient/tests/support/plugins/settings/api/JoplinViewsMenus.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { MenuItem, MenuItemLocation } from './types';
|
||||||
|
import Plugin from '../Plugin';
|
||||||
|
/**
|
||||||
|
* Allows creating menus.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/menu)
|
||||||
|
*/
|
||||||
|
export default class JoplinViewsMenus {
|
||||||
|
private store;
|
||||||
|
private plugin;
|
||||||
|
constructor(plugin: Plugin, store: any);
|
||||||
|
private registerCommandAccelerators;
|
||||||
|
/**
|
||||||
|
* Creates a new menu from the provided menu items and place it at the given location. As of now, it is only possible to place the
|
||||||
|
* menu as a sub-menu of the application build-in menus.
|
||||||
|
*/
|
||||||
|
create(label: string, menuItems: MenuItem[], location?: MenuItemLocation): Promise<void>;
|
||||||
|
}
|
@ -4,7 +4,7 @@ import { ViewHandle } from './types';
|
|||||||
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
* Allows creating and managing view panels. View panels currently are displayed at the right of the sidebar and allows displaying any HTML content (within a webview) and update it in real-time. For example
|
||||||
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
* it could be used to display a table of content for the active note, or display various metadata or graph.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/toc)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/toc)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsPanels {
|
export default class JoplinViewsPanels {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,7 +3,7 @@ import Plugin from '../Plugin';
|
|||||||
/**
|
/**
|
||||||
* Allows creating and managing toolbar buttons.
|
* Allows creating and managing toolbar buttons.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*/
|
*/
|
||||||
export default class JoplinViewsToolbarButtons {
|
export default class JoplinViewsToolbarButtons {
|
||||||
private store;
|
private store;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
* The workspace service provides access to all the parts of Joplin that are being worked on - i.e. the currently selected notes or notebooks as well
|
||||||
* as various related events, such as when a new note is selected, or when the note content changes.
|
* as various related events, such as when a new note is selected, or when the note content changes.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins)
|
||||||
*/
|
*/
|
||||||
export default class JoplinWorkspace {
|
export default class JoplinWorkspace {
|
||||||
private store;
|
private store;
|
||||||
|
@ -3,12 +3,47 @@
|
|||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export interface Command {
|
export interface Command {
|
||||||
|
/**
|
||||||
|
* Name of command - must be globally unique
|
||||||
|
*/
|
||||||
name: string
|
name: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Label to be displayed on menu items or keyboard shortcut editor for example
|
||||||
|
*/
|
||||||
label: string
|
label: string
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icon to be used on toolbar buttons for example
|
||||||
|
*/
|
||||||
iconName?: string,
|
iconName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code to be ran when the command is executed. It maybe return a result.
|
||||||
|
*/
|
||||||
execute(props:any):Promise<any>
|
execute(props:any):Promise<any>
|
||||||
isEnabled?(props:any):boolean
|
|
||||||
mapStateToProps?(state:any):any
|
/**
|
||||||
|
* Defines whether the command should be enabled or disabled, which in turns affects
|
||||||
|
* the enabled state of any associated button or menu item.
|
||||||
|
*
|
||||||
|
* The condition should be expressed as a "when-clause" (as in Visual Studio Code). It's a simple boolean expression that evaluates to
|
||||||
|
* `true` or `false`. It supports the following operators:
|
||||||
|
*
|
||||||
|
* Operator | Symbol | Example
|
||||||
|
* -- | -- | --
|
||||||
|
* Equality | == | "editorType == markdown"
|
||||||
|
* Inequality | != | "currentScreen != config"
|
||||||
|
* Or | \|\| | "noteIsTodo \|\| noteTodoCompleted"
|
||||||
|
* And | && | "oneNoteSelected && !inConflictFolder"
|
||||||
|
*
|
||||||
|
* Currently the supported context variables aren't documented, but you can find the list there:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/services/commands/stateToWhenClauseContext.ts
|
||||||
|
*
|
||||||
|
* Note: Commands are enabled by default unless you use this property.
|
||||||
|
*/
|
||||||
|
enabledCondition?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
@ -26,7 +61,7 @@ export enum ImportModuleOutputFormat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export) for an example.
|
* Used to implement a module to export data from Joplin. [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export) for an example.
|
||||||
*
|
*
|
||||||
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
* In general, all the event handlers you'll need to implement take a `context` object as a first argument. This object will contain the export or import path as well as various optional properties, such as which notes or notebooks need to be exported.
|
||||||
*
|
*
|
||||||
@ -154,17 +189,9 @@ export interface Script {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// =================================================================
|
// =================================================================
|
||||||
// View API types
|
// Menu types
|
||||||
// =================================================================
|
// =================================================================
|
||||||
|
|
||||||
export type ButtonId = string;
|
|
||||||
|
|
||||||
export interface ButtonSpec {
|
|
||||||
id: ButtonId,
|
|
||||||
title?: string,
|
|
||||||
onClick?():void,
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface CreateMenuItemOptions {
|
export interface CreateMenuItemOptions {
|
||||||
accelerator: string,
|
accelerator: string,
|
||||||
}
|
}
|
||||||
@ -179,6 +206,41 @@ export enum MenuItemLocation {
|
|||||||
Context = 'context',
|
Context = 'context',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface MenuItem {
|
||||||
|
/**
|
||||||
|
* Command that should be associated with the menu item. All menu item should
|
||||||
|
* have a command associated with them unless they are a sub-menu.
|
||||||
|
*/
|
||||||
|
commandName?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accelerator associated with the menu item
|
||||||
|
*/
|
||||||
|
accelerator?: string,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu items that should appear below this menu item. Allows creating a menu tree.
|
||||||
|
*/
|
||||||
|
submenu?: MenuItem[],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu item label. If not specified, the command label will be used instead.
|
||||||
|
*/
|
||||||
|
label?: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// View API types
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export interface ButtonSpec {
|
||||||
|
id: ButtonId,
|
||||||
|
title?: string,
|
||||||
|
onClick?():void,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ButtonId = string;
|
||||||
|
|
||||||
export enum ToolbarButtonLocation {
|
export enum ToolbarButtonLocation {
|
||||||
/**
|
/**
|
||||||
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
* This toolbar in the top right corner of the application. It applies to the note as a whole, including its metadata.
|
||||||
@ -250,3 +312,54 @@ export interface SettingSection {
|
|||||||
* [2]: (Optional) Resource link.
|
* [2]: (Optional) Resource link.
|
||||||
*/
|
*/
|
||||||
export type Path = string[];
|
export type Path = string[];
|
||||||
|
|
||||||
|
// =================================================================
|
||||||
|
// Plugins type
|
||||||
|
// =================================================================
|
||||||
|
|
||||||
|
export enum ContentScriptType {
|
||||||
|
/**
|
||||||
|
* Registers a new Markdown-It plugin, which should follow this template:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* // The module should export an object as below:
|
||||||
|
*
|
||||||
|
* module.exports = {
|
||||||
|
*
|
||||||
|
* // The "context" variable is currently unused but could be used later on to provide
|
||||||
|
* // access to your own plugin so that the content script and plugin can communicate.
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
*
|
||||||
|
* // This is the actual Markdown-It plugin - check the [official doc](https://github.com/markdown-it/markdown-it) for more information
|
||||||
|
* // The `options` parameter is of type [RuleOptions](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml.ts), which
|
||||||
|
* // contains a number of options, mostly useful for Joplin's internal code.
|
||||||
|
* plugin: function(markdownIt, options) {
|
||||||
|
* // ...
|
||||||
|
* },
|
||||||
|
*
|
||||||
|
* // You may also specify additional assets such as JS or CSS that should be loaded in the rendered HTML document.
|
||||||
|
* // Check for example the Joplin [Mermaid plugin](https://github.com/laurent22/joplin/blob/dev/ReactNativeClient/lib/joplin-renderer/MdToHtml/rules/mermaid.ts) to
|
||||||
|
* // see how the data should be structured.
|
||||||
|
* assets: {},
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* To include a regular Markdown-It plugin, that doesn't make use of any Joplin-specific feature, you
|
||||||
|
* would simply create a file such as this:
|
||||||
|
*
|
||||||
|
* ```javascript
|
||||||
|
* module.exports = {
|
||||||
|
* default: function(context) {
|
||||||
|
* return {
|
||||||
|
* plugin: require('markdown-it-toc-done-right');
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
MarkdownItPlugin = 'markdownItPlugin',
|
||||||
|
CodeMirrorPlugin = 'codeMirrorPlugin',
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@ import { Command } from './types';
|
|||||||
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
* This class allows executing or registering new Joplin commands. Commands can be executed or associated with
|
||||||
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
* {@link JoplinViewsToolbarButtons | toolbar buttons} or {@link JoplinViewsMenuItems | menu items}.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/register_command)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/register_command)
|
||||||
*
|
*
|
||||||
* ## Executing Joplin's internal commands
|
* ## Executing Joplin's internal commands
|
||||||
*
|
*
|
||||||
@ -27,10 +27,10 @@ export default class JoplinCommands {
|
|||||||
*
|
*
|
||||||
* // Create a new sub-notebook under the provided notebook
|
* // Create a new sub-notebook under the provided notebook
|
||||||
* // Note: internally, notebooks are called "folders".
|
* // Note: internally, notebooks are called "folders".
|
||||||
* await joplin.commands.execute('newFolder', { parent_id: "SOME_FOLDER_ID" });
|
* await joplin.commands.execute('newFolder', "SOME_FOLDER_ID");
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
execute(commandName: string, props?: any): Promise<any>;
|
execute(commandName: string, ...args: any[]): Promise<any>;
|
||||||
/**
|
/**
|
||||||
* <span class="platform-desktop">desktop</span> Registers a new command.
|
* <span class="platform-desktop">desktop</span> Registers a new command.
|
||||||
*
|
*
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { Path } from './types';
|
import { Path } from './types';
|
||||||
/**
|
/**
|
||||||
* This module provides access to the Joplin data API: https://joplinapp.org/api/
|
* This module provides access to the Joplin data API: https://joplinapp.org/api/references/rest_api/
|
||||||
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
* This is the main way to retrieve data, such as notes, notebooks, tags, etc.
|
||||||
* or to update them or delete them.
|
* or to update them or delete them.
|
||||||
*
|
*
|
||||||
* This is also what you would use to search notes, via the `search` endpoint.
|
* This is also what you would use to search notes, via the `search` endpoint.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/simple)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/simple)
|
||||||
*
|
*
|
||||||
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
* In general you would use the methods in this class as if you were using a REST API. There are four methods that map to GET, POST, PUT and DELETE calls.
|
||||||
* And each method takes these parameters:
|
* And each method takes these parameters:
|
||||||
@ -16,7 +16,7 @@ import { Path } from './types';
|
|||||||
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
* * `data`: (Optional) Applies to PUT and POST calls only. The request body contains the data you want to create or modify, for example the content of a note or folder.
|
||||||
* * `files`: (Optional) Used to create new resources and associate them with files.
|
* * `files`: (Optional) Used to create new resources and associate them with files.
|
||||||
*
|
*
|
||||||
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
* Please refer to the [Joplin API documentation](https://joplinapp.org/api/references/rest_api/) for complete details about each call. As the plugin runs within the Joplin application **you do not need an authorisation token** to use this API.
|
||||||
*
|
*
|
||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
|
@ -2,14 +2,14 @@ import { ExportModule, ImportModule } from './types';
|
|||||||
/**
|
/**
|
||||||
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
* Provides a way to create modules to import external data into Joplin or to export notes into any arbitrary format.
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/json_export)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/json_export)
|
||||||
*
|
*
|
||||||
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
* To implement an import or export module, you would simply define an object with various event handlers that are called
|
||||||
* by the application during the import/export process.
|
* by the application during the import/export process.
|
||||||
*
|
*
|
||||||
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
* See the documentation of the [[ExportModule]] and [[ImportModule]] for more information.
|
||||||
*
|
*
|
||||||
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/
|
* You may also want to refer to the Joplin API documentation to see the list of properties for each item (note, notebook, etc.) - https://joplinapp.org/api/references/rest_api/
|
||||||
*/
|
*/
|
||||||
export default class JoplinInterop {
|
export default class JoplinInterop {
|
||||||
registerExportModule(module: ExportModule): Promise<void>;
|
registerExportModule(module: ExportModule): Promise<void>;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Plugin from '../Plugin';
|
import Plugin from '../Plugin';
|
||||||
import Logger from 'lib/Logger';
|
import Logger from 'lib/Logger';
|
||||||
import { Script } from './types';
|
import { ContentScriptType, Script } from './types';
|
||||||
/**
|
/**
|
||||||
* This class provides access to plugin-related features.
|
* This class provides access to plugin-related features.
|
||||||
*/
|
*/
|
||||||
@ -21,4 +21,18 @@ export default class JoplinPlugins {
|
|||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
register(script: Script): Promise<void>;
|
register(script: Script): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Registers a new content script. Unlike regular plugin code, which runs in a separate process, content scripts run within the main process code
|
||||||
|
* and thus allow improved performances and more customisations in specific cases. It can be used for example to load a Markdown or editor plugin.
|
||||||
|
*
|
||||||
|
* Note that registering a content script in itself will do nothing - it will only be loaded in specific cases by the relevant app modules
|
||||||
|
* (eg. the Markdown renderer or the code editor). So it is not a way to inject and run arbitrary code in the app, which for safety and performance reasons is not supported.
|
||||||
|
*
|
||||||
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/content_script)
|
||||||
|
*
|
||||||
|
* @param type Defines how the script will be used. See the type definition for more information about each supported type.
|
||||||
|
* @param id A unique ID for the content script.
|
||||||
|
* @param scriptPath Must be a path relative to the plugin main script. For example, if your file content_script.js is next to your index.ts file, you would set `scriptPath` to `"./content_script.js`.
|
||||||
|
*/
|
||||||
|
registerContentScript(type: ContentScriptType, id: string, scriptPath: string): Promise<void>;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import { SettingItem, SettingSection } from './types';
|
|||||||
*
|
*
|
||||||
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
* Note: Currently this API does **not** provide access to Joplin's built-in settings. This is by design as plugins that modify user settings could give unexpected results
|
||||||
*
|
*
|
||||||
* [View the demo plugin](https://github.com/laurent22/joplin/CliClient/tests/support/plugins/settings)
|
* [View the demo plugin](https://github.com/laurent22/joplin/tree/dev/CliClient/tests/support/plugins/settings)
|
||||||
*/
|
*/
|
||||||
export default class JoplinSettings {
|
export default class JoplinSettings {
|
||||||
private plugin_;
|
private plugin_;
|
||||||
@ -32,4 +32,12 @@ export default class JoplinSettings {
|
|||||||
* Sets a setting value (only applies to setting you registered from your plugin)
|
* Sets a setting value (only applies to setting you registered from your plugin)
|
||||||
*/
|
*/
|
||||||
setValue(key: string, value: any): Promise<void>;
|
setValue(key: string, value: any): Promise<void>;
|
||||||
|
/**
|
||||||
|
* Gets a global setting value, including app-specific settings and those set by other plugins.
|
||||||
|
*
|
||||||
|
* The list of available settings is not documented yet, but can be found by looking at the source code:
|
||||||
|
*
|
||||||
|
* https://github.com/laurent22/joplin/blob/3539a452a359162c461d2849829d2d42973eab50/ReactNativeClient/lib/models/Setting.ts#L142
|
||||||
|
*/
|
||||||
|
globalValue(key: string): Promise<any>;
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user