From 53ef25284fa12bb98e76a390a24137a0a9729a6f Mon Sep 17 00:00:00 2001 From: Nicolas Lempereur Date: Thu, 25 Jul 2019 15:47:34 +0000 Subject: [PATCH] [FIX] web_editor: enter at A edge no dup link In the editor, when you write a letter at the end or beginning of a link it is written outside the link. But if you press "Enter", we get on a newline with an empty link duplicated on the new line. This is caused by the custom code handling "Enter" keypress. With this changeset, in this situation we place the range just before the beginning or after the end of a link. opw-1724606 opw-2042097 closes #35188 Signed-off-by: Nicolas Lempereur (nle) --- .../web_editor/static/src/js/editor/summernote.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/addons/web_editor/static/src/js/editor/summernote.js b/addons/web_editor/static/src/js/editor/summernote.js index bc7f5e7ff9f..e0968ecdb58 100644 --- a/addons/web_editor/static/src/js/editor/summernote.js +++ b/addons/web_editor/static/src/js/editor/summernote.js @@ -1181,6 +1181,20 @@ $.summernote.pluginEvents.enter = function (event, editor, layoutInfo) { var br = $("
")[0]; + // set selection outside of A if range is at beginning or end + var elem = dom.isBR(elem) ? elem.parentNode : dom.node(r.sc); + if (elem.tagName === "A") { + if (r.so === 0 && dom.firstChild(elem) === r.sc) { + r.ec = r.sc = dom.hasContentBefore(elem) || $(dom.createText('')).insertBefore(elem)[0]; + r.eo = r.so = dom.nodeLength(r.sc); + r.select(); + } else if (dom.nodeLength(r.sc) === r.so && dom.lastChild(elem) === r.sc) { + r.ec = r.sc = dom.hasContentAfter(elem) || dom.insertAfter(dom.createText(''), elem); + r.eo = r.so = 0; + r.select(); + } + } + var node; var $node; var $clone;