From ec4a96f209cb8d9b27b72559b9297f2782bd3fd0 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 9 Jan 2019 09:47:17 -0800 Subject: [PATCH 1/2] [import-markdown] Support parser options --- packages/draft-js-import-markdown/src/MarkdownParser.js | 2 +- .../draft-js-import-markdown/src/stateFromMarkdown.js | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/draft-js-import-markdown/src/MarkdownParser.js b/packages/draft-js-import-markdown/src/MarkdownParser.js index 92e47a6f..39ed301c 100644 --- a/packages/draft-js-import-markdown/src/MarkdownParser.js +++ b/packages/draft-js-import-markdown/src/MarkdownParser.js @@ -109,7 +109,7 @@ block.gfm.paragraph = replace(block.paragraph)( function Lexer(options) { this.tokens = []; this.tokens.links = {}; - this.options = assign({}, options || defaults); + this.options = options ? assign({}, defaults, options) : assign({}, defaults); this.rules = block.normal; if (this.options.gfm) { diff --git a/packages/draft-js-import-markdown/src/stateFromMarkdown.js b/packages/draft-js-import-markdown/src/stateFromMarkdown.js index 3b190d00..f447f42f 100644 --- a/packages/draft-js-import-markdown/src/stateFromMarkdown.js +++ b/packages/draft-js-import-markdown/src/stateFromMarkdown.js @@ -11,12 +11,16 @@ type Options = { blockTypes?: {[key: string]: string}; customBlockFn?: CustomBlockFn; customInlineFn?: CustomInlineFn; + parserOptions?: {[key: string]: mixed}; // TODO: Be more explicit }; +let defaultOptions: Options = {}; + export default function stateFromMarkdown( markdown: string, options?: Options, ): ContentState { - let element = MarkdownParser.parse(markdown, {getAST: true}); - return stateFromElement(element, options); + let {parserOptions, ...otherOptions} = options || defaultOptions; + let element = MarkdownParser.parse(markdown, {getAST: true, ...parserOptions}); + return stateFromElement(element, otherOptions); } From 5c9d7a5469bf1d9710b39986f2118969a513433b Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 9 Jan 2019 10:20:31 -0800 Subject: [PATCH 2/2] Add test for preserving single linebreaks --- .../src/__tests__/stateFromMarkdown-test.js | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/packages/draft-js-import-markdown/src/__tests__/stateFromMarkdown-test.js b/packages/draft-js-import-markdown/src/__tests__/stateFromMarkdown-test.js index 237ff345..92da5704 100644 --- a/packages/draft-js-import-markdown/src/__tests__/stateFromMarkdown-test.js +++ b/packages/draft-js-import-markdown/src/__tests__/stateFromMarkdown-test.js @@ -5,8 +5,8 @@ import stateFromMarkdown from '../stateFromMarkdown'; import {convertToRaw} from 'draft-js'; describe('stateFromMarkdown', () => { - let markdown = 'Hello World'; it('should create content state', () => { + let markdown = 'Hello World'; let contentState = stateFromMarkdown(markdown); let rawContentState = convertToRaw(contentState); let blocks = removeKeys(rawContentState.blocks); @@ -21,9 +21,9 @@ describe('stateFromMarkdown', () => { }, ]); }); - it('should correctly move code blocks', () => { - let codeMarkdown = "```\nconst a = 'b'\n```"; - let contentState = stateFromMarkdown(codeMarkdown); + it('should correctly handle code blocks', () => { + let markdown = "```\nconst a = 'b'\n```"; + let contentState = stateFromMarkdown(markdown); let rawContentState = convertToRaw(contentState); let blocks = removeKeys(rawContentState.blocks); expect(blocks).toEqual([ @@ -43,10 +43,26 @@ describe('stateFromMarkdown', () => { }, ]); }); - it('should correctly move images with complex srcs', () => { + it('should correctly handle linebreaks option', () => { + let markdown = 'Hello\nWorld'; + let contentState = stateFromMarkdown(markdown, {parserOptions: {breaks: true}}); + let rawContentState = convertToRaw(contentState); + let blocks = removeKeys(rawContentState.blocks); + expect(blocks).toEqual([ + { + text: 'Hello\nWorld', + type: 'unstyled', + depth: 0, + inlineStyleRanges: [], + entityRanges: [], + data: {}, + }, + ]); + }); + it('should correctly handle images with complex srcs', () => { 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'; - let input = `![](${src})`; - let contentState = stateFromMarkdown(input); + let markdown = `![](${src})`; + let contentState = stateFromMarkdown(markdown); let rawContentState = convertToRaw(contentState); let blocks = removeKeys(rawContentState.blocks); expect({