From 983e2c79361ad15ada6aae0d153fef9f1b867a93 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Mon, 11 Jan 2021 23:13:35 -0500 Subject: [PATCH] Refactor text scanner options context generation (#1225) * Refactor how options context is created and updated * Udpate TextScanner/QueryParser to use getSearchContext instead of getOptionsContext --- ext/bg/js/query-parser.js | 15 ++++++++++----- ext/fg/js/frontend.js | 8 ++++++-- ext/mixed/js/display.js | 8 ++++++-- ext/mixed/js/text-scanner.js | 14 +++++++++----- 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 }); }