diff options
| -rw-r--r-- | ext/bg/js/query-parser.js | 32 | ||||
| -rw-r--r-- | ext/fg/js/frontend.js | 35 | ||||
| -rw-r--r-- | ext/mixed/js/display.js | 8 | ||||
| -rw-r--r-- | ext/mixed/js/text-scanner.js | 46 | 
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) { |