feature(simpleLineBreaks): parse linebreaks as <br />

This option enables linebreaks to always be treated as `<br />` tags
without needing to add spaces in front of the line, the same way GitHub does.

Closes #206
This commit is contained in:
Estevao Soares dos Santos 2016-11-30 18:04:17 +00:00
parent 7c05093a06
commit 0942b5e87d
13 changed files with 57 additions and 13 deletions

View File

@ -263,6 +263,20 @@ var defaultOptions = showdown.getDefaultOptions();
* **disableForced4SpacesIndentedSublists**: (boolean) [default false] Disables the requirement of indenting sublists by 4 spaces for them to be nested,
effectively reverting to the old behavior where 2 or 3 spaces were enough. (since v1.5.0)
* **simpleLineBreaks**: (boolean) [default false] Parses line breaks as <br> like GitHub does, without needing 2 spaces at the end of the line (since v1.5.1)
```md
a line
wrapped in two
```
turns into:
```html
<p>a line<br>
wrapped in two</p>
```
## Flavors
You can also use flavors or presets to set the correct options automatically, so that showdown behaves like popular markdown flavors.

18
dist/showdown.js vendored
View File

@ -1,4 +1,4 @@
;/*! showdown 25-11-2016 */
;/*! showdown 30-11-2016 */
(function(){
/**
* Created by Tivie on 13-07-2015.
@ -82,6 +82,11 @@ function getDefaultOpts(simple) {
defaultValue: false,
description: 'Disables the requirement of indenting nested sublists by 4 spaces',
type: 'boolean'
},
simpleLineBreaks: {
defaultValue: false,
description: 'Parses simple line breaks as <br> (GFM Style)',
type: 'boolean'
}
};
if (simple === false) {
@ -116,7 +121,8 @@ var showdown = {},
tablesHeaderId: true,
ghCodeBlocks: true,
tasklists: true,
disableForced4SpacesIndentedSublists: true
disableForced4SpacesIndentedSublists: true,
simpleLineBreaks: true
},
vanilla: getDefaultOpts(true)
};
@ -2213,8 +2219,14 @@ showdown.subParser('spanGamut', function (text, options, globals) {
text = showdown.subParser('italicsAndBold')(text, options, globals);
text = showdown.subParser('strikethrough')(text, options, globals);
// Do hard breaks:
// Do hard breaks
// GFM style hard breaks
if (options.simpleLineBreaks) {
text = text.replace(/\n/g, '<br />\n');
} else {
text = text.replace(/ +\n/g, '<br />\n');
}
text = globals.converter._dispatch('spanGamut.after', text, options, globals);
return text;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -80,6 +80,11 @@ function getDefaultOpts(simple) {
defaultValue: false,
description: 'Disables the requirement of indenting nested sublists by 4 spaces',
type: 'boolean'
},
simpleLineBreaks: {
defaultValue: false,
description: 'Parses simple line breaks as <br> (GFM Style)',
type: 'boolean'
}
};
if (simple === false) {

View File

@ -18,7 +18,8 @@ var showdown = {},
tablesHeaderId: true,
ghCodeBlocks: true,
tasklists: true,
disableForced4SpacesIndentedSublists: true
disableForced4SpacesIndentedSublists: true,
simpleLineBreaks: true
},
vanilla: getDefaultOpts(true)
};

View File

@ -23,8 +23,14 @@ showdown.subParser('spanGamut', function (text, options, globals) {
text = showdown.subParser('italicsAndBold')(text, options, globals);
text = showdown.subParser('strikethrough')(text, options, globals);
// Do hard breaks:
// Do hard breaks
// GFM style hard breaks
if (options.simpleLineBreaks) {
text = text.replace(/\n/g, '<br />\n');
} else {
text = text.replace(/ +\n/g, '<br />\n');
}
text = globals.converter._dispatch('spanGamut.after', text, options, globals);
return text;

View File

@ -0,0 +1,2 @@
<p>a simple<br />
wrapped line</p>

View File

@ -0,0 +1,2 @@
a simple
wrapped line

View File

@ -35,6 +35,8 @@ describe('makeHtml() features testsuite', function () {
converter = new showdown.Converter({simplifiedAutoLink: true});
} else if (testsuite[i].name === 'disableForced4SpacesIndentedSublists') {
converter = new showdown.Converter({disableForced4SpacesIndentedSublists: true});
} else if (testsuite[i].name === '#206.treat-single-line-breaks-as-br') {
converter = new showdown.Converter({simpleLineBreaks: true});
} else {
converter = new showdown.Converter();
}