]> BookStack Code Mirror - bookstack/blob - resources/js/wysiwyg/ui/index.ts
Lexical: Added tracked container, added fullscreen action
[bookstack] / resources / js / wysiwyg / ui / index.ts
1 import {LexicalEditor} from "lexical";
2 import {getImageToolbarContent, getLinkToolbarContent, getMainEditorFullToolbar} from "./toolbars";
3 import {EditorUIManager} from "./framework/manager";
4 import {image as imageFormDefinition, link as linkFormDefinition, source as sourceFormDefinition} from "./defaults/form-definitions";
5 import {ImageDecorator} from "./decorators/image";
6 import {EditorUiContext} from "./framework/core";
7
8 export function buildEditorUI(container: HTMLElement, element: HTMLElement, editor: LexicalEditor) {
9     const manager = new EditorUIManager();
10     const context: EditorUiContext = {
11         editor,
12         containerDOM: container,
13         editorDOM: element,
14         manager,
15         translate: (text: string): string => text,
16         lastSelection: null,
17     };
18     manager.setContext(context);
19
20     // Create primary toolbar
21     manager.setToolbar(getMainEditorFullToolbar());
22
23     // Register modals
24     manager.registerModal('link', {
25         title: 'Insert/Edit link',
26         form: linkFormDefinition,
27     });
28     manager.registerModal('image', {
29         title: 'Insert/Edit Image',
30         form: imageFormDefinition
31     });
32     manager.registerModal('source', {
33         title: 'Source code',
34         form: sourceFormDefinition,
35     });
36
37     // Register context toolbars
38     manager.registerContextToolbar('image', {
39         selector: 'img',
40         content: getImageToolbarContent(),
41         displayTargetLocator(originalTarget: HTMLElement) {
42             return originalTarget.closest('a') || originalTarget;
43         }
44     });
45     manager.registerContextToolbar('link', {
46         selector: 'a',
47         content: getLinkToolbarContent(),
48     });
49
50     // Register image decorator listener
51     manager.registerDecoratorType('image', ImageDecorator);
52 }