DecoratorNode,
DOMConversion,
DOMConversionMap,
- DOMConversionOutput,
+ DOMConversionOutput, DOMExportOutput,
LexicalEditor, LexicalNode,
SerializedLexicalNode,
Spread
} from "lexical";
import type {EditorConfig} from "lexical/LexicalEditor";
-import {el} from "../helpers";
import {EditorDecoratorAdapter} from "../ui/framework/decorator";
-import {code} from "../ui/defaults/button-definitions";
+import {CodeEditor} from "../../components";
+import {el} from "../utils/dom";
export type SerializedCodeBlockNode = Spread<{
language: string;
}
static clone(node: CodeBlockNode): CodeBlockNode {
- return new CodeBlockNode(node.__language, node.__code);
+ const newNode = new CodeBlockNode(node.__language, node.__code, node.__key);
+ newNode.__id = node.__id;
+ return newNode;
}
constructor(language: string = '', code: string = '', key?: string) {
return false;
}
+ exportDOM(editor: LexicalEditor): DOMExportOutput {
+ const dom = this.createDOM(editor._config, editor);
+ return {
+ element: dom.querySelector('pre') as HTMLElement,
+ };
+ }
+
static importDOM(): DOMConversionMap|null {
return {
pre(node: HTMLElement): DOMConversion|null {
|| '';
const code = codeEl ? (codeEl.textContent || '').trim() : (element.textContent || '').trim();
+ const node = $createCodeBlockNode(language, code);
+
+ if (element.id) {
+ node.setId(element.id);
+ }
- return {
- node: $createCodeBlockNode(language, code),
- };
+ return { node };
},
priority: 3,
};
const language = node.getLanguage();
// @ts-ignore
- const codeEditor = window.$components.first('code-editor');
+ const codeEditor = window.$components.first('code-editor') as CodeEditor;
// TODO - Handle direction
codeEditor.open(code, language, 'ltr', (newCode: string, newLang: string) => {
editor.update(() => {