Skip to content
代码片段 群组 项目
未验证 提交 938b70cc 编辑于 作者: Enrique Alcántara's avatar Enrique Alcántara 提交者: GitLab
浏览文件

Merge branch 'himkp-reorg-markdown-serializer-3' into 'master'

Split markdown serializer for some nodes in separate files (iteration 2)

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/159706



Merged-by: default avatarEnrique Alcántara <ealcantara@gitlab.com>
Approved-by: default avatarEnrique Alcántara <ealcantara@gitlab.com>
Co-authored-by: default avatarHimanshu Kapoor <hkapoor@gitlab.com>
No related branches found
No related tags found
无相关合并请求
显示
138 个添加62 个删除
......@@ -28,14 +28,26 @@ import {
renderTableCell,
renderTableRow,
renderOrderedList,
renderHeading,
renderHTMLNode,
renderContent,
renderBulletList,
renderReference,
renderReferenceLabel,
preserveUnchanged,
} from './serialization_helpers';
import descriptionList from './serializer/description_list';
import descriptionItem from './serializer/description_item';
import details from './serializer/details';
import detailsContent from './serializer/details_content';
import emoji from './serializer/emoji';
import footnoteDefinition from './serializer/footnote_definition';
import footnoteReference from './serializer/footnote_reference';
import frontmatter from './serializer/frontmatter';
import figure from './serializer/figure';
import figureCaption from './serializer/figure_caption';
import heading from './serializer/heading';
import horizontalRule from './serializer/horizontal_rule';
import listItem from './serializer/list_item';
import loading from './serializer/loading';
const defaultSerializerConfig = {
marks: {
......@@ -66,61 +78,22 @@ const defaultSerializerConfig = {
[extensions.Diagram.name]: diagram,
[extensions.CodeSuggestion.name]: codeSuggestion,
[extensions.DrawioDiagram.name]: drawioDiagram,
[extensions.DescriptionList.name]: renderHTMLNode('dl', true),
[extensions.DescriptionItem.name]: (state, node, parent, index) => {
if (index === 1) state.ensureNewLine();
renderHTMLNode(node.attrs.isTerm ? 'dt' : 'dd')(state, node);
if (index === parent.childCount - 1) state.ensureNewLine();
},
[extensions.Details.name]: renderHTMLNode('details', true),
[extensions.DetailsContent.name]: (state, node, parent, index) => {
if (!index) renderHTMLNode('summary')(state, node);
else {
if (index === 1) state.ensureNewLine();
renderContent(state, node);
if (index === parent.childCount - 1) state.ensureNewLine();
}
},
[extensions.Emoji.name]: (state, node) => {
const { name } = node.attrs;
state.write(`:${name}:`);
},
[extensions.FootnoteDefinition.name]: preserveUnchanged((state, node) => {
state.write(`[^${node.attrs.identifier}]: `);
state.renderInline(node);
state.ensureNewLine();
}),
[extensions.FootnoteReference.name]: preserveUnchanged({
render: (state, node) => {
state.write(`[^${node.attrs.identifier}]`);
},
inline: true,
}),
[extensions.Frontmatter.name]: preserveUnchanged((state, node) => {
const { language } = node.attrs;
const syntax = {
toml: '+++',
json: ';;;',
yaml: '---',
}[language];
state.write(`${syntax}\n`);
state.text(node.textContent, false);
state.ensureNewLine();
state.write(syntax);
state.closeBlock(node);
}),
[extensions.Figure.name]: renderHTMLNode('figure'),
[extensions.FigureCaption.name]: renderHTMLNode('figcaption'),
[extensions.DescriptionList.name]: descriptionList,
[extensions.DescriptionItem.name]: descriptionItem,
[extensions.Details.name]: details,
[extensions.DetailsContent.name]: detailsContent,
[extensions.Emoji.name]: emoji,
[extensions.FootnoteDefinition.name]: footnoteDefinition,
[extensions.FootnoteReference.name]: footnoteReference,
[extensions.Frontmatter.name]: frontmatter,
[extensions.Figure.name]: figure,
[extensions.FigureCaption.name]: figureCaption,
[extensions.HardBreak.name]: preserveUnchanged(renderHardBreak),
[extensions.Heading.name]: preserveUnchanged(renderHeading),
[extensions.HorizontalRule.name]: preserveUnchanged(
defaultMarkdownSerializer.nodes.horizontal_rule,
),
[extensions.Heading.name]: heading,
[extensions.HorizontalRule.name]: horizontalRule,
[extensions.Image.name]: image,
[extensions.ListItem.name]: preserveUnchanged(defaultMarkdownSerializer.nodes.list_item),
[extensions.Loading.name]: () => {},
[extensions.ListItem.name]: listItem,
[extensions.Loading.name]: loading,
[extensions.OrderedList.name]: preserveUnchanged(renderOrderedList),
[extensions.Paragraph.name]: preserveUnchanged(defaultMarkdownSerializer.nodes.paragraph),
[extensions.HTMLComment.name]: (state, node) => {
......
import { uniq, omit, isFunction } from 'lodash';
import { defaultMarkdownSerializer } from '~/lib/prosemirror_markdown_serializer';
const defaultAttrs = {
td: { colspan: 1, rowspan: 1, colwidth: null, align: 'left' },
......@@ -337,12 +336,6 @@ export function renderHardBreak(state, node, parent, index) {
}
}
export function renderHeading(state, node) {
if (state.options.skipEmptyNodes && !node.childCount) return;
defaultMarkdownSerializer.nodes.heading(state, node);
}
const expandPreserveUnchangedConfig = (configOrRender) =>
isFunction(configOrRender)
? { render: configOrRender, overwriteSourcePreservationStrategy: false, inline: false }
......
import { renderHTMLNode } from '../serialization_helpers';
const descriptionItem = (state, node, parent, index) => {
if (index === 1) state.ensureNewLine();
renderHTMLNode(node.attrs.isTerm ? 'dt' : 'dd')(state, node);
if (index === parent.childCount - 1) state.ensureNewLine();
};
export default descriptionItem;
import { renderHTMLNode } from '../serialization_helpers';
const descriptionList = renderHTMLNode('dl', true);
export default descriptionList;
import { renderHTMLNode } from '../serialization_helpers';
const details = renderHTMLNode('details', true);
export default details;
import { renderContent, renderHTMLNode } from '../serialization_helpers';
const detailsContent = (state, node, parent, index) => {
if (!index) renderHTMLNode('summary')(state, node);
else {
if (index === 1) state.ensureNewLine();
renderContent(state, node);
if (index === parent.childCount - 1) state.ensureNewLine();
}
};
export default detailsContent;
const emoji = (state, node) => {
const { name } = node.attrs;
state.write(`:${name}:`);
};
export default emoji;
import { renderHTMLNode } from '../serialization_helpers';
const figure = renderHTMLNode('figure');
export default figure;
import { renderHTMLNode } from '../serialization_helpers';
const figureCaption = renderHTMLNode('figcaption');
export default figureCaption;
import { preserveUnchanged } from '../serialization_helpers';
const footnoteDefinition = preserveUnchanged((state, node) => {
state.write(`[^${node.attrs.identifier}]: `);
state.renderInline(node);
state.ensureNewLine();
});
export default footnoteDefinition;
import { preserveUnchanged } from '../serialization_helpers';
const footnoteReference = preserveUnchanged({
render: (state, node) => {
state.write(`[^${node.attrs.identifier}]`);
},
inline: true,
});
export default footnoteReference;
import { preserveUnchanged } from '../serialization_helpers';
const frontmatter = preserveUnchanged((state, node) => {
const { language } = node.attrs;
const syntax = {
toml: '+++',
json: ';;;',
yaml: '---',
}[language];
state.write(`${syntax}\n`);
state.text(node.textContent, false);
state.ensureNewLine();
state.write(syntax);
state.closeBlock(node);
});
export default frontmatter;
import { defaultMarkdownSerializer } from '~/lib/prosemirror_markdown_serializer';
import { preserveUnchanged } from '../serialization_helpers';
const heading = preserveUnchanged((state, node) => {
if (state.options.skipEmptyNodes && !node.childCount) return;
defaultMarkdownSerializer.nodes.heading(state, node);
});
export default heading;
import { defaultMarkdownSerializer } from '~/lib/prosemirror_markdown_serializer';
import { preserveUnchanged } from '../serialization_helpers';
const horizontalRule = preserveUnchanged(defaultMarkdownSerializer.nodes.horizontal_rule);
export default horizontalRule;
import { defaultMarkdownSerializer } from '~/lib/prosemirror_markdown_serializer';
import { preserveUnchanged } from '../serialization_helpers';
const listItem = preserveUnchanged(defaultMarkdownSerializer.nodes.list_item);
export default listItem;
const loading = () => {};
export default loading;
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册