diff options
Diffstat (limited to 'ext/fg/js')
| -rw-r--r-- | ext/fg/js/source-range.js | 20 | 
1 files changed, 17 insertions, 3 deletions
| diff --git a/ext/fg/js/source-range.js b/ext/fg/js/source-range.js index 58b6a415..95177f0b 100644 --- a/ext/fg/js/source-range.js +++ b/ext/fg/js/source-range.js @@ -84,8 +84,22 @@ class TextSourceRange {      }      static shouldEnter(node) { +        if (node.nodeType !== 1) { +            return false; +        } +          const skip = ['RT', 'SCRIPT', 'STYLE']; -        return !skip.includes(node.nodeName); +        if (skip.includes(node.nodeName)) { +            return false; +        } + +        const style = window.getComputedStyle(node); +        const hidden = +            style.visibility === 'hidden' || +            style.display === 'none' || +            parseFloat(style.fontSize) === 0; + +        return !hidden;      }      static seekForward(node, offset, length) { @@ -106,7 +120,7 @@ class TextSourceRange {      }      static seekForwardHelper(node, state) { -        if (node.nodeType === 3) { +        if (node.nodeType === 3 && node.parentElement && TextSourceRange.shouldEnter(node.parentElement)) {              const offset = state.node === node ? state.offset : 0;              const remaining = node.length - offset;              const consumed = Math.min(remaining, state.remainder); @@ -143,7 +157,7 @@ class TextSourceRange {      }      static seekBackwardHelper(node, state) { -        if (node.nodeType === 3) { +        if (node.nodeType === 3 && node.parentElement && TextSourceRange.shouldEnter(node.parentElement)) {              const offset = state.node === node ? state.offset : node.length;              const remaining = offset;              const consumed = Math.min(remaining, state.remainder); |