diff options
Diffstat (limited to 'ext/bg/js/search-query-parser.js')
| -rw-r--r-- | ext/bg/js/search-query-parser.js | 43 | 
1 files changed, 29 insertions, 14 deletions
| diff --git a/ext/bg/js/search-query-parser.js b/ext/bg/js/search-query-parser.js index 6e18073b..4a4fcdde 100644 --- a/ext/bg/js/search-query-parser.js +++ b/ext/bg/js/search-query-parser.js @@ -27,9 +27,12 @@   */  class QueryParser extends TextScanner { -    constructor(search) { +    constructor({getOptionsContext, setContent, setSpinnerVisible}) {          super(document.querySelector('#query-parser-content'), [], []); -        this.search = search; + +        this.getOptionsContext = getOptionsContext; +        this.setContent = setContent; +        this.setSpinnerVisible = setSpinnerVisible;          this.parseResults = []; @@ -55,18 +58,18 @@ class QueryParser extends TextScanner {      async onSearchSource(textSource, cause) {          if (textSource === null) { return null; } -        this.setTextSourceScanLength(textSource, this.search.options.scanning.length); +        this.setTextSourceScanLength(textSource, this.options.scanning.length);          const searchText = textSource.text();          if (searchText.length === 0) { return; } -        const {definitions, length} = await apiTermsFind(searchText, {}, this.search.getOptionsContext()); +        const {definitions, length} = await apiTermsFind(searchText, {}, this.getOptionsContext());          if (definitions.length === 0) { return null; } -        const sentence = docSentenceExtract(textSource, this.search.options.anki.sentenceExt); +        const sentence = docSentenceExtract(textSource, this.options.anki.sentenceExt);          textSource.setEndOffset(length); -        this.search.setContent('terms', {definitions, context: { +        this.setContent('terms', {definitions, context: {              focus: false,              disableHistory: cause === 'mouse',              sentence, @@ -78,7 +81,7 @@ class QueryParser extends TextScanner {      onParserChange(e) {          const selectedParser = e.target.value; -        apiOptionsSet({parsing: {selectedParser}}, this.search.getOptionsContext()); +        apiOptionsSet({parsing: {selectedParser}}, this.getOptionsContext());      }      getMouseEventListeners() { @@ -107,11 +110,23 @@ class QueryParser extends TextScanner {          this.queryParser.dataset.termSpacing = `${options.parsing.termSpacing}`;      } +    getOptionsContext() { +        throw new Error('Override me'); +    } + +    setContent(_type, _details) { +        throw new Error('Override me'); +    } + +    setSpinnerVisible(_visible) { +        throw new Error('Override me'); +    } +      refreshSelectedParser() {          if (this.parseResults.length > 0) {              if (!this.getParseResult()) {                  const selectedParser = this.parseResults[0].id; -                apiOptionsSet({parsing: {selectedParser}}, this.search.getOptionsContext()); +                apiOptionsSet({parsing: {selectedParser}}, this.getOptionsContext());              }          }      } @@ -122,7 +137,7 @@ class QueryParser extends TextScanner {      }      async setText(text) { -        this.search.setSpinnerVisible(true); +        this.setSpinnerVisible(true);          this.setPreview(text); @@ -132,20 +147,20 @@ class QueryParser extends TextScanner {          this.renderParserSelect();          this.renderParseResult(); -        this.search.setSpinnerVisible(false); +        this.setSpinnerVisible(false);      }      async parseText(text) {          const results = []; -        if (this.search.options.parsing.enableScanningParser) { +        if (this.options.parsing.enableScanningParser) {              results.push({                  name: 'Scanning parser',                  id: 'scan', -                parsedText: await apiTextParse(text, this.search.getOptionsContext()) +                parsedText: await apiTextParse(text, this.getOptionsContext())              });          } -        if (this.search.options.parsing.enableMecabParser) { -            const mecabResults = await apiTextParseMecab(text, this.search.getOptionsContext()); +        if (this.options.parsing.enableMecabParser) { +            const mecabResults = await apiTextParseMecab(text, this.getOptionsContext());              for (const [mecabDictName, mecabDictResults] of mecabResults) {                  results.push({                      name: `MeCab: ${mecabDictName}`, |