Skip to content

Commit 23c68ac

Browse files
authored
feat(YfmTable): support for ignoring splitters in table content (#800)
1 parent 38a9ec0 commit 23c68ac

File tree

6 files changed

+64
-13
lines changed

6 files changed

+64
-13
lines changed

demo/components/Playground.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,11 @@ export const Playground = memo<PlaygroundProps>((props) => {
156156
linkifyTlds={md.linkifyTlds}
157157
breaks={md.breaks}
158158
needToSanitizeHtml={sanitizeHtml}
159-
plugins={getPlugins({directiveSyntax})}
159+
plugins={getPlugins({
160+
directiveSyntax,
161+
table_ignoreSplittersInBlockMath: true,
162+
table_ignoreSplittersInInlineMath: true,
163+
})}
160164
disableMarkdownItAttrs={disableMarkdownItAttrs}
161165
htmlRuntimeConfig={{disabledModes: disabledHTMLBlockModes}}
162166
/>
@@ -215,6 +219,12 @@ export const Playground = memo<PlaygroundProps>((props) => {
215219
imgSize: {
216220
parseInsertedUrlAsImage,
217221
},
222+
yfmTable: {
223+
table_ignoreSplittersInBlockCode: true,
224+
table_ignoreSplittersInBlockMath: true,
225+
table_ignoreSplittersInInlineCode: true,
226+
table_ignoreSplittersInInlineMath: true,
227+
},
218228
...wysiwygConfig?.extensionOptions,
219229
},
220230
},

demo/defaults/md-plugins.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import monospace from '@diplodoc/transform/lib/plugins/monospace';
1616
import notes from '@diplodoc/transform/lib/plugins/notes';
1717
import sup from '@diplodoc/transform/lib/plugins/sup';
1818
import yfmTable from '@diplodoc/transform/lib/plugins/table';
19+
import type {YfmTablePluginOptions} from '@diplodoc/transform/lib/plugins/table/types';
1920
import video from '@diplodoc/transform/lib/plugins/video';
2021
import type {PluginWithParams} from 'markdown-it/lib';
2122

@@ -33,10 +34,14 @@ export const YFM_HTML_BLOCK_RUNTIME = 'extension:yfm-html-block';
3334

3435
type GetPluginsOptions = {
3536
directiveSyntax?: RenderPreviewParams['directiveSyntax'];
36-
};
37+
} & Pick<
38+
YfmTablePluginOptions,
39+
'table_ignoreSplittersInBlockMath' | 'table_ignoreSplittersInInlineMath'
40+
>;
3741

3842
export function getPlugins({
3943
directiveSyntax,
44+
...options
4045
}: GetPluginsOptions = {}): markdownit.PluginWithParams[] {
4146
const defaultPlugins: PluginWithParams[] = [
4247
anchors,
@@ -67,7 +72,14 @@ export function getPlugins({
6772
},
6873
}),
6974
video,
70-
yfmTable,
75+
(md, opts) =>
76+
yfmTable(md, {
77+
...opts,
78+
table_ignoreSplittersInBlockCode: true,
79+
table_ignoreSplittersInInlineCode: true,
80+
table_ignoreSplittersInBlockMath: options.table_ignoreSplittersInBlockMath,
81+
table_ignoreSplittersInInlineMath: options.table_ignoreSplittersInInlineMath,
82+
}),
7183
];
7284
const extendedPlugins = defaultPlugins.concat(
7385
(md) => md.use(emoji, {defs: emojiDefs}),

package-lock.json

Lines changed: 6 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@
228228
"@diplodoc/mermaid-extension": "1.2.1",
229229
"@diplodoc/quote-link-extension": "0.1.3",
230230
"@diplodoc/tabs-extension": "^3.5.1",
231-
"@diplodoc/transform": "^4.57.2",
231+
"@diplodoc/transform": "^4.58.0",
232232
"@gravity-ui/components": "4.2.2",
233233
"@gravity-ui/eslint-config": "3.3.0",
234234
"@gravity-ui/gulp-utils": "1.0.3",

src/extensions/yfm/YfmNote/YfmNoteSpecs/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import {log} from '@diplodoc/transform/lib/log.js';
22
import yfmPlugin from '@diplodoc/transform/lib/plugins/notes/index.js';
33
import type {NodeSpec} from 'prosemirror-model';
44

5-
import type {ExtensionAuto} from '../../../../core';
5+
import {getConfig} from 'src/configure';
6+
import type {ExtensionAuto} from 'src/core';
67

78
import {NoteNode} from './const';
89
import {parserTokens} from './parser';
@@ -23,7 +24,7 @@ export const YfmNoteSpecs: ExtensionAuto<YfmNoteSpecsOptions> = (builder, opts)
2324
const schemaSpecs = getSchemaSpecs(opts, builder.context.get('placeholder'));
2425

2526
builder
26-
.configureMd((md) => md.use(yfmPlugin, {log}))
27+
.configureMd((md) => md.use(yfmPlugin, {log, lang: getConfig().lang || 'en'}))
2728
.addNode(NoteNode.Note, () => ({
2829
spec: schemaSpecs[NoteNode.Note],
2930
toMd: serializerTokens[NoteNode.Note],

src/extensions/yfm/YfmTable/YfmTableSpecs/index.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {log} from '@diplodoc/transform/lib/log.js';
22
import yfmTable from '@diplodoc/transform/lib/plugins/table/index.js';
3+
import type {YfmTablePluginOptions} from '@diplodoc/transform/lib/plugins/table/types.js';
34

45
import type {ExtensionWithOptions} from '../../../../core';
56

@@ -11,13 +12,39 @@ import {serializerTokens} from './serializer';
1112
export {YfmTableNode} from './const';
1213
export {yfmTableType, yfmTableBodyType, yfmTableRowType, yfmTableCellType} from './utils';
1314

14-
export type YfmTableSpecsOptions = YfmTableSchemaOptions & {};
15+
export type YfmTableSpecsOptions = YfmTableSchemaOptions &
16+
Pick<
17+
YfmTablePluginOptions,
18+
| 'table_ignoreSplittersInBlockCode'
19+
| 'table_ignoreSplittersInBlockMath'
20+
| 'table_ignoreSplittersInInlineCode'
21+
| 'table_ignoreSplittersInInlineMath'
22+
> & {};
1523

1624
export const YfmTableSpecs: ExtensionWithOptions<YfmTableSpecsOptions> = (builder, options) => {
1725
const schemaSpecs = getSchemaSpecs(options, builder.context.get('placeholder'));
1826

27+
/* eslint-disable camelcase */
28+
const {
29+
table_ignoreSplittersInBlockCode,
30+
table_ignoreSplittersInBlockMath,
31+
table_ignoreSplittersInInlineCode,
32+
table_ignoreSplittersInInlineMath,
33+
} = options;
34+
/* eslint-enable camelcase */
35+
1936
builder
20-
.configureMd((md) => md.use(yfmTable, {log}))
37+
.configureMd((md) =>
38+
md.use(yfmTable, {
39+
log,
40+
/* eslint-disable camelcase */
41+
table_ignoreSplittersInBlockCode,
42+
table_ignoreSplittersInBlockMath,
43+
table_ignoreSplittersInInlineCode,
44+
table_ignoreSplittersInInlineMath,
45+
/* eslint-enable camelcase */
46+
}),
47+
)
2148
.addNode(YfmTableNode.Table, () => ({
2249
spec: schemaSpecs[YfmTableNode.Table],
2350
toMd: serializerTokens[YfmTableNode.Table],

0 commit comments

Comments
 (0)