Query parser refactor (#683)
* Rename files to better match class name * Don't pass setContent to QueryParser; use a generic event instead
This commit is contained in:
parent
99f5655e53
commit
3754c92041
@ -22,11 +22,11 @@
|
|||||||
* docSentenceExtract
|
* docSentenceExtract
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class QueryParser {
|
class QueryParser extends EventDispatcher {
|
||||||
constructor({getOptionsContext, setContent, setSpinnerVisible}) {
|
constructor({getOptionsContext, setSpinnerVisible}) {
|
||||||
|
super();
|
||||||
this._options = null;
|
this._options = null;
|
||||||
this._getOptionsContext = getOptionsContext;
|
this._getOptionsContext = getOptionsContext;
|
||||||
this._setContent = setContent;
|
|
||||||
this._setSpinnerVisible = setSpinnerVisible;
|
this._setSpinnerVisible = setSpinnerVisible;
|
||||||
this._parseResults = [];
|
this._parseResults = [];
|
||||||
this._queryParser = document.querySelector('#query-parser-content');
|
this._queryParser = document.querySelector('#query-parser-content');
|
||||||
@ -80,7 +80,8 @@ class QueryParser {
|
|||||||
const searchText = this._textScanner.getTextSourceContent(textSource, scanLength, layoutAwareScan);
|
const searchText = this._textScanner.getTextSourceContent(textSource, scanLength, layoutAwareScan);
|
||||||
if (searchText.length === 0) { return null; }
|
if (searchText.length === 0) { return null; }
|
||||||
|
|
||||||
const {definitions, length} = await api.termsFind(searchText, {}, this._getOptionsContext());
|
const optionsContext = this._getOptionsContext();
|
||||||
|
const {definitions, length} = await api.termsFind(searchText, {}, optionsContext);
|
||||||
if (definitions.length === 0) { return null; }
|
if (definitions.length === 0) { return null; }
|
||||||
|
|
||||||
const sentenceExtent = this._options.anki.sentenceExt;
|
const sentenceExtent = this._options.anki.sentenceExt;
|
||||||
@ -88,12 +89,14 @@ class QueryParser {
|
|||||||
|
|
||||||
textSource.setEndOffset(length, layoutAwareScan);
|
textSource.setEndOffset(length, layoutAwareScan);
|
||||||
|
|
||||||
this._setContent('terms', {definitions, context: {
|
this.trigger('searched', {
|
||||||
focus: false,
|
type: 'terms',
|
||||||
disableHistory: cause === 'mouse',
|
definitions,
|
||||||
sentence,
|
sentence,
|
||||||
url: window.location.href
|
cause,
|
||||||
}});
|
textSource,
|
||||||
|
optionsContext
|
||||||
|
});
|
||||||
|
|
||||||
return {definitions, type: 'terms'};
|
return {definitions, type: 'terms'};
|
||||||
}
|
}
|
@ -40,7 +40,6 @@ class DisplaySearch extends Display {
|
|||||||
});
|
});
|
||||||
this._queryParser = new QueryParser({
|
this._queryParser = new QueryParser({
|
||||||
getOptionsContext: this.getOptionsContext.bind(this),
|
getOptionsContext: this.getOptionsContext.bind(this),
|
||||||
setContent: this.setContent.bind(this),
|
|
||||||
setSpinnerVisible: this.setSpinnerVisible.bind(this)
|
setSpinnerVisible: this.setSpinnerVisible.bind(this)
|
||||||
});
|
});
|
||||||
this._onKeyDownIgnoreKeys = new Map([
|
this._onKeyDownIgnoreKeys = new Map([
|
||||||
@ -67,6 +66,9 @@ class DisplaySearch extends Display {
|
|||||||
await this.updateOptions();
|
await this.updateOptions();
|
||||||
yomichan.on('optionsUpdated', () => this.updateOptions());
|
yomichan.on('optionsUpdated', () => this.updateOptions());
|
||||||
await this._queryParser.prepare();
|
await this._queryParser.prepare();
|
||||||
|
|
||||||
|
this._queryParser.on('searched', this._onQueryParserSearch.bind(this));
|
||||||
|
|
||||||
const options = this.getOptions();
|
const options = this.getOptions();
|
||||||
|
|
||||||
const {queryParams: {query='', mode=''}} = parseUrl(window.location.href);
|
const {queryParams: {query='', mode=''}} = parseUrl(window.location.href);
|
||||||
@ -169,6 +171,18 @@ class DisplaySearch extends Display {
|
|||||||
|
|
||||||
// Private
|
// Private
|
||||||
|
|
||||||
|
_onQueryParserSearch({type, definitions, sentence, cause}) {
|
||||||
|
this.setContent(type, {
|
||||||
|
definitions,
|
||||||
|
context: {
|
||||||
|
focus: false,
|
||||||
|
disableHistory: cause === 'mouse',
|
||||||
|
sentence,
|
||||||
|
url: window.location.href
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
_onSearchInput() {
|
_onSearchInput() {
|
||||||
this._updateSearchButton();
|
this._updateSearchButton();
|
||||||
|
|
||||||
|
@ -92,8 +92,8 @@
|
|||||||
<script src="/mixed/js/text-scanner.js"></script>
|
<script src="/mixed/js/text-scanner.js"></script>
|
||||||
<script src="/mixed/js/template-handler.js"></script>
|
<script src="/mixed/js/template-handler.js"></script>
|
||||||
|
|
||||||
<script src="/bg/js/search-query-parser-generator.js"></script>
|
<script src="/bg/js/query-parser-generator.js"></script>
|
||||||
<script src="/bg/js/search-query-parser.js"></script>
|
<script src="/bg/js/query-parser.js"></script>
|
||||||
<script src="/bg/js/clipboard-monitor.js"></script>
|
<script src="/bg/js/clipboard-monitor.js"></script>
|
||||||
<script src="/bg/js/search.js"></script>
|
<script src="/bg/js/search.js"></script>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user