// 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, 'Loaded!', ); let noteId; // The note ID is exposed in the DOM so tests can wait for the first update. await editors.onUpdate(viewHandle, async event => { noteId = event.noteId; await editors.setHtml( viewHandle, `Loaded!${noteId}`, ); }); saveCallbacks.push(async () => { if (!noteId) throw new Error('saveNote called before the first onUpdate event'); await 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) { await saveCallback(); } }, }); }; joplin.plugins.register({ onStart: async function() { await registerEditorPlugin('test-editor-plugin'); }, });