Skip to content

Commit

Permalink
[FIX] web_editor: enter remove or duplicate node
Browse files Browse the repository at this point in the history
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 ignore when we are directly inside an editable.

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.

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.

fixes #17445
opw-751360
closes #18319
  • Loading branch information
nle-odoo committed Aug 16, 2017
1 parent 3f7eee0 commit 25b9468
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion addons/web_editor/static/src/js/summernote.js
Original file line number Diff line number Diff line change
Expand Up @@ -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]);
}
}
Expand Down Expand Up @@ -1119,6 +1119,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;
Expand Down

0 comments on commit 25b9468

Please sign in to comment.