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