]> BookStack Code Mirror - bookstack/blob - resources/js/wysiwyg/lexical/table/LexicalCaptionNode.ts
08c6870e69fc184d11d7aac29fa05167053aa048
[bookstack] / resources / js / wysiwyg / lexical / table / LexicalCaptionNode.ts
1 import {
2     DOMConversionMap,
3     DOMExportOutput,
4     EditorConfig,
5     ElementNode,
6     LexicalEditor,
7     LexicalNode,
8     SerializedElementNode
9 } from "lexical";
10
11
12 export class CaptionNode extends ElementNode {
13     static getType(): string {
14         return 'caption';
15     }
16
17     static clone(node: CaptionNode): CaptionNode {
18         return new CaptionNode(node.__key);
19     }
20
21     createDOM(_config: EditorConfig, _editor: LexicalEditor): HTMLElement {
22         return document.createElement('caption');
23     }
24
25     updateDOM(_prevNode: unknown, _dom: HTMLElement, _config: EditorConfig): boolean {
26         return false;
27     }
28
29     isParentRequired(): true {
30         return true;
31     }
32
33     canBeEmpty(): boolean {
34         return false;
35     }
36
37     exportJSON(): SerializedElementNode {
38         return {
39             ...super.exportJSON(),
40             type: 'caption',
41             version: 1,
42         };
43     }
44
45     insertDOMIntoParent(nodeDOM: HTMLElement, parentDOM: HTMLElement): boolean {
46         parentDOM.insertBefore(nodeDOM, parentDOM.firstChild);
47         return true;
48     }
49
50     static importJSON(serializedNode: SerializedElementNode): CaptionNode {
51         return $createCaptionNode();
52     }
53
54     static importDOM(): DOMConversionMap | null {
55         return {
56             caption: (node: Node) => ({
57                 conversion(domNode: Node) {
58                     return {
59                         node: $createCaptionNode(),
60                     }
61                 },
62                 priority: 0,
63             }),
64         };
65     }
66 }
67
68 export function $createCaptionNode(): CaptionNode {
69     return new CaptionNode();
70 }
71
72 export function $isCaptionNode(node: LexicalNode | null | undefined): node is CaptionNode {
73     return node instanceof CaptionNode;
74 }