X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/5ffec2c52d6b6c1cf61e53813fe4bfbece3da1aa..HEAD:/resources/js/markdown/index.mts diff --git a/resources/js/markdown/index.mts b/resources/js/markdown/index.mts index 5385e27cc..0a6e974b7 100644 --- a/resources/js/markdown/index.mts +++ b/resources/js/markdown/index.mts @@ -4,9 +4,11 @@ import {Actions} from './actions'; import {Settings} from './settings'; import {listenToCommonEvents} from './common-events'; import {init as initCodemirror} from './codemirror'; -import {CodeModule} from "../global"; import {MarkdownEditorInput} from "./inputs/interface"; import {CodemirrorInput} from "./inputs/codemirror"; +import {TextareaInput} from "./inputs/textarea"; +import {provideShortcutMap} from "./shortcuts"; +import {getMarkdownDomEventHandlers} from "./dom-handlers"; export interface MarkdownEditorConfig { pageId: string; @@ -31,8 +33,6 @@ export interface MarkdownEditor { * Initiate a new Markdown editor instance. */ export async function init(config: MarkdownEditorConfig): Promise { - const Code = await window.importVersioned('code') as CodeModule; - const editor: MarkdownEditor = { config, markdown: new Markdown(), @@ -42,8 +42,26 @@ export async function init(config: MarkdownEditorConfig): Promise editor.actions.updateAndRender(); + + const initCodemirrorInput: () => Promise = async () => { + const codeMirror = await initCodemirror(config.inputEl, shortcuts, eventHandlers, onInputChange); + return new CodemirrorInput(codeMirror); + }; + const initTextAreaInput: () => Promise = async () => { + return new TextareaInput(config.inputEl, shortcuts, eventHandlers, onInputChange); + }; + + const isPlainEditor = Boolean(editor.settings.get('plainEditor')); + editor.input = await (isPlainEditor ? initTextAreaInput() : initCodemirrorInput()); + editor.settings.onChange('plainEditor', async (value) => { + const isPlain = Boolean(value); + const newInput = await (isPlain ? initTextAreaInput() : initCodemirrorInput()); + editor.input.teardown(); + editor.input = newInput; + }); listenToCommonEvents(editor);