Skip to content

Commit

Permalink
fix: revert #2572 (fix #1806 #2708) (#2754)
Browse files Browse the repository at this point in the history
  • Loading branch information
kshnurov committed Feb 16, 2023
1 parent 24be1b2 commit 2f0cbb5
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 100 deletions.
39 changes: 1 addition & 38 deletions apps/editor/src/__test__/unit/convertor.spec.ts
Expand Up @@ -595,20 +595,7 @@ describe('Convertor', () => {
| ![altText](imgUrl) **mixed**<ul><li>[linkText](linkUrl) mixed</li></ul> |
`;

const expected = source`
| thead |
| ----- |
| <ul><li>bullet</li></ul> |
| <ol><li>ordered</li></ol> |
| <ul><li>nested<ul><li>nested</li></ul></li></ul> |
| <ul><li>nested<ul><li>nested</li><li>nested</li></ul></li></ul> |
| <ol><li>mix<strong>ed</strong><ul><li><strong>mix</strong>ed</li></ul></li></ol> |
| <ol><li>mix<i>ed</i><ul><li><strong>mix</strong>ed</li></ul></li></ol> |
| foo<ul><li>bar</li></ul>baz |
| ![altText](imgUrl) **mixed**<ul><li>[linkText](linkUrl) mixed</li></ul> |
`;

assertConverting(markdown, `${expected}\n`);
assertConverting(markdown, `${markdown}\n`);
});

it('table with unmatched html list', () => {
Expand Down Expand Up @@ -1075,30 +1062,6 @@ describe('Convertor', () => {
});
});

it('should convert by using HTML tag when delimiter is not preceded an alphanumeric', () => {
const wwNodeJson = {
type: 'doc',
content: [
{
type: 'paragraph',
content: [
{
type: 'text',
marks: [{ type: 'strong' }],
text: '"test"',
},
{ type: 'text', text: 'a' },
],
},
],
};
const wwNode = Node.fromJSON(schema, wwNodeJson);

const result = convertor.toMarkdownText(wwNode);

expect(result).toBe(`<strong>"test"</strong>a`);
});

it('should convert empty line between lists of wysiwig to <br>', () => {
const wwNodeJson = {
type: 'doc',
Expand Down
21 changes: 2 additions & 19 deletions apps/editor/src/convertors/toMarkdown/toMdConvertorState.ts
@@ -1,6 +1,6 @@
import { Node, Mark } from 'prosemirror-model';

import { includes, escape, last, isEndWithSpace, isStartWithSpace } from '@/utils/common';
import { includes, escape, last } from '@/utils/common';

import { WwNodeType, WwMarkType } from '@t/wysiwyg';
import {
Expand All @@ -10,7 +10,6 @@ import {
FirstDelimFn,
InfoForPosSync,
} from '@t/convertor';
import { DEFAULT_TEXT_NOT_START_OR_END_WITH_SPACE } from '@/utils/constants';

export default class ToMdConvertorState {
private readonly nodeTypeConvertors: ToMdNodeTypeConvertorMap;
Expand Down Expand Up @@ -50,27 +49,11 @@ export default class ToMdConvertorState {
return /(^|\n)$/.test(this.result);
}

private isBetweenSpaces(parent: Node, index: number) {
const { content } = parent;

const isFrontNodeEndWithSpace =
index === 0 ||
isEndWithSpace(content.child(index - 1).text ?? DEFAULT_TEXT_NOT_START_OR_END_WITH_SPACE);

const isRearNodeStartWithSpace =
index >= content.childCount - 1 ||
isStartWithSpace(content.child(index + 1).text ?? DEFAULT_TEXT_NOT_START_OR_END_WITH_SPACE);

return isFrontNodeEndWithSpace && isRearNodeStartWithSpace;
}

private markText(mark: Mark, entering: boolean, parent: Node, index: number) {
const convertor = this.getMarkConvertor(mark);

if (convertor) {
const betweenSpace = this.isBetweenSpaces(parent, entering ? index : index - 1);

const { delim, rawHTML } = convertor({ node: mark, parent, index }, entering, betweenSpace);
const { delim, rawHTML } = convertor({ node: mark, parent, index }, entering);

return (rawHTML as string) || (delim as string);
}
Expand Down
33 changes: 8 additions & 25 deletions apps/editor/src/convertors/toMarkdown/toMdConvertors.ts
Expand Up @@ -208,44 +208,29 @@ export const toMdConvertors: ToMdConvertorMap = {
};
},

strong({ node }, { entering }, betweenSpace) {
strong({ node }, { entering }) {
const { rawHTML } = node.attrs;
let delim = '**';

if (!betweenSpace) {
delim = entering ? '<strong>' : '</strong>';
}

return {
delim,
delim: '**',
rawHTML: entering ? getOpenRawHTML(rawHTML) : getCloseRawHTML(rawHTML),
};
},

emph({ node }, { entering }, betweenSpace) {
emph({ node }, { entering }) {
const { rawHTML } = node.attrs;
let delim = '*';

if (!betweenSpace) {
delim = entering ? '<em>' : '</em>';
}

return {
delim,
delim: '*',
rawHTML: entering ? getOpenRawHTML(rawHTML) : getCloseRawHTML(rawHTML),
};
},

strike({ node }, { entering }, betweenSpace) {
strike({ node }, { entering }) {
const { rawHTML } = node.attrs;
let delim = '~~';

if (!betweenSpace) {
delim = entering ? '<del>' : '</del>';
}

return {
delim,
delim: '~~',
rawHTML: entering ? getOpenRawHTML(rawHTML) : getCloseRawHTML(rawHTML),
};
},
Expand Down Expand Up @@ -368,7 +353,7 @@ function createMarkTypeConvertors(convertors: ToMdConvertorMap) {
const markTypes = Object.keys(markTypeOptions) as WwMarkType[];

markTypes.forEach((type) => {
markTypeConvertors[type] = (nodeInfo, entering, betweenSpace) => {
markTypeConvertors[type] = (nodeInfo, entering) => {
const markOption = markTypeOptions[type];
const convertor = convertors[type];

Expand All @@ -377,9 +362,7 @@ function createMarkTypeConvertors(convertors: ToMdConvertorMap) {
// When calling the converter without using `delim` and `rawHTML` values,
// the converter is called without parameters.
const runConvertor = convertor && nodeInfo && !isUndefined(entering);
const params = runConvertor
? convertor!(nodeInfo as MarkInfo, { entering }, betweenSpace)
: {};
const params = runConvertor ? convertor!(nodeInfo as MarkInfo, { entering }) : {};

return { ...params, ...markOption };
};
Expand Down
12 changes: 0 additions & 12 deletions apps/editor/src/utils/common.ts
Expand Up @@ -263,15 +263,3 @@ export function assign(targetObj: Record<string, any>, obj: Record<string, any>
export function getSortedNumPair(valueA: number, valueB: number) {
return valueA > valueB ? [valueB, valueA] : [valueA, valueB];
}

export function isStartWithSpace(text: string) {
const reStartWithSpace = /^\s(\S*)/g;

return reStartWithSpace.test(text);
}

export function isEndWithSpace(text: string) {
const reEndWithSpace = /(\S*)\s$/g;

return reEndWithSpace.test(text);
}
2 changes: 0 additions & 2 deletions apps/editor/src/utils/constants.ts
Expand Up @@ -20,5 +20,3 @@ export const reBR = /<br\s*\/*>/i;
export const reHTMLComment = /<! ---->|<!--(?:-?[^>-])(?:-?[^-])*-->/;

export const ALTERNATIVE_TAG_FOR_BR = '</p><p>';

export const DEFAULT_TEXT_NOT_START_OR_END_WITH_SPACE = 'a';
6 changes: 2 additions & 4 deletions apps/editor/types/convertor.d.ts
Expand Up @@ -113,8 +113,7 @@ export type ToMdNodeTypeConvertorMap = Partial<Record<WwNodeType, ToMdNodeTypeCo

type ToMdMarkTypeConvertor = (
nodeInfo?: MarkInfo,
entering?: boolean,
betweenSpace?: boolean
entering?: boolean
) => ToMdConvertorReturnValues & ToMdMarkTypeOption;

export type ToMdMarkTypeConvertorMap = Partial<Record<WwMarkType, ToMdMarkTypeConvertor>>;
Expand All @@ -127,8 +126,7 @@ interface ToMdConvertorContext {

type ToMdConvertor = (
nodeInfo: NodeInfo | MarkInfo,
context: ToMdConvertorContext,
betweenSpace?: boolean
context: ToMdConvertorContext
) => ToMdConvertorReturnValues;

export type ToMdConvertorMap = Partial<Record<WwNodeType | MdNodeType, ToMdConvertor>>;
Expand Down

0 comments on commit 2f0cbb5

Please sign in to comment.