]> BookStack Code Mirror - bookstack/blob - resources/js/markdown/index.mts
MD Editor: Added plaintext input implementation
[bookstack] / resources / js / markdown / index.mts
1 import {Markdown} from './markdown';
2 import {Display} from './display';
3 import {Actions} from './actions';
4 import {Settings} from './settings';
5 import {listenToCommonEvents} from './common-events';
6 import {init as initCodemirror} from './codemirror';
7 import {CodeModule} from "../global";
8 import {MarkdownEditorInput} from "./inputs/interface";
9 import {CodemirrorInput} from "./inputs/codemirror";
10 import {TextareaInput} from "./inputs/textarea";
11 import {provideShortcutMap} from "./shortcuts";
12 import {getMarkdownDomEventHandlers} from "./dom-handlers";
13
14 export interface MarkdownEditorConfig {
15     pageId: string;
16     container: Element;
17     displayEl: HTMLIFrameElement;
18     inputEl: HTMLTextAreaElement;
19     drawioUrl: string;
20     settingInputs: HTMLInputElement[];
21     text: Record<string, string>;
22 }
23
24 export interface MarkdownEditor {
25     config: MarkdownEditorConfig;
26     display: Display;
27     markdown: Markdown;
28     actions: Actions;
29     input: MarkdownEditorInput;
30     settings: Settings;
31 }
32
33 /**
34  * Initiate a new Markdown editor instance.
35  */
36 export async function init(config: MarkdownEditorConfig): Promise<MarkdownEditor> {
37     // const Code = await window.importVersioned('code') as CodeModule;
38
39     const editor: MarkdownEditor = {
40         config,
41         markdown: new Markdown(),
42         settings: new Settings(config.settingInputs),
43     } as MarkdownEditor;
44
45     editor.actions = new Actions(editor);
46     editor.display = new Display(editor);
47
48     const eventHandlers = getMarkdownDomEventHandlers(editor);
49     // TODO - Switching
50     // const codeMirror = initCodemirror(editor, Code);
51     // editor.input = new CodemirrorInput(codeMirror);
52     editor.input = new TextareaInput(
53         config.inputEl,
54         provideShortcutMap(editor),
55         eventHandlers
56     );
57
58     // window.devinput = editor.input;
59
60     listenToCommonEvents(editor);
61
62     return editor;
63 }
64
65