From 1db529b28caedebbf8c8d2a6c48a3178c63ffa8a Mon Sep 17 00:00:00 2001 From: lee Date: Fri, 7 Aug 2020 15:18:15 +0800 Subject: [PATCH] Improve the marker experience for caret mode. --- core/js/marker.js | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/core/js/marker.js b/core/js/marker.js index 21857d6..876304d 100644 --- a/core/js/marker.js +++ b/core/js/marker.js @@ -48,8 +48,12 @@ } function getCoords(node){ - let rect = node.getBoundingClientRect(); - return [ rect.top, rect.left, rect.right, rect.bottom, cssSelector(node) ]; + if (node.getBoundingClientRect){ + let rect = node.getBoundingClientRect(); + return [ rect.top, rect.left, rect.right, rect.bottom, cssSelector(node) ]; + } + + return getCoords(node.parentNode); // TextNode not define getBoundingClientRect } function isElementOnScreen(rect){ @@ -255,15 +259,28 @@ z-index: 100000;\ self.generateTextNodeMarker = () => { - var elements = getVisibleElements(function(e, v) { - var aa = e.childNodes; - for (var i = 0, len = aa.length; i < len; i++) { + + let elements = getVisibleElements(function(e, v) { + let aa = e.childNodes; + for (let i = 0, len = aa.length; i < len; i++) { if (aa[i].nodeType == Node.TEXT_NODE && aa[i].data.length > 0) { v.push(e); break; } } }); + + elements = Array.prototype.concat.apply([], elements.map(function (e) { + let aa = e.childNodes; + let bb = []; + for (let i = 0, len = aa.length; i < len; i++) { + if (aa[i].nodeType == Node.TEXT_NODE && aa[i].data.trim().length > 1) { + bb.push(aa[i]); + } + } + return bb; + })); + return elements; }