1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-11-29 22:48:10 +02:00

Desktop: Resolves #11687: Plugins: Allow editor plugins to support multiple windows (#12041)

This commit is contained in:
Henry Heino
2025-06-06 02:00:47 -07:00
committed by GitHub
parent 291ba88224
commit 608dbab453
46 changed files with 1022 additions and 195 deletions

View File

@@ -0,0 +1,66 @@
// Allows referencing the Joplin global:
/* eslint-disable no-undef */
// Allows the `joplin-manifest` block comment:
/* eslint-disable multiline-comment-style */
/* joplin-manifest:
{
"id": "org.joplinapp.plugins.example.editorPlugin",
"manifest_version": 1,
"app_min_version": "3.1",
"name": "JS Bundle test",
"description": "JS Bundle Test plugin",
"version": "1.0.0",
"author": "",
"homepage_url": "https://joplinapp.org"
}
*/
const registerEditorPlugin = async (editorViewId) => {
const editors = joplin.views.editors;
const saveCallbacks = [];
await editors.register(editorViewId, {
onSetup: async (viewHandle) => {
await editors.setHtml(
viewHandle,
'<code>Loaded!</code>',
);
let noteId;
await editors.onUpdate(viewHandle, event => {
noteId = event.noteId;
});
saveCallbacks.push(() => {
void editors.saveNote(viewHandle, {
noteId,
body: `Changed by ${editorViewId}`,
});
});
},
onActivationCheck: async _event => {
// Always enable
return true;
},
});
await joplin.commands.register({
name: `testEditorPluginSave-${editorViewId}`,
label: `Test editor plugin save for ${editorViewId}`,
iconName: 'fas fa-music',
execute: async () => {
for (const saveCallback of saveCallbacks) {
saveCallback();
}
},
});
};
joplin.plugins.register({
onStart: async function() {
await registerEditorPlugin('test-editor-plugin');
},
});

View File

@@ -0,0 +1,46 @@
// Allows referencing the Joplin global:
/* eslint-disable no-undef */
// Allows the `joplin-manifest` block comment:
/* eslint-disable multiline-comment-style */
/* joplin-manifest:
{
"id": "org.joplinapp.plugins.example.editorPlugin",
"manifest_version": 1,
"app_min_version": "3.1",
"name": "JS Bundle test",
"description": "JS Bundle Test plugin",
"version": "1.0.0",
"author": "",
"homepage_url": "https://joplinapp.org"
}
*/
const registerEditorPlugin = async (editorViewId) => {
const editors = joplin.views.editors;
await editors.register(editorViewId, {
async onSetup(view) {
await editors.setHtml(
view,
`<div id="frame-summary">
Editor plugin:
<code id="view-id-base">${editorViewId}</code>
for view handle: <code>${encodeURI(view)}</code>
</div>`,
);
},
async onActivationCheck(_event) {
// Always enable
return true;
},
});
};
joplin.plugins.register({
onStart: async function() {
// Register two different editor plugins:
await registerEditorPlugin('test-editor-plugin-1');
await registerEditorPlugin('test-editor-plugin-2');
},
});