From 65fee069905d9b7a92239a3ef0b22f153eb84f21 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Mon, 12 Jan 2015 12:19:28 +0100 Subject: [PATCH] [FIX] summbernote lib: if a content selected with CTRL+a begin by an image, the editor switch to the image editor but the range is not correct. Need to display the image style only for real image edition. --- .../lib/summernote/src/js/core/range.js | 33 ++++++++++++++----- .../lib/summernote/src/js/editing/Style.js | 4 +-- .../website/static/src/js/website.editor.js | 4 +-- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/addons/website/static/lib/summernote/src/js/core/range.js b/addons/website/static/lib/summernote/src/js/core/range.js index fcf45e0ccea..0ed938149a5 100644 --- a/addons/website/static/lib/summernote/src/js/core/range.js +++ b/addons/website/static/lib/summernote/src/js/core/range.js @@ -408,6 +408,30 @@ define([ this.isOnAnchor = makeIsOn(dom.isAnchor); // isOnAnchor: judge whether range is on cell node or not this.isOnCell = makeIsOn(dom.isCell); + // isOnAnchor: judge whether range is an image node or not + this.isOnImg = function () { + var nb = 0; + var image; + var startPoint = {node: sc.childNodes.length && sc.childNodes[so] || sc}; + startPoint.offset = startPoint.node === sc ? so : 0; + var endPoint = {node: ec.childNodes.length && ec.childNodes[eo] || ec}; + endPoint.offset = endPoint.node === ec ? eo : 0; + + dom.walkPoint(startPoint, endPoint, function (point) { + var node = point.node.childNodes.length && point.node.childNodes[point.offset] || point.node; + var offset = node === point.node ? point.offset : 0; + var isImg = dom.ancestor(node, dom.isImg); + + if (!isImg && (node.nodeType !== 3 || (offset && node.textContent.length !== offset && node.textContent.match(/\S|\u00A0/)))) { + nb++; + } + if (isImg && image !== isImg) { + image = isImg; + nb ++; + } + }); + return nb === 1 && image; + }; /** * @param {Function} pred @@ -595,15 +619,6 @@ define([ eo = endPoint.offset; } - /* fir for some browser like PhantomJS - * if you select a span with PhantomJS put the carret on the last char of the previous text node - * instead of put the caret on the parent node with the the ofset to target the node - */ - if (sc.nodeType === 3 && sc.nextSibling && sc.nextSibling.nodeType !== 3 && sc.nextSibling.tagName !== "BR" && dom.nodeLength(sc) === so) { - so = dom.listPrev(ec).length-1; - sc = sc.parentNode; - } - } else if (arguments.length === 2) { //collapsed ec = sc; eo = so; diff --git a/addons/website/static/lib/summernote/src/js/editing/Style.js b/addons/website/static/lib/summernote/src/js/editing/Style.js index adcd014213c..835d575be1b 100644 --- a/addons/website/static/lib/summernote/src/js/editing/Style.js +++ b/addons/website/static/lib/summernote/src/js/editing/Style.js @@ -79,9 +79,7 @@ define([ styleInfo['line-height'] = lineHeight.toFixed(1); } - var target = rng.sc.childNodes.length && rng.sc.childNodes[rng.so] || rng.sc; - - styleInfo.image = dom.isImg(target) && target; + styleInfo.image = rng.isOnImg(); styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor); styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable); styleInfo.range = rng; diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index 849c31f9dd5..068b1dacfcd 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -278,9 +278,7 @@ define(['summernote/summernote'], function () { /* hack for image and link editor */ function getImgTarget () { - var rng = range.create(); - var target = rng.sc.childNodes.length && rng.sc.childNodes[rng.so] || rng.sc; - return target; + return $(".note-control-selection").data('target'); } eventHandler.editor.padding = function ($editable, sValue) { var $target = $(getImgTarget());