summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Lempereur <nle@odoo.com>2017-08-18 15:13:12 +0200
committerNicolas Lempereur <nle@odoo.com>2017-09-07 09:38:56 +0200
commit73edebc371669ea3b68c7f14301b2ef6f3df0d60 (patch)
tree1e4d21314148770dee7f9a9dbc860ceac4798573
parent18d63d4717657f4b43a61df2fda016f0a6316a65 (diff)
[FIX] web_editor: enter remove or duplicate node
There is some odd behavior especially inside a editable containing newlines. For example in the sale description on an ecommerce item, lines could contain newline (it is editable from backend) but as an effect of other use case, pressing enter could have a range of unwanted side effects: - removing all the content, - duplicating the editable (should never happen, if we have one field "description_sale" we don't want to duplicate it, this has no sense) In a product name which is in the same use case, there is no newline so the problem is not apparent, and ENTER do nothing. This is the behavior we should want in every instance. If we still want a newline, we have to force it with SHIFT + ENTER key, also this is regarding field that may or could be present in the backend views, so it could also be edited in backend. This change make ENTER ignored when we are editing a node directly child of an node being edited. A second part of the issue was that dom.removeBetween (used to remove content inside a range) could remove the ancestor node that was an editable. This is not wanted. For example if we did CTRL + A inside a field with `<br />` then ENTER or pasting something, the field would be removed and not just emptied and could not be gotten back without editing the template manually. This was sometimes mitigated because if a `<br />` was at the end of an element, it would stay in this use case avoiding the issue. note: not necessary after saas-16 fixes #17445 opw-751360 closes #19313
-rw-r--r--addons/web_editor/static/src/js/summernote.js5
1 files changed, 4 insertions, 1 deletions
diff --git a/addons/web_editor/static/src/js/summernote.js b/addons/web_editor/static/src/js/summernote.js
index 71647828cc6..d28279d57ed 100644
--- a/addons/web_editor/static/src/js/summernote.js
+++ b/addons/web_editor/static/src/js/summernote.js
@@ -504,7 +504,7 @@ dom.removeBetween = function (sc, so, ec, eo, towrite) {
};
for (var i=0; i<nodes.length; i++) {
- if (!dom.ancestor(nodes[i], ancestor_first_last) && !$.contains(nodes[i], before) && !$.contains(nodes[i], after)) {
+ if (!dom.ancestor(nodes[i], ancestor_first_last) && !$.contains(nodes[i], before) && !$.contains(nodes[i], after) && !dom.isEditable(nodes[i])) {
nodes[i].parentNode.removeChild(nodes[i]);
}
}
@@ -1121,6 +1121,9 @@ $.summernote.pluginEvents.enter = function (event, editor, layoutInfo) {
// double enter on the end of a blockquote & pre = new line out of the list
$('<p></p>').append(br).insertAfter($(r.sc).closest('blockquote, pre'));
node = br;
+ } else if (dom.isEditable(dom.node(r.sc))) {
+ // if we are directly in an editable, only SHIFT + ENTER should add a newline
+ node = null;
} else if (last === r.sc) {
if (dom.isBR(last)) {
last = last.parentNode;