]> BookStack Code Mirror - bookstack/blob - resources/js/markdown/index.mts
MD Editor: Started work on input interface
[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 {EditorView} from "@codemirror/view";
8 import {importVersioned} from "../services/util";
9 import {CodeModule} from "../global";
10
11 export interface MarkdownEditorConfig {
12     pageId: string;
13     container: Element;
14     displayEl: HTMLIFrameElement;
15     inputEl: HTMLTextAreaElement;
16     drawioUrl: string;
17     settingInputs: HTMLInputElement[];
18     text: Record<string, string>;
19 }
20
21 export interface MarkdownEditor {
22     config: MarkdownEditorConfig;
23     display: Display;
24     markdown: Markdown;
25     actions: Actions;
26     cm: EditorView;
27     settings: Settings;
28 }
29
30 /**
31  * Initiate a new Markdown editor instance.
32  */
33 export async function init(config: MarkdownEditorConfig): Promise<MarkdownEditor> {
34     const Code = await window.importVersioned('code') as CodeModule;
35
36     const editor: MarkdownEditor = {
37         config,
38         markdown: new Markdown(),
39         settings: new Settings(config.settingInputs),
40     } as MarkdownEditor;
41
42     editor.actions = new Actions(editor);
43     editor.display = new Display(editor);
44     editor.cm = initCodemirror(editor, Code);
45
46     listenToCommonEvents(editor);
47
48     return editor;
49 }
50
51