From e3eb241f5d71160db4535a4db19f0ea1944d2f0b Mon Sep 17 00:00:00 2001 From: Constance Okoghenun Date: Tue, 5 Mar 2019 18:08:39 +0000 Subject: [PATCH] Added tightLists option to copy_as_gfm markdown serializer This removes extraneous newlines when copying comments with an ordered list. --- .../javascripts/behaviors/markdown/copy_as_gfm.js | 4 +++- ...with-ordered-list-includes-extraneous-newlines.yml | 5 +++++ spec/features/markdown/copy_as_gfm_spec.rb | 11 ----------- spec/javascripts/behaviors/copy_as_gfm_spec.js | 4 ++-- 4 files changed, 10 insertions(+), 14 deletions(-) create mode 100644 changelogs/unreleased/32714-copying-comment-with-ordered-list-includes-extraneous-newlines.yml diff --git a/app/assets/javascripts/behaviors/markdown/copy_as_gfm.js b/app/assets/javascripts/behaviors/markdown/copy_as_gfm.js index 9482a9f166d..58cf057b2c2 100644 --- a/app/assets/javascripts/behaviors/markdown/copy_as_gfm.js +++ b/app/assets/javascripts/behaviors/markdown/copy_as_gfm.js @@ -173,7 +173,9 @@ export class CopyAsGFM { wrapEl.appendChild(node.cloneNode(true)); const doc = DOMParser.fromSchema(schema.default).parse(wrapEl); - const res = markdownSerializer.default.serialize(doc); + const res = markdownSerializer.default.serialize(doc, { + tightLists: true, + }); return res; }) .catch(() => {}); diff --git a/changelogs/unreleased/32714-copying-comment-with-ordered-list-includes-extraneous-newlines.yml b/changelogs/unreleased/32714-copying-comment-with-ordered-list-includes-extraneous-newlines.yml new file mode 100644 index 00000000000..d0bb4225ce4 --- /dev/null +++ b/changelogs/unreleased/32714-copying-comment-with-ordered-list-includes-extraneous-newlines.yml @@ -0,0 +1,5 @@ +--- +title: Fixed "Copying comment with ordered list includes extraneous newlines" +merge_request: 25695 +author: +type: fixed diff --git a/spec/features/markdown/copy_as_gfm_spec.rb b/spec/features/markdown/copy_as_gfm_spec.rb index 60ddb02da2c..c30ac9c4ae2 100644 --- a/spec/features/markdown/copy_as_gfm_spec.rb +++ b/spec/features/markdown/copy_as_gfm_spec.rb @@ -55,15 +55,10 @@ describe 'Copy as GFM', :js do To see how GitLab looks please see the [features page on our website](https://about.gitlab.com/features/). * Manage Git repositories with fine grained access controls that keep your code secure - * Perform code reviews and enhance collaboration with merge requests - * Complete continuous integration (CI) and CD pipelines to builds, test, and deploy your applications - * Each project can also have an issue tracker, issue board, and a wiki - * Used by more than 100,000 organizations, GitLab is the most popular solution to manage Git repositories on-premises - * Completely free and open source (MIT Expat license) GFM ) @@ -116,13 +111,11 @@ describe 'Copy as GFM', :js do <<~GFM, * [ ] Unchecked task - * [x] Checked task GFM <<~GFM 1. [ ] Unchecked ordered task - 1. [x] Checked ordered task GFM ) @@ -551,7 +544,6 @@ describe 'Copy as GFM', :js do <<~GFM, * List item - * List item 2 GFM @@ -565,7 +557,6 @@ describe 'Copy as GFM', :js do # nested lists <<~GFM, * Nested - * Lists GFM @@ -578,7 +569,6 @@ describe 'Copy as GFM', :js do <<~GFM, 1. Ordered list item - 1. Ordered list item 2 GFM @@ -592,7 +582,6 @@ describe 'Copy as GFM', :js do # nested ordered list <<~GFM, 1. Nested - 1. Ordered lists GFM diff --git a/spec/javascripts/behaviors/copy_as_gfm_spec.js b/spec/javascripts/behaviors/copy_as_gfm_spec.js index ca849f75860..d653fca0988 100644 --- a/spec/javascripts/behaviors/copy_as_gfm_spec.js +++ b/spec/javascripts/behaviors/copy_as_gfm_spec.js @@ -100,7 +100,7 @@ describe('CopyAsGFM', () => { simulateCopy(); setTimeout(() => { - const expectedGFM = '* List Item1\n\n* List Item2'; + const expectedGFM = '* List Item1\n* List Item2'; expect(clipboardData.setData).toHaveBeenCalledWith('text/x-gfm', expectedGFM); done(); @@ -114,7 +114,7 @@ describe('CopyAsGFM', () => { simulateCopy(); setTimeout(() => { - const expectedGFM = '1. List Item1\n\n1. List Item2'; + const expectedGFM = '1. List Item1\n1. List Item2'; expect(clipboardData.setData).toHaveBeenCalledWith('text/x-gfm', expectedGFM); done();