From 5b07a0dc617c02141da800ee0225ef672c9433ff Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Fri, 12 Dec 2014 13:36:09 +0100 Subject: [PATCH] [FIX] summernote lib: some browsers raise when select a range to target a node like an image or a br; createFromNode can't select a node withe more or less of one item. For eg:
text one
the range selected is only 'text ' https://github.com/summernote/summernote/pull/799 --- .../static/lib/summernote/src/js/core/dom.js | 2 ++ .../lib/summernote/src/js/core/range.js | 20 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/addons/website/static/lib/summernote/src/js/core/dom.js b/addons/website/static/lib/summernote/src/js/core/dom.js index fbd751ec24b..b07751a0f92 100644 --- a/addons/website/static/lib/summernote/src/js/core/dom.js +++ b/addons/website/static/lib/summernote/src/js/core/dom.js @@ -799,6 +799,7 @@ define([ isControlSizing: isControlSizing, buildLayoutInfo: buildLayoutInfo, isText: isText, + isVoid: isVoid, isPara: isPara, isPurePara: isPurePara, isInline: isInline, @@ -813,6 +814,7 @@ define([ isAnchor: isAnchor, isDiv: makePredByNodeName('DIV'), isLi: isLi, + isBR: makePredByNodeName('BR'), isSpan: makePredByNodeName('SPAN'), isB: makePredByNodeName('B'), isU: makePredByNodeName('U'), 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 85a659bbd1b..1cbb4569a04 100644 --- a/addons/website/static/lib/summernote/src/js/core/range.js +++ b/addons/website/static/lib/summernote/src/js/core/range.js @@ -618,7 +618,25 @@ define([ * @return {WrappedRange} */ createFromNode: function (node) { - return this.create(node, 0, node, 1); + var sc = node; + var so = 0; + var ec = node; + var eo = dom.nodeLength(ec); + + // browsers can't target a picture or void node + if (dom.isVoid(sc) || dom.isImg(sc)) { + so = dom.listPrev(sc).length-1; + sc = sc.parentNode; + } + if (dom.isBR(ec)) { + eo = dom.listPrev(ec).length-1; + ec = ec.parentNode; + } else if (dom.isVoid(ec) || dom.isImg(sc)) { + eo = dom.listPrev(ec).length; + ec = ec.parentNode; + } + + return this.create(sc, so, ec, eo); }, /**