diff options
author | Douwe Maan <douwe@selenight.nl> | 2017-01-19 13:47:54 -0600 |
---|---|---|
committer | Douwe Maan <douwe@selenight.nl> | 2017-01-19 13:47:54 -0600 |
commit | d89f56161297921f3f3ccdf0d186f39ff1c0a4d3 (patch) | |
tree | a04cf4f703850c0afb05b125c409d110c689407b | |
parent | 2b37e4c1995284a4871d6d7077b0884e95c2496e (diff) | |
download | gitlab-ce-d89f56161297921f3f3ccdf0d186f39ff1c0a4d3.tar.gz |
Improve support for linebreaks, tables and nested blockquotes in lists
-rw-r--r-- | app/assets/javascripts/copy_as_gfm.js.es6 | 17 | ||||
-rw-r--r-- | spec/features/copy_as_gfm_spec.rb | 29 |
2 files changed, 31 insertions, 15 deletions
diff --git a/app/assets/javascripts/copy_as_gfm.js.es6 b/app/assets/javascripts/copy_as_gfm.js.es6 index 80e30fdf390..9cbeb782270 100644 --- a/app/assets/javascripts/copy_as_gfm.js.es6 +++ b/app/assets/javascripts/copy_as_gfm.js.es6 @@ -92,9 +92,6 @@ }, }, SanitizationFilter: { - 'br'(el, text) { - return '<br>'; - }, 'dl'(el, text) { let lines = text.trim().split('\n'); // Add two spaces to the front of subsequent list items lines, @@ -127,6 +124,10 @@ }, }, MarkdownFilter: { + 'br'(el, text) { + // Two spaces at the end of a line are turned into a BR + return ' '; + }, 'code'(el, text) { let backtickCount = 1; const backtickMatch = text.match(/`+/); @@ -155,12 +156,12 @@ 'li'(el, text) { const lines = text.trim().split('\n'); const firstLine = `- ${lines.shift()}`; - // Add two spaces to the front of subsequent list items lines, + // Add four spaces to the front of subsequent list items lines, // or leave the line entirely blank. const nextLines = lines.map((s) => { if (s.trim().length === 0) return ''; - return ` ${s}`; + return ` ${s}`; }); return `${firstLine}\n${nextLines.join('\n')}`; @@ -213,7 +214,7 @@ }, 'thead'(el, text) { const cells = _.map(el.querySelectorAll('th'), (cell) => { - let chars = CopyAsGFM.nodeToGFM(cell).trim().length; + let chars = CopyAsGFM.nodeToGFM(cell).trim().length + 2; let before = ''; let after = ''; @@ -231,14 +232,14 @@ break; } - chars = Math.max(chars, 0); + chars = Math.max(chars, 3); const middle = Array(chars + 1).join('-'); return before + middle + after; }); - return `${text}| ${cells.join(' | ')} |`; + return `${text}|${cells.join('|')}|`; }, 'tr'(el, text) { const cells = _.map(el.querySelectorAll('td, th'), cell => CopyAsGFM.nodeToGFM(cell).trim()); diff --git a/spec/features/copy_as_gfm_spec.rb b/spec/features/copy_as_gfm_spec.rb index 86cb67d275a..6656d6a1e5d 100644 --- a/spec/features/copy_as_gfm_spec.rb +++ b/spec/features/copy_as_gfm_spec.rb @@ -236,8 +236,6 @@ describe 'Copy as GFM', feature: true, js: true do it 'supports SanitizationFilter' do verify( <<-GFM.strip_heredoc - BR: <br> - <sub>sub</sub> <dl> @@ -284,6 +282,8 @@ describe 'Copy as GFM', feature: true, js: true do it 'supports MarkdownFilter' do verify( + "Line with two spaces at the end \nto insert a linebreak", + '`code`', '`` code with ` ticks ``', @@ -308,7 +308,7 @@ describe 'Copy as GFM', feature: true, js: true do # multiline list item <<-GFM.strip_heredoc, - Multiline - List item + List item GFM # nested lists @@ -316,7 +316,14 @@ describe 'Copy as GFM', feature: true, js: true do - Nested - - Lists + - Lists + GFM + + # list with blockquote + <<-GFM.strip_heredoc, + - List + + > Blockquote GFM '1. Numbered list item', @@ -324,7 +331,7 @@ describe 'Copy as GFM', feature: true, js: true do # multiline numbered list item <<-GFM.strip_heredoc, 1. Multiline - Numbered list item + Numbered list item GFM # nested numbered list @@ -332,7 +339,7 @@ describe 'Copy as GFM', feature: true, js: true do 1. Nested - 1. Numbered lists + 1. Numbered lists GFM '# Heading', @@ -355,10 +362,18 @@ describe 'Copy as GFM', feature: true, js: true do # table <<-GFM.strip_heredoc, | Centered | Right | Left | - | :------: | ----: | ---- | + |:--------:|------:|------| | Foo | Bar | **Baz** | | Foo | Bar | **Baz** | GFM + + # table with empty heading + <<-GFM.strip_heredoc, + | | x | y | + |---|---|---| + | a | 1 | 0 | + | b | 0 | 1 | + GFM ) end |