1 import {EditorFormDefinition, EditorSelectFormFieldDefinition} from "../framework/forms";
2 import {EditorUiContext} from "../framework/core";
3 import {$createLinkNode} from "@lexical/link";
4 import {$createTextNode, $getSelection} from "lexical";
5 import {$createImageNode} from "../../nodes/image";
6 import {setEditorContentFromHtml} from "../../actions";
9 export const link: EditorFormDefinition = {
11 action(formData, context: EditorUiContext) {
12 context.editor.update(() => {
14 const selection = $getSelection();
16 const linkNode = $createLinkNode(formData.get('url')?.toString() || '', {
17 title: formData.get('title')?.toString() || '',
18 target: formData.get('target')?.toString() || '',
20 linkNode.append($createTextNode(formData.get('text')?.toString() || ''));
22 selection?.insertNodes([linkNode]);
33 label: 'Text to display',
43 label: 'Open link in...',
48 'New window': '_blank',
50 } as EditorSelectFormFieldDefinition,
54 export const image: EditorFormDefinition = {
56 action(formData, context: EditorUiContext) {
57 context.editor.update(() => {
58 const selection = $getSelection();
59 const imageNode = $createImageNode(formData.get('src')?.toString() || '', {
60 alt: formData.get('alt')?.toString() || '',
61 height: Number(formData.get('height')?.toString() || '0'),
62 width: Number(formData.get('width')?.toString() || '0'),
64 selection?.insertNodes([imageNode]);
75 label: 'Alternative description',
92 export const source: EditorFormDefinition = {
94 action(formData, context: EditorUiContext) {
95 setEditorContentFromHtml(context.editor, formData.get('source')?.toString() || '');