aboutsummaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2021-01-11 23:13:35 -0500
committerGitHub <noreply@github.com>2021-01-11 23:13:35 -0500
commit983e2c79361ad15ada6aae0d153fef9f1b867a93 (patch)
tree1b655b205cdc062f44248b0f0c9ef13d3ca85266 /ext
parent5e87a490f78888717c58491959745431580bd64e (diff)
Refactor text scanner options context generation (#1225)
* Refactor how options context is created and updated * Udpate TextScanner/QueryParser to use getSearchContext instead of getOptionsContext
Diffstat (limited to 'ext')
-rw-r--r--ext/bg/js/query-parser.js15
-rw-r--r--ext/fg/js/frontend.js8
-rw-r--r--ext/mixed/js/display.js8
-rw-r--r--ext/mixed/js/text-scanner.js14
4 files changed, 31 insertions, 14 deletions
diff --git a/ext/bg/js/query-parser.js b/ext/bg/js/query-parser.js
index a7c00829..fced2bda 100644
--- a/ext/bg/js/query-parser.js
+++ b/ext/bg/js/query-parser.js
@@ -21,9 +21,9 @@
*/
class QueryParser extends EventDispatcher {
- constructor({getOptionsContext, documentUtil}) {
+ constructor({getSearchContext, documentUtil}) {
super();
- this._getOptionsContext = getOptionsContext;
+ this._getSearchContext = getSearchContext;
this._documentUtil = documentUtil;
this._text = '';
this._setTextToken = null;
@@ -34,7 +34,7 @@ class QueryParser extends EventDispatcher {
this._queryParserModeSelect = document.querySelector('#query-parser-mode-select');
this._textScanner = new TextScanner({
node: this._queryParser,
- getOptionsContext,
+ getSearchContext,
documentUtil,
searchTerms: true,
searchKanji: false,
@@ -82,7 +82,7 @@ class QueryParser extends EventDispatcher {
// Private
- _onSearched({type, definitions, sentence, inputInfo, textSource, optionsContext, error}) {
+ _onSearched({type, definitions, sentence, inputInfo, textSource, optionsContext, detail, error}) {
if (error !== null) {
yomichan.logError(error);
return;
@@ -95,7 +95,8 @@ class QueryParser extends EventDispatcher {
sentence,
inputInfo,
textSource,
- optionsContext
+ optionsContext,
+ detail
});
}
@@ -104,6 +105,10 @@ class QueryParser extends EventDispatcher {
this._setSelectedParser(value);
}
+ _getOptionsContext() {
+ return this._getSearchContext().optionsContext;
+ }
+
_refreshSelectedParser() {
if (this._parseResults.length > 0 && !this._getParseResult()) {
const value = this._parseResults[0].id;
diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js
index 4ca7874a..e6f72689 100644
--- a/ext/fg/js/frontend.js
+++ b/ext/fg/js/frontend.js
@@ -54,7 +54,7 @@ class Frontend {
node: window,
ignoreElements: this._ignoreElements.bind(this),
ignorePoint: this._ignorePoint.bind(this),
- getOptionsContext: this._getOptionsContext.bind(this),
+ getSearchContext: this._getSearchContext.bind(this),
documentUtil: this._documentUtil,
searchTerms: true,
searchKanji: true
@@ -615,6 +615,10 @@ class Frontend {
}
async _getOptionsContext() {
+ return (await this._getSearchContext()).optionsContext;
+ }
+
+ async _getSearchContext() {
if (this._optionsContextOverride !== null) {
return this._optionsContextOverride;
}
@@ -629,6 +633,6 @@ class Frontend {
}
const depth = this._depth;
- return {depth, url};
+ return {optionsContext: {depth, url}};
}
}
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js
index ea30030c..509683a6 100644
--- a/ext/mixed/js/display.js
+++ b/ext/mixed/js/display.js
@@ -82,7 +82,7 @@ class Display extends EventDispatcher {
this._queryParserVisibleOverride = null;
this._queryParserContainer = document.querySelector('#query-parser-container');
this._queryParser = new QueryParser({
- getOptionsContext: this.getOptionsContext.bind(this),
+ getSearchContext: this._getSearchContext.bind(this),
documentUtil: this._documentUtil
});
this._mode = null;
@@ -1764,7 +1764,7 @@ class Display extends EventDispatcher {
if (this._definitionTextScanner === null) {
this._definitionTextScanner = new TextScanner({
node: window,
- getOptionsContext: this.getOptionsContext.bind(this),
+ getSearchContext: this._getSearchContext.bind(this),
documentUtil: this._documentUtil,
searchTerms: true,
searchKanji: false,
@@ -1861,6 +1861,10 @@ class Display extends EventDispatcher {
}
}
+ _getSearchContext() {
+ return {optionsContext: this.getOptionsContext()};
+ }
+
_startFrameResize(e) {
if (this._frameResizeToken !== null) { return; }
diff --git a/ext/mixed/js/text-scanner.js b/ext/mixed/js/text-scanner.js
index 11a6f88f..98d87341 100644
--- a/ext/mixed/js/text-scanner.js
+++ b/ext/mixed/js/text-scanner.js
@@ -24,7 +24,7 @@ class TextScanner extends EventDispatcher {
constructor({
node,
documentUtil,
- getOptionsContext,
+ getSearchContext,
ignoreElements=null,
ignorePoint=null,
searchTerms=false,
@@ -35,7 +35,7 @@ class TextScanner extends EventDispatcher {
super();
this._node = node;
this._documentUtil = documentUtil;
- this._getOptionsContext = getOptionsContext;
+ this._getSearchContext = getSearchContext;
this._ignoreElements = ignoreElements;
this._ignorePoint = ignorePoint;
this._searchTerms = searchTerms;
@@ -290,8 +290,8 @@ class TextScanner extends EventDispatcher {
// Private
- async _getOptionsContextForInput(inputInfo) {
- const optionsContext = clone(await this._getOptionsContext());
+ _createOptionsContextForInput(baseOptionsContext, inputInfo) {
+ const optionsContext = clone(baseOptionsContext);
const {modifiers, modifierKeys} = inputInfo;
optionsContext.modifiers = [...modifiers];
optionsContext.modifierKeys = [...modifierKeys];
@@ -305,13 +305,16 @@ class TextScanner extends EventDispatcher {
let error = null;
let searched = false;
let optionsContext = null;
+ let detail = null;
try {
if (this._textSourceCurrent !== null && this._textSourceCurrent.hasSameStart(textSource)) {
return;
}
- optionsContext = await this._getOptionsContextForInput(inputInfo);
+ ({optionsContext, detail} = await this._getSearchContext());
+ optionsContext = this._createOptionsContextForInput(optionsContext, inputInfo);
+
searched = true;
const result = await this._findDefinitions(textSource, searchTerms, searchKanji, optionsContext);
@@ -334,6 +337,7 @@ class TextScanner extends EventDispatcher {
inputInfo,
textSource,
optionsContext,
+ detail,
error
});
}