diff --git a/src/mixins/richEditor/index.js b/src/mixins/richEditor/index.js index a623acca31..4381e84684 100644 --- a/src/mixins/richEditor/index.js +++ b/src/mixins/richEditor/index.js @@ -73,8 +73,6 @@ export default { */ parseContent(content) { let text = content - // Consecutive spaces in HTML tags should collapse - text = text.replace(/>\s+<') // Replace break lines with new lines text = text.replace(/
/gmi, '\n') // Replace some html special characters @@ -115,8 +113,10 @@ export default { : `@"${value}"` } - // Return template and make sure we strip of new lines and tabs - return this.renderComponentHtml(data, NcMentionBubble).replace(/[\n\t]/gmi, '') + // Return template and make sure we strip off new lines, tabs and consecutive whitespaces + return this.renderComponentHtml(data, NcMentionBubble) + .replace(/[\n\t]/gmi, '') + .replace(/>\s+<') }, /** diff --git a/tests/unit/mixins/richEditor.spec.js b/tests/unit/mixins/richEditor.spec.js index a7249a12d8..a60def1873 100644 --- a/tests/unit/mixins/richEditor.spec.js +++ b/tests/unit/mixins/richEditor.spec.js @@ -32,6 +32,9 @@ describe('richEditor.js', () => { const output = editor.vm.renderContent(input) expect(output).toEqual('hard
break') + + const parsedOutput = editor.vm.parseContent(output) + expect(parsedOutput).toEqual(input) }) it('no duplicated ampersand (from Linkify)', () => { @@ -40,6 +43,9 @@ describe('richEditor.js', () => { const output = editor.vm.renderContent(input) expect(output).toEqual('hello &') + + const parsedOutput = editor.vm.parseContent(output) + expect(parsedOutput).toEqual(input) }) it('keeps mentions without user data', () => { @@ -48,6 +54,9 @@ describe('richEditor.js', () => { const output = editor.vm.renderContent(input) expect(output).toEqual('hello @foobar') + + const parsedOutput = editor.vm.parseContent(output) + expect(parsedOutput).toEqual(input) }) it('keeps mentions with user data', () => { @@ -63,10 +72,43 @@ describe('richEditor.js', () => { }, }, }) - const input = 'hello @jdoe' + const input = 'hello @jdoe!\nhow are you?' + const output = editor.vm.renderContent(input) + + expect(output).toMatch(/^hello !
how are you\?$/) + expect(output).not.toMatch(/[\n\t]/gmi) + expect(output).not.toMatch(/>\s+ { + const editor = shallowMount(TestEditor, { + props: { + userData: { + jdoe: { + id: 'jdoe', + label: 'J. Doe', + source: 'users', + icon: 'icon-user', + }, + 'guest/47e0a7cf': { + id: 'guest/47e0a7cf', + label: 'J. Guest', + source: 'emails', + icon: 'icon-user', + }, + }, + }, + }) + const input = 'hello @jdoe @"guest/47e0a7cf"! how are you?' const output = editor.vm.renderContent(input) - expect(output).toMatch(/^hello ! how are you\?$/) + + const parsedOutput = editor.vm.parseContent(output) + expect(parsedOutput).toEqual(input) }) it('keep mentions with special characters', () => { @@ -95,6 +137,9 @@ describe('richEditor.js', () => { for (const i in inputs) { const output = editor.vm.renderContent(inputs[i]) expect(output).toEqual(outputs[i]) + + const parsedOutput = editor.vm.parseContent(output) + expect(parsedOutput).toEqual(inputs[i]) } }) })