Skip to content

Commit b643c44

Browse files
authored
[import-markdown] Support Parser Options (marked) (#157)
* [import-markdown] Support parser options * Add test for preserving single linebreaks
1 parent bf56c6b commit b643c44

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

packages/draft-js-import-markdown/src/MarkdownParser.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ block.gfm.paragraph = replace(block.paragraph)(
109109
function Lexer(options) {
110110
this.tokens = [];
111111
this.tokens.links = {};
112-
this.options = assign({}, options || defaults);
112+
this.options = options ? assign({}, defaults, options) : assign({}, defaults);
113113
this.rules = block.normal;
114114

115115
if (this.options.gfm) {

packages/draft-js-import-markdown/src/__tests__/stateFromMarkdown-test.js

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import stateFromMarkdown from '../stateFromMarkdown';
55
import {convertToRaw} from 'draft-js';
66

77
describe('stateFromMarkdown', () => {
8-
let markdown = 'Hello World';
98
it('should create content state', () => {
9+
let markdown = 'Hello World';
1010
let contentState = stateFromMarkdown(markdown);
1111
let rawContentState = convertToRaw(contentState);
1212
let blocks = removeKeys(rawContentState.blocks);
@@ -21,9 +21,9 @@ describe('stateFromMarkdown', () => {
2121
},
2222
]);
2323
});
24-
it('should correctly move code blocks', () => {
25-
let codeMarkdown = "```\nconst a = 'b'\n```";
26-
let contentState = stateFromMarkdown(codeMarkdown);
24+
it('should correctly handle code blocks', () => {
25+
let markdown = "```\nconst a = 'b'\n```";
26+
let contentState = stateFromMarkdown(markdown);
2727
let rawContentState = convertToRaw(contentState);
2828
let blocks = removeKeys(rawContentState.blocks);
2929
expect(blocks).toEqual([
@@ -43,10 +43,26 @@ describe('stateFromMarkdown', () => {
4343
},
4444
]);
4545
});
46-
it('should correctly move images with complex srcs', () => {
46+
it('should correctly handle linebreaks option', () => {
47+
let markdown = 'Hello\nWorld';
48+
let contentState = stateFromMarkdown(markdown, {parserOptions: {breaks: true}});
49+
let rawContentState = convertToRaw(contentState);
50+
let blocks = removeKeys(rawContentState.blocks);
51+
expect(blocks).toEqual([
52+
{
53+
text: 'Hello\nWorld',
54+
type: 'unstyled',
55+
depth: 0,
56+
inlineStyleRanges: [],
57+
entityRanges: [],
58+
data: {},
59+
},
60+
]);
61+
});
62+
it('should correctly handle images with complex srcs', () => {
4763
const src = 'https://spectrum.imgix.net/threads/c678032e-68a4-4e14-956d-abfa444a707d/Captura%20de%20pantalla%202017-08-19%20a%20la(s)%2000.14.09.png.0.29802431313299893';
48-
let input = `![](${src})`;
49-
let contentState = stateFromMarkdown(input);
64+
let markdown = `![](${src})`;
65+
let contentState = stateFromMarkdown(markdown);
5066
let rawContentState = convertToRaw(contentState);
5167
let blocks = removeKeys(rawContentState.blocks);
5268
expect({

packages/draft-js-import-markdown/src/stateFromMarkdown.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@ type Options = {
1111
blockTypes?: {[key: string]: string};
1212
customBlockFn?: CustomBlockFn;
1313
customInlineFn?: CustomInlineFn;
14+
parserOptions?: {[key: string]: mixed}; // TODO: Be more explicit
1415
};
1516

17+
let defaultOptions: Options = {};
18+
1619
export default function stateFromMarkdown(
1720
markdown: string,
1821
options?: Options,
1922
): ContentState {
20-
let element = MarkdownParser.parse(markdown, {getAST: true});
21-
return stateFromElement(element, options);
23+
let {parserOptions, ...otherOptions} = options || defaultOptions;
24+
let element = MarkdownParser.parse(markdown, {getAST: true, ...parserOptions});
25+
return stateFromElement(element, otherOptions);
2226
}

0 commit comments

Comments
 (0)