From 971437e8b0029e23670b32f0b68b5b4e3e113932 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 16 Oct 2015 22:34:33 +0200 Subject: [FIX] web_editor: remove td content on keydown delete with multi td selected --- addons/web_editor/static/src/js/summernote.js | 34 ++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'addons/web_editor/static/src') diff --git a/addons/web_editor/static/src/js/summernote.js b/addons/web_editor/static/src/js/summernote.js index 39a2b12db1d..693b8eee134 100644 --- a/addons/web_editor/static/src/js/summernote.js +++ b/addons/web_editor/static/src/js/summernote.js @@ -1197,12 +1197,28 @@ function summernote_keydown_clean (field) { function remove_table_content(r) { var ancestor = r.commonAncestor(); - var end = dom.splitTree(ancestor, dom.prevPoint({'node': r.ec, 'offset': r.eo})); - var start = dom.splitTree(ancestor, dom.prevPoint({'node': r.sc, 'offset': r.so})); - var nodes = dom.listBetween(start, r.ec); - $(nodes).remove(); - if (!dom.isVisibleText(end)) { - $(end).remove(); + var nodes = dom.listBetween(r.sc, r.ec); + if (dom.isText(r.sc)) { + r.sc.textContent = r.sc.textContent.slice(0, r.so); + } + if (dom.isText(r.ec)) { + r.ec.textContent = r.ec.textContent.slice(r.eo); + } + for (var i in nodes) { + var node = nodes[i]; + if (node === r.sc || node === r.ec || $.contains(node, r.sc) || $.contains(node, r.ec)) { + continue; + } else if (dom.isCell(node)) { + $(node).html("
"); + } else if(node.parentNode) { + do { + var parent = node.parentNode; + parent.removeChild(node); + node = parent; + } while(!dom.isVisibleText(node) && !dom.firstElementChild(node) && + !dom.isCell(node) && + node.parentNode && !$(node.parentNode).hasClass('o_editable')); + } } event.preventDefault(); return false; @@ -1220,7 +1236,8 @@ $.summernote.pluginEvents.delete = function (event, editor, layoutInfo) { } if (!r.isCollapsed()) { if (dom.isCell(dom.node(r.sc)) || dom.isCell(dom.node(r.ec))) { - return remove_table_content(r); + remove_table_content(r); + return range.create(r.ec, 0).select(); } r = r.deleteContents(); r.select(); @@ -1355,7 +1372,8 @@ $.summernote.pluginEvents.backspace = function (event, editor, layoutInfo) { } if (!r.isCollapsed()) { if (dom.isCell(dom.node(r.sc)) || dom.isCell(dom.node(r.ec))) { - return remove_table_content(r); + remove_table_content(r); + return range.create(r.sc, dom.nodeLength(r.sc)).select(); } r = r.deleteContents(); r.select(); -- cgit v1.2.3