diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2019-08-31 23:44:24 -0400 | 
|---|---|---|
| committer | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2019-09-02 11:43:49 -0400 | 
| commit | a2139213c85a0b44e8241f00bca909dd200068e8 (patch) | |
| tree | 52d7c2eaddca4246d6f25ebf9e89c4d6f402b1eb /ext/fg/js | |
| parent | ee59b3ab8b21d19055302302f28709c6a4e7b918 (diff) | |
Fix issue with whitespace ranges
The size of the rects for these ranges will sometimes be excessively large on Firefox, leading to false positives.
Diffstat (limited to 'ext/fg/js')
| -rw-r--r-- | ext/fg/js/document.js | 12 | 
1 files changed, 8 insertions, 4 deletions
| diff --git a/ext/fg/js/document.js b/ext/fg/js/document.js index b6e1f83b..fc8000dd 100644 --- a/ext/fg/js/document.js +++ b/ext/fg/js/document.js @@ -199,10 +199,10 @@ function isPointInRange(x, y, range) {      const nodePre = range.endContainer;      const offsetPre = range.endOffset;      try { -        const {node, offset} = TextSourceRange.seekForward(range.endContainer, range.endOffset, 1); +        const {node, offset, content} = TextSourceRange.seekForward(range.endContainer, range.endOffset, 1);          range.setEnd(node, offset); -        if (isPointInAnyRect(x, y, range.getClientRects())) { +        if (!isWhitespace(content) && isPointInAnyRect(x, y, range.getClientRects())) {              return true;          }      } finally { @@ -210,10 +210,10 @@ function isPointInRange(x, y, range) {      }      // Scan backward -    const {node, offset} = TextSourceRange.seekBackward(range.startContainer, range.startOffset, 1); +    const {node, offset, content} = TextSourceRange.seekBackward(range.startContainer, range.startOffset, 1);      range.setStart(node, offset); -    if (isPointInAnyRect(x, y, range.getClientRects())) { +    if (!isWhitespace(content) && isPointInAnyRect(x, y, range.getClientRects())) {          // This purposefully leaves the starting offset as modified and sets teh range length to 0.          range.setEnd(node, offset);          return true; @@ -223,6 +223,10 @@ function isPointInRange(x, y, range) {      return false;  } +function isWhitespace(string) { +    return string.trim().length === 0; +} +  function isPointInAnyRect(x, y, rects) {      for (const rect of rects) {          if (isPointInRect(x, y, rect)) { |