From b3bfe71ab8b975c7e6dd935c1f1a14183f6d3031 Mon Sep 17 00:00:00 2001 From: Rolf Schmidt Date: Thu, 9 Sep 2021 14:16:10 +0200 Subject: [PATCH] Follow up bf41a7ac81f160992e6d556fb38648f359a8c2e6 - Fixes #3717 - Spaces in front of mentions can cause partly content removal. --- .../app/lib/base/jquery.textmodule.js | 21 +++++++++---------- spec/system/examples/text_modules_examples.rb | 16 ++++++++++++++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/app/assets/javascripts/app/lib/base/jquery.textmodule.js b/app/assets/javascripts/app/lib/base/jquery.textmodule.js index 80c937c1f..d53345dd8 100644 --- a/app/assets/javascripts/app/lib/base/jquery.textmodule.js +++ b/app/assets/javascripts/app/lib/base/jquery.textmodule.js @@ -368,7 +368,16 @@ nnode.innerHTML = string } else { - document.execCommand('insertHTML', false, string) + var sel = rangy.getSelection(); + if (!sel.rangeCount) return + + var range = sel.getRangeAt(0); + range.collapse(false); + $('
').append(string).contents().each(function() { + range.insertNode($(this).get(0)); + range.collapseAfter($(this).get(0)); + }) + sel.setSingleRange(range); } } @@ -391,20 +400,10 @@ start = 0 } - // for chrome, check if space is before trigger if so, add it later - otherwise space will be dropped - var addSpacer = false - if ( $(range.startContainer.parentNode).html().includes(' ' + string) ) { - addSpacer = true - } //this.log('CUT FOR', string, "-"+clone.toString()+"-", start, range.startOffset) clone.setStart(range.startContainer, start) clone.setEnd(range.startContainer, range.startOffset) clone.deleteContents() - - // for chrome, insert space again - if (addSpacer) { - range.pasteHtml(' ') - } } Plugin.prototype.onMouseEnter = function(event) { diff --git a/spec/system/examples/text_modules_examples.rb b/spec/system/examples/text_modules_examples.rb index e080122a1..e87501820 100644 --- a/spec/system/examples/text_modules_examples.rb +++ b/spec/system/examples/text_modules_examples.rb @@ -106,6 +106,22 @@ RSpec.shared_examples 'text modules' do |path:| end end + it 'does not delete line breaks of text with mentions (issue #3717)' do + visit path + within(:active_content) do + find('select[name="group_id"]').select('Users') + find(:richtext).send_keys('@@FFFF1') + find(:richtext).send_keys(:enter) + find(:richtext).send_keys(' Testing Testy') + find(:richtext).send_keys(:enter) + find(:richtext).send_keys(:enter) + find(:richtext).send_keys(:backspace) + find(:richtext).send_keys('@@FFFF1') + find(:richtext).send_keys(:enter) + expect(find(:richtext).text).to include("FFFF1 GGGG1 Testing Testy\nFFFF1 GGGG1") + end + end + it 'supports group-dependent text modules' do # give user access to all groups including those created