Skip to content

Commit 5277645

Browse files
authored
fix(Mermaid): fixed serialization of mermaid block inside other blocks (#577)
1 parent 9c0a937 commit 5277645

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed
Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import {builders} from 'prosemirror-test-builder';
2+
import dd from 'ts-dedent';
23

34
import {createMarkupChecker} from '../../../../tests/sameMarkup';
45
import {ExtensionsManager} from '../../../core';
5-
import {BaseNode, BaseSchemaSpecs} from '../../specs';
6+
import {BaseNode, BaseSchemaSpecs, BlockquoteSpecs, blockquoteNodeName} from '../../specs';
67

78
import {MermaidSpecs} from './MermaidSpecs';
89
import {MermaidAttrs, mermaidNodeName} from './const';
@@ -12,17 +13,39 @@ const {
1213
markupParser: parser,
1314
serializer,
1415
} = new ExtensionsManager({
15-
extensions: (builder) => builder.use(BaseSchemaSpecs, {}).use(MermaidSpecs, {}),
16+
extensions: (builder) =>
17+
builder.use(BaseSchemaSpecs, {}).use(BlockquoteSpecs).use(MermaidSpecs, {}),
1618
}).buildDeps();
1719

18-
const {doc, mermaid} = builders<'doc' | 'mermaid'>(schema, {
20+
const {doc, mermaid, quote} = builders<'doc' | 'mermaid' | 'quote'>(schema, {
1921
doc: {nodeType: BaseNode.Doc},
2022
mermaid: {nodeType: mermaidNodeName},
23+
quote: {nodeType: blockquoteNodeName},
2124
});
2225

2326
const {same} = createMarkupChecker({parser, serializer});
2427

2528
describe('Mermaid extension', () => {
2629
it('should parse mermaid', () =>
2730
same('```mermaid\ncontent\n```\n', doc(mermaid({[MermaidAttrs.content]: 'content\n'}))));
31+
32+
it('should parse mermaid inside blockqoute', () => {
33+
const mermaidContent = dd`
34+
sequenceDiagram
35+
Alice->>Bob: Hi Bob
36+
Bob->>Alice: Hi Alice
37+
38+
`;
39+
40+
const markup = dd`
41+
> \`\`\`mermaid
42+
> sequenceDiagram
43+
> Alice->>Bob: Hi Bob
44+
> Bob->>Alice: Hi Alice
45+
> \`\`\`
46+
47+
`;
48+
49+
same(markup, doc(quote(mermaid({[MermaidAttrs.content]: mermaidContent}))));
50+
});
2851
});

src/extensions/additional/Mermaid/MermaidSpecs/index.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {transform} from '@diplodoc/mermaid-extension';
33

44
import type {ExtensionAuto, ExtensionNodeSpec} from '../../../../core';
55

6-
import {MermaidConsts, mermaidNodeName as mermaidNodeName} from './const';
6+
import {MermaidConsts, mermaidNodeName} from './const';
77
export {mermaidNodeName} from './const';
88

99
export type MermaidSpecsOptions = {
@@ -37,9 +37,11 @@ const MermaidSpecsExtension: ExtensionAuto<MermaidSpecsOptions> = (builder, {nod
3737
dnd: {props: {offset: [8, 1]}},
3838
},
3939
toMd: (state, node) => {
40-
state.write('```mermaid\n');
40+
const content: string = node.attrs[MermaidConsts.NodeAttrs.content] || '';
41+
42+
state.write('```mermaid');
4143
state.ensureNewLine();
42-
state.write(node.attrs.content);
44+
state.text(content.trim(), false);
4345
state.ensureNewLine();
4446
state.write('```');
4547
state.ensureNewLine();

0 commit comments

Comments
 (0)