From ba81444243f9130a04fad4ed5eca986aab00547f Mon Sep 17 00:00:00 2001 From: Kevin Ansfield Date: Mon, 21 May 2018 10:29:44 +0100 Subject: [PATCH] Fix error when pasting HTML that parses to a blank doc closes #619 - it's possible to paste HTML that parses into a blank doc, if the paste results in a section being replaced then the `post-inserter` would throw an error because it expects the new post to have sections - adds a guard in the paste event to avoid inserting a blank post --- src/js/editor/event-manager.js | 10 ++++++---- tests/acceptance/editor-copy-paste-test.js | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/js/editor/event-manager.js b/src/js/editor/event-manager.js index d79a5ce39..79c9b189f 100644 --- a/src/js/editor/event-manager.js +++ b/src/js/editor/event-manager.js @@ -251,10 +251,12 @@ export default class EventManager { let targetFormat = this.modifierKeys.shift ? 'text' : 'html'; let pastedPost = parsePostFromPaste(event, editor, {targetFormat}); - editor.run(postEditor => { - let nextPosition = postEditor.insertPost(position, pastedPost); - postEditor.setRange(nextPosition); - }); + if (!pastedPost.isBlank) { + editor.run(postEditor => { + let nextPosition = postEditor.insertPost(position, pastedPost); + postEditor.setRange(nextPosition); + }); + } } drop(event) { diff --git a/tests/acceptance/editor-copy-paste-test.js b/tests/acceptance/editor-copy-paste-test.js index 91e3e3ddf..08cdd9591 100644 --- a/tests/acceptance/editor-copy-paste-test.js +++ b/tests/acceptance/editor-copy-paste-test.js @@ -412,3 +412,25 @@ test('paste with shift key pastes plain text', (assert) => { assert.postIsSimilar(editor.post, expected); }); + +test('paste with html that parses to blank doc doesn\'t error', (assert) => { + let expected; + let mobiledoc = Helpers.mobiledoc.build(({post, markupSection, marker}) => { + expected = post([ + markupSection('p', []) + ]); + + return post([ + markupSection('p', [marker('abcd')]) + ]); + }); + + editor = new Editor({mobiledoc, cards}); + editor.render(editorElement); + + Helpers.dom.setCopyData('text/html', `
`); + editor.selectRange(editor.post.toRange()); + Helpers.dom.triggerPasteEvent(editor); + + assert.postIsSimilar(editor.post, expected); +});