[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: <div>text <span>one</span></div> the range selected is only 'text '

https://github.com/summernote/summernote/pull/799
This commit is contained in:
Christophe Matthieu
2015-01-05 10:59:43 +01:00
parent 6bd7084476
commit 5b07a0dc61
2 changed files with 21 additions and 1 deletions
@@ -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'),
@@ -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);
},
/**