summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-08-22 14:40:44 -0400
committerGitHub <noreply@github.com>2020-08-22 14:40:44 -0400
commit9fa0f2a56a79159227f1f42455157fe9c84132d3 (patch)
treed9a69e94a42939da1d184a3eec8f5ad03ef450ea /ext
parentbdb4c21a784a3b5c342bf456a8ed754d6d5e63f2 (diff)
Move findTerms and findKanji functions into TextScanner (#747)
Diffstat (limited to 'ext')
-rw-r--r--ext/bg/js/query-parser.js32
-rw-r--r--ext/fg/js/frontend.js35
-rw-r--r--ext/mixed/js/display.js8
-rw-r--r--ext/mixed/js/text-scanner.js46
4 files changed, 61 insertions, 60 deletions
diff --git a/ext/bg/js/query-parser.js b/ext/bg/js/query-parser.js
index 2ad88601..b0ef2d78 100644
--- a/ext/bg/js/query-parser.js
+++ b/ext/bg/js/query-parser.js
@@ -27,9 +27,6 @@ class QueryParser extends EventDispatcher {
this._getOptionsContext = getOptionsContext;
this._setSpinnerVisible = setSpinnerVisible;
this._selectedParser = null;
- this._scanLength = 1;
- this._sentenceExtent = 1;
- this._layoutAwareScan = false;
this._documentUtil = documentUtil;
this._parseResults = [];
this._queryParser = document.querySelector('#query-parser-content');
@@ -50,19 +47,10 @@ class QueryParser extends EventDispatcher {
this._queryParser.addEventListener('click', this._onClick.bind(this));
}
- setOptions({selectedParser, scanLength, sentenceExtent, layoutAwareScan, termSpacing, scanning}) {
+ setOptions({selectedParser, termSpacing, scanning}) {
if (selectedParser === null || typeof selectedParser === 'string') {
this._selectedParser = selectedParser;
}
- if (typeof scanLength === 'number') {
- this._scanLength = scanLength;
- }
- if (typeof sentenceExtent === 'number') {
- this._sentenceExtent = sentenceExtent;
- }
- if (typeof layoutAwareScan === 'boolean') {
- this._layoutAwareScan = layoutAwareScan;
- }
if (typeof termSpacing === 'boolean') {
this._queryParser.dataset.termSpacing = `${termSpacing}`;
}
@@ -95,22 +83,14 @@ class QueryParser extends EventDispatcher {
async _search(textSource, cause) {
if (textSource === null) { return null; }
- const scanLength = this._scanLength;
- const sentenceExtent = this._sentenceExtent;
- const layoutAwareScan = this._layoutAwareScan;
- const searchText = this._textScanner.getTextSourceContent(textSource, scanLength, layoutAwareScan);
- if (searchText.length === 0) { return null; }
-
const optionsContext = this._getOptionsContext();
- const {definitions, length} = await api.termsFind(searchText, {}, optionsContext);
- if (definitions.length === 0) { return null; }
-
- const sentence = this._documentUtil.extractSentence(textSource, sentenceExtent, layoutAwareScan);
+ const results = await this._textScanner.findTerms(textSource, optionsContext);
+ if (results === null) { return null; }
- textSource.setEndOffset(length, layoutAwareScan);
+ const {definitions, sentence, type} = results;
this.trigger('searched', {
- type: 'terms',
+ type,
definitions,
sentence,
cause,
@@ -118,7 +98,7 @@ class QueryParser extends EventDispatcher {
optionsContext
});
- return {definitions, type: 'terms'};
+ return {definitions, type};
}
_onParserChange(e) {
diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js
index 9e3b902f..981852db 100644
--- a/ext/fg/js/frontend.js
+++ b/ext/fg/js/frontend.js
@@ -253,7 +253,10 @@ class Frontend {
modifier: scanningOptions.modifier,
useMiddleMouse: scanningOptions.middleMouse,
delay: scanningOptions.delay,
- touchInputEnabled: scanningOptions.touchInputEnabled
+ touchInputEnabled: scanningOptions.touchInputEnabled,
+ scanLength: scanningOptions.length,
+ sentenceExtent: options.anki.sentenceExt,
+ layoutAwareScan: scanningOptions.layoutAwareScan
});
this._updateTextScannerEnabled();
@@ -399,8 +402,8 @@ class Frontend {
if (textSource !== null) {
const optionsContext = await this.getOptionsContext();
results = (
- await this._findTerms(textSource, optionsContext) ||
- await this._findKanji(textSource, optionsContext)
+ await this._textScanner.findTerms(textSource, optionsContext) ||
+ await this._textScanner.findKanji(textSource, optionsContext)
);
if (results !== null) {
const focus = (cause === 'mouse');
@@ -424,32 +427,6 @@ class Frontend {
return results;
}
- async _findTerms(textSource, optionsContext) {
- const {length: scanLength, layoutAwareScan} = this._options.scanning;
- const searchText = this._textScanner.getTextSourceContent(textSource, scanLength, layoutAwareScan);
- if (searchText.length === 0) { return null; }
-
- const {definitions, length} = await api.termsFind(searchText, {}, optionsContext);
- if (definitions.length === 0) { return null; }
-
- textSource.setEndOffset(length, layoutAwareScan);
-
- return {definitions, type: 'terms'};
- }
-
- async _findKanji(textSource, optionsContext) {
- const layoutAwareScan = this._options.scanning.layoutAwareScan;
- const searchText = this._textScanner.getTextSourceContent(textSource, 1, layoutAwareScan);
- if (searchText.length === 0) { return null; }
-
- const definitions = await api.kanjiFind(searchText, optionsContext);
- if (definitions.length === 0) { return null; }
-
- textSource.setEndOffset(1, layoutAwareScan);
-
- return {definitions, type: 'kanji'};
- }
-
async _showExtensionUnloaded(textSource) {
if (textSource === null) {
textSource = this._textScanner.getCurrentTextSource();
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js
index 1cc08bc7..3f8a43ab 100644
--- a/ext/mixed/js/display.js
+++ b/ext/mixed/js/display.js
@@ -228,9 +228,6 @@ class Display extends EventDispatcher {
this._queryParser.setOptions({
selectedParser: options.parsing.selectedParser,
- scanLength: scanning.length,
- sentenceExtent: options.anki.sentenceExt,
- layoutAwareScan: scanning.layoutAwareScan,
termSpacing: options.parsing.termSpacing,
scanning: {
deepContentScan: scanning.deepDomScan,
@@ -238,7 +235,10 @@ class Display extends EventDispatcher {
modifier: scanning.modifier,
useMiddleMouse: scanning.middleMouse,
delay: scanning.delay,
- touchInputEnabled: scanning.touchInputEnabled
+ touchInputEnabled: scanning.touchInputEnabled,
+ scanLength: scanning.length,
+ sentenceExtent: options.anki.sentenceExt,
+ layoutAwareScan: scanning.layoutAwareScan
}
});
}
diff --git a/ext/mixed/js/text-scanner.js b/ext/mixed/js/text-scanner.js
index d0256b1e..5a64c14a 100644
--- a/ext/mixed/js/text-scanner.js
+++ b/ext/mixed/js/text-scanner.js
@@ -17,6 +17,7 @@
/* global
* DocumentUtil
+ * api
*/
class TextScanner extends EventDispatcher {
@@ -43,6 +44,9 @@ class TextScanner extends EventDispatcher {
this._useMiddleMouse = false;
this._delay = 0;
this._touchInputEnabled = false;
+ this._scanLength = 1;
+ this._sentenceExtent = 1;
+ this._layoutAwareScan = false;
this._enabled = false;
this._eventListeners = new EventListenerCollection();
@@ -91,7 +95,7 @@ class TextScanner extends EventDispatcher {
}
}
- setOptions({deepContentScan, selectText, modifier, useMiddleMouse, delay, touchInputEnabled}) {
+ setOptions({deepContentScan, selectText, modifier, useMiddleMouse, delay, touchInputEnabled, scanLength, sentenceExtent, layoutAwareScan}) {
if (typeof deepContentScan === 'boolean') {
this._deepContentScan = deepContentScan;
}
@@ -110,6 +114,15 @@ class TextScanner extends EventDispatcher {
if (typeof touchInputEnabled === 'boolean') {
this._touchInputEnabled = false;
}
+ if (typeof scanLength === 'number') {
+ this._scanLength = scanLength;
+ }
+ if (typeof sentenceExtent === 'number') {
+ this._sentenceExtent = sentenceExtent;
+ }
+ if (typeof layoutAwareScan === 'boolean') {
+ this._layoutAwareScan = layoutAwareScan;
+ }
}
async searchAt(x, y, cause) {
@@ -193,6 +206,37 @@ class TextScanner extends EventDispatcher {
}
}
+ async findTerms(textSource, optionsContext) {
+ const scanLength = this._scanLength;
+ const sentenceExtent = this._sentenceExtent;
+ const layoutAwareScan = this._layoutAwareScan;
+ const searchText = this.getTextSourceContent(textSource, scanLength, layoutAwareScan);
+ if (searchText.length === 0) { return null; }
+
+ const {definitions, length} = await api.termsFind(searchText, {}, optionsContext);
+ if (definitions.length === 0) { return null; }
+
+ textSource.setEndOffset(length, layoutAwareScan);
+ const sentence = this._documentUtil.extractSentence(textSource, sentenceExtent, layoutAwareScan);
+
+ return {definitions, sentence, type: 'terms'};
+ }
+
+ async findKanji(textSource, optionsContext) {
+ const sentenceExtent = this._sentenceExtent;
+ const layoutAwareScan = this._layoutAwareScan;
+ const searchText = this.getTextSourceContent(textSource, 1, layoutAwareScan);
+ if (searchText.length === 0) { return null; }
+
+ const definitions = await api.kanjiFind(searchText, optionsContext);
+ if (definitions.length === 0) { return null; }
+
+ textSource.setEndOffset(1, layoutAwareScan);
+ const sentence = this._documentUtil.extractSentence(textSource, sentenceExtent, layoutAwareScan);
+
+ return {definitions, sentence, type: 'kanji'};
+ }
+
// Private
_onMouseOver(e) {