diff --git a/browser/components/MarkdownEditor.js b/browser/components/MarkdownEditor.js index 2c98f18e..2bd5d951 100644 --- a/browser/components/MarkdownEditor.js +++ b/browser/components/MarkdownEditor.js @@ -283,6 +283,7 @@ class MarkdownEditor extends React.Component { indentSize={editorIndentSize} scrollPastEnd={config.preview.scrollPastEnd} smartQuotes={config.preview.smartQuotes} + breaks={config.preview.breaks} sanitize={config.preview.sanitize} ref='preview' onContextMenu={(e) => this.handleContextMenu(e)} diff --git a/browser/components/MarkdownPreview.js b/browser/components/MarkdownPreview.js index 058dce19..9d457238 100755 --- a/browser/components/MarkdownPreview.js +++ b/browser/components/MarkdownPreview.js @@ -145,10 +145,11 @@ export default class MarkdownPreview extends React.Component { } initMarkdown () { - const { smartQuotes, sanitize } = this.props + const { smartQuotes, sanitize, breaks } = this.props this.markdown = new Markdown({ typographer: smartQuotes, - sanitize + sanitize, + breaks }) } @@ -340,7 +341,9 @@ export default class MarkdownPreview extends React.Component { componentDidUpdate (prevProps) { if (prevProps.value !== this.props.value) this.rewriteIframe() - if (prevProps.smartQuotes !== this.props.smartQuotes || prevProps.sanitize !== this.props.sanitize) { + if (prevProps.smartQuotes !== this.props.smartQuotes || + prevProps.sanitize !== this.props.sanitize || + prevProps.breaks !== this.props.breaks) { this.initMarkdown() this.rewriteIframe() } @@ -599,5 +602,6 @@ MarkdownPreview.propTypes = { value: PropTypes.string, showCopyNotification: PropTypes.bool, storagePath: PropTypes.string, - smartQuotes: PropTypes.bool + smartQuotes: PropTypes.bool, + breaks: PropTypes.bool } diff --git a/browser/components/MarkdownSplitEditor.js b/browser/components/MarkdownSplitEditor.js index 27505a5a..2bee5c24 100644 --- a/browser/components/MarkdownSplitEditor.js +++ b/browser/components/MarkdownSplitEditor.js @@ -131,6 +131,7 @@ class MarkdownSplitEditor extends React.Component { lineNumber={config.preview.lineNumber} scrollPastEnd={config.preview.scrollPastEnd} smartQuotes={config.preview.smartQuotes} + breaks={config.preview.breaks} sanitize={config.preview.sanitize} ref='preview' tabInde='0' diff --git a/browser/lib/markdown.js b/browser/lib/markdown.js index 1ef488a7..e5923790 100644 --- a/browser/lib/markdown.js +++ b/browser/lib/markdown.js @@ -25,7 +25,7 @@ class Markdown { linkify: true, html: true, xhtmlOut: true, - breaks: true, + breaks: config.preview.breaks, highlight: function (str, lang) { const delimiter = ':' const langInfo = lang.split(delimiter) diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js index ee8a57c7..166e7181 100644 --- a/browser/main/lib/ConfigManager.js +++ b/browser/main/lib/ConfigManager.js @@ -55,6 +55,7 @@ export const DEFAULT_CONFIG = { latexBlockClose: '$$', scrollPastEnd: false, smartQuotes: true, + breaks: true, sanitize: 'STRICT' // 'STRICT', 'ALLOW_STYLES', 'NONE' }, blog: { diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js index a607f548..42f1503c 100644 --- a/browser/main/modals/PreferencesModal/UiTab.js +++ b/browser/main/modals/PreferencesModal/UiTab.js @@ -96,6 +96,7 @@ class UiTab extends React.Component { latexBlockClose: this.refs.previewLatexBlockClose.value, scrollPastEnd: this.refs.previewScrollPastEnd.checked, smartQuotes: this.refs.previewSmartQuotes.checked, + breaks: this.refs.previewBreaks.checked, sanitize: this.refs.previewSanitize.value } } @@ -475,6 +476,16 @@ class UiTab extends React.Component { Enable smart quotes +
+ +
diff --git a/tests/fixtures/markdowns.js b/tests/fixtures/markdowns.js index 8db35485..69e335e0 100644 --- a/tests/fixtures/markdowns.js +++ b/tests/fixtures/markdowns.js @@ -48,10 +48,13 @@ const checkboxes = ` const smartQuotes = 'This is a "QUOTE".' +const breaks = 'This is the first line.\nThis is the second line.' + export default { basic, codeblock, katex, checkboxes, - smartQuotes + smartQuotes, + breaks } diff --git a/tests/lib/markdown-test.js b/tests/lib/markdown-test.js index b2a81fdf..73b68799 100644 --- a/tests/lib/markdown-test.js +++ b/tests/lib/markdown-test.js @@ -34,3 +34,12 @@ test('Markdown.render() should text with quotes correctly', t => { const renderedNonSmartQuotes = newmd.render(markdownFixtures.smartQuotes) t.snapshot(renderedNonSmartQuotes) }) + +test('Markdown.render() should render line breaks correctly', t => { + const renderedBreaks = md.render(markdownFixtures.breaks) + t.snapshot(renderedBreaks) + + const newmd = new Markdown({ breaks: false }) + const renderedNonBreaks = newmd.render(markdownFixtures.breaks) + t.snapshot(renderedNonBreaks) +}) diff --git a/tests/lib/snapshots/markdown-test.js.md b/tests/lib/snapshots/markdown-test.js.md index d4f0469e..0c3e317b 100644 --- a/tests/lib/snapshots/markdown-test.js.md +++ b/tests/lib/snapshots/markdown-test.js.md @@ -73,4 +73,18 @@ Generated by [AVA](https://ava.li). > Snapshot 2 `

This is a "QUOTE".

␊ + + +## Markdown.render() should render line breaks correctly + +> Snapshot 1 + + `

This is the first line.
␊ + This is the second line.

␊ ` + +> Snapshot 2 + + `

This is the first line.␊ + This is the second line.

␊ + ` \ No newline at end of file diff --git a/tests/lib/snapshots/markdown-test.js.snap b/tests/lib/snapshots/markdown-test.js.snap index 71ff221d..1dc64bba 100644 Binary files a/tests/lib/snapshots/markdown-test.js.snap and b/tests/lib/snapshots/markdown-test.js.snap differ