diff options
author | Alex Yatskov <alex@foosoft.net> | 2017-09-17 10:09:48 -0700 |
---|---|---|
committer | Alex Yatskov <alex@foosoft.net> | 2017-09-17 10:09:48 -0700 |
commit | 5476c100467e31d7dac02a4b1c14e62a4e9b34d0 (patch) | |
tree | e817af08681c24c2c4262589e5e26cb75c4ea403 /ext/fg | |
parent | 9280985306f5a9c79b9bd2c4daea596a5ec78ae5 (diff) |
more improvements to automatic search result hiding (#71)
Diffstat (limited to 'ext/fg')
-rw-r--r-- | ext/fg/js/frontend.js | 23 | ||||
-rw-r--r-- | ext/fg/js/popup.js | 15 |
2 files changed, 24 insertions, 14 deletions
diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js index e4035289..63cdc25e 100644 --- a/ext/fg/js/frontend.js +++ b/ext/fg/js/frontend.js @@ -80,7 +80,6 @@ class Frontend { const search = async () => { try { await this.searchAt({x: e.clientX, y: e.clientY}); - this.pendingLookup = false; } catch (e) { this.onError(e); } @@ -169,19 +168,15 @@ class Frontend { } async searchAt(point) { + if (this.pendingLookup || this.popup.containsPoint(point)) { + return; + } + const textSource = docRangeFromPoint(point); - let hideResults = false; + let hideResults = !textSource || !textSource.containsPoint(point); try { - if (this.pendingLookup) { - return; - } - - if (this.textSourceLast && this.textSourceLast.equals(textSource)) { - return; - } - - if (textSource && textSource.containsPoint(point)) { + if (!hideResults && (!this.textSourceLast || !this.textSourceLast.equals(textSource))) { this.pendingLookup = true; hideResults = !await this.searchTerms(textSource) && !await this.searchKanji(textSource); } @@ -194,10 +189,10 @@ class Frontend { this.onError(e); } } finally { - docImposterDestroy(); - if (hideResults && this.options.scanning.autoHideResults) { - this.popup.hide(); + this.searchClear(); + } else { + docImposterDestroy(); } this.pendingLookup = false; diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js index 03958832..d1009fe9 100644 --- a/ext/fg/js/popup.js +++ b/ext/fg/js/popup.js @@ -100,6 +100,21 @@ class Popup { return this.injected && this.container.style.visibility !== 'hidden'; } + containsPoint(point) { + if (!this.isVisible()) { + return false; + } + + const rect = this.container.getBoundingClientRect(); + const contained = + point.x >= rect.left && + point.y >= rect.top && + point.x < rect.right && + point.y < rect.bottom; + + return contained; + } + async termsShow(elementRect, definitions, options, context) { await this.show(elementRect, options); this.invokeApi('termsShow', {definitions, options, context}); |