From b59247df6138320dd7a596b6899fc89a54947fd8 Mon Sep 17 00:00:00 2001 From: gnuxie Date: Fri, 10 Feb 2023 17:10:17 +0000 Subject: [PATCH] Allow fragments to be used in DeadDocument. They work like React.Fragment except we don't have components yet so it has to be a special node. --- src/commands/interface-manager/DeadDocument.ts | 1 + src/commands/interface-manager/DeadDocumentHtml.ts | 3 +++ src/commands/interface-manager/DeadDocumentMarkdown.ts | 3 +++ src/commands/interface-manager/JSXFactory.ts | 7 ++++++- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/commands/interface-manager/DeadDocument.ts b/src/commands/interface-manager/DeadDocument.ts index 16d6b51b..06c5540a 100644 --- a/src/commands/interface-manager/DeadDocument.ts +++ b/src/commands/interface-manager/DeadDocument.ts @@ -63,6 +63,7 @@ export enum NodeTag { BoldFace = 'b', ItalicFace = 'i', Anchor = 'a', + Fragment = 'fragment', } /** diff --git a/src/commands/interface-manager/DeadDocumentHtml.ts b/src/commands/interface-manager/DeadDocumentHtml.ts index fc6fa0c9..1d0283c1 100644 --- a/src/commands/interface-manager/DeadDocumentHtml.ts +++ b/src/commands/interface-manager/DeadDocumentHtml.ts @@ -62,4 +62,7 @@ HTML_RENDERER.registerRenderer') }, staticString('') +).registerInnerNode(NodeTag.Fragment, + blank, + blank ); diff --git a/src/commands/interface-manager/DeadDocumentMarkdown.ts b/src/commands/interface-manager/DeadDocumentMarkdown.ts index 173106aa..d6473702 100644 --- a/src/commands/interface-manager/DeadDocumentMarkdown.ts +++ b/src/commands/interface-manager/DeadDocumentMarkdown.ts @@ -132,4 +132,7 @@ MARKDOWN_RENDERER.registerRenderer(NodeTag.TextNode, node, (rawChild as number).toString()); } else if (Array.isArray(rawChild)) { rawChild.forEach(ensureChild); + // Then it's a DocumentNode|LeafNode } else if (typeof rawChild.leafNode === 'boolean') { - node.addChild(rawChild); + if (rawChild.tag === NodeTag.Fragment) { + (rawChild as DocumentNode).getChildren().forEach(node.addChild, node); + } else { + node.addChild(rawChild); + } } else { const presentationType = presentationTypeOf(rawChild); if (presentationType !== undefined) {