mirror of
https://github.com/laurent22/joplin.git
synced 2026-10-25 02:47:28 +00:00
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import { EditorState, Plugin, Transaction } from 'prosemirror-state';
|
|
import { OnEventCallback, OnLocalize } from '../../types';
|
|
import { OnCreateCodeEditor, RendererControl } from '../types';
|
|
import { focus } from '@joplin/lib/utils/focusHandler';
|
|
import createTextArea from '../utils/dom/createTextArea';
|
|
|
|
export interface EditorApi {
|
|
renderer: RendererControl;
|
|
onEvent: OnEventCallback;
|
|
createCodeEditor: OnCreateCodeEditor;
|
|
localize: OnLocalize;
|
|
}
|
|
|
|
|
|
export const getEditorApi = (state: EditorState) => {
|
|
return joplinEditorApiPlugin.getState(state);
|
|
};
|
|
|
|
export const setEditorApi = (transaction: Transaction, api: EditorApi) => {
|
|
return transaction.setMeta(joplinEditorApiPlugin, api);
|
|
};
|
|
|
|
// Stores the editor event handler callback in the editor state.
|
|
const joplinEditorApiPlugin = new Plugin<EditorApi>({
|
|
state: {
|
|
init: () => ({
|
|
onEvent: ()=>{},
|
|
renderer: {
|
|
renderHtmlToMarkup: () => {
|
|
throw new Error('Not initialized');
|
|
},
|
|
renderMarkupToHtml: () => {
|
|
throw new Error('Not initialized');
|
|
},
|
|
},
|
|
localize: input => input,
|
|
|
|
// A default implementation for testing environments
|
|
createCodeEditor: (parent, _language, onChange) => {
|
|
const editor = createTextArea({ label: 'Editor', initialContent: '', onChange });
|
|
parent.appendChild(editor.textArea);
|
|
|
|
return {
|
|
focus: () => focus('joplinEditorApiPlugin', editor.textArea),
|
|
remove: () => {
|
|
editor.textArea.remove();
|
|
},
|
|
updateBody: (newValue) => {
|
|
editor.textArea.value = newValue;
|
|
},
|
|
select: (anchor, head) => {
|
|
editor.textArea.setSelectionRange(Math.min(anchor, head), Math.max(anchor, head));
|
|
},
|
|
};
|
|
},
|
|
}),
|
|
apply: (tr, value) => {
|
|
const proposedValue = tr.getMeta(joplinEditorApiPlugin);
|
|
if (proposedValue) {
|
|
return proposedValue;
|
|
}
|
|
return value;
|
|
},
|
|
},
|
|
});
|
|
|
|
export default joplinEditorApiPlugin;
|