]> BookStack Code Mirror - bookstack/blob - resources/js/markdown/index.mts
MD Editor: Updated actions to use 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 {CodeModule} from "../global";
8 import {MarkdownEditorInput} from "./inputs/interface";
9 import {CodemirrorInput} from "./inputs/codemirror";
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     input: MarkdownEditorInput;
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
45     const codeMirror = initCodemirror(editor, Code);
46     editor.input = new CodemirrorInput(codeMirror);
47
48     listenToCommonEvents(editor);
49
50     return editor;
51 }
52
53