+ function isTextNode(node) {
+ return node && node.nodeType === 3;
+ }
+
+ function getNormalizedEndPoint(container, offset) {
+ var node = tinymce.dom.RangeUtils.getNode(container, offset);
+
+ if (isListItemNode(container) && isTextNode(node)) {
+ var textNodeOffset = offset >= container.childNodes.length ? node.data.length : 0;
+ return {container: node, offset: textNodeOffset};
+ }
+
+ return {container: container, offset: offset};
+ }
+
+ function normalizeRange(rng) {
+ var outRng = rng.cloneRange();
+
+ var rangeStart = getNormalizedEndPoint(rng.startContainer, rng.startOffset);
+ outRng.setStart(rangeStart.container, rangeStart.offset);
+
+ var rangeEnd = getNormalizedEndPoint(rng.endContainer, rng.endOffset);
+ outRng.setEnd(rangeEnd.container, rangeEnd.offset);
+
+ return outRng;
+ }
+