Move findTerms and findKanji functions into TextScanner (#747)
This commit is contained in:
parent
bdb4c21a78
commit
9fa0f2a56a
@ -27,9 +27,6 @@ class QueryParser extends EventDispatcher {
|
|||||||
this._getOptionsContext = getOptionsContext;
|
this._getOptionsContext = getOptionsContext;
|
||||||
this._setSpinnerVisible = setSpinnerVisible;
|
this._setSpinnerVisible = setSpinnerVisible;
|
||||||
this._selectedParser = null;
|
this._selectedParser = null;
|
||||||
this._scanLength = 1;
|
|
||||||
this._sentenceExtent = 1;
|
|
||||||
this._layoutAwareScan = false;
|
|
||||||
this._documentUtil = documentUtil;
|
this._documentUtil = documentUtil;
|
||||||
this._parseResults = [];
|
this._parseResults = [];
|
||||||
this._queryParser = document.querySelector('#query-parser-content');
|
this._queryParser = document.querySelector('#query-parser-content');
|
||||||
@ -50,19 +47,10 @@ class QueryParser extends EventDispatcher {
|
|||||||
this._queryParser.addEventListener('click', this._onClick.bind(this));
|
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') {
|
if (selectedParser === null || typeof selectedParser === 'string') {
|
||||||
this._selectedParser = selectedParser;
|
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') {
|
if (typeof termSpacing === 'boolean') {
|
||||||
this._queryParser.dataset.termSpacing = `${termSpacing}`;
|
this._queryParser.dataset.termSpacing = `${termSpacing}`;
|
||||||
}
|
}
|
||||||
@ -95,22 +83,14 @@ class QueryParser extends EventDispatcher {
|
|||||||
async _search(textSource, cause) {
|
async _search(textSource, cause) {
|
||||||
if (textSource === null) { return null; }
|
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 optionsContext = this._getOptionsContext();
|
||||||
const {definitions, length} = await api.termsFind(searchText, {}, optionsContext);
|
const results = await this._textScanner.findTerms(textSource, optionsContext);
|
||||||
if (definitions.length === 0) { return null; }
|
if (results === null) { return null; }
|
||||||
|
|
||||||
const sentence = this._documentUtil.extractSentence(textSource, sentenceExtent, layoutAwareScan);
|
const {definitions, sentence, type} = results;
|
||||||
|
|
||||||
textSource.setEndOffset(length, layoutAwareScan);
|
|
||||||
|
|
||||||
this.trigger('searched', {
|
this.trigger('searched', {
|
||||||
type: 'terms',
|
type,
|
||||||
definitions,
|
definitions,
|
||||||
sentence,
|
sentence,
|
||||||
cause,
|
cause,
|
||||||
@ -118,7 +98,7 @@ class QueryParser extends EventDispatcher {
|
|||||||
optionsContext
|
optionsContext
|
||||||
});
|
});
|
||||||
|
|
||||||
return {definitions, type: 'terms'};
|
return {definitions, type};
|
||||||
}
|
}
|
||||||
|
|
||||||
_onParserChange(e) {
|
_onParserChange(e) {
|
||||||
|
@ -253,7 +253,10 @@ class Frontend {
|
|||||||
modifier: scanningOptions.modifier,
|
modifier: scanningOptions.modifier,
|
||||||
useMiddleMouse: scanningOptions.middleMouse,
|
useMiddleMouse: scanningOptions.middleMouse,
|
||||||
delay: scanningOptions.delay,
|
delay: scanningOptions.delay,
|
||||||
touchInputEnabled: scanningOptions.touchInputEnabled
|
touchInputEnabled: scanningOptions.touchInputEnabled,
|
||||||
|
scanLength: scanningOptions.length,
|
||||||
|
sentenceExtent: options.anki.sentenceExt,
|
||||||
|
layoutAwareScan: scanningOptions.layoutAwareScan
|
||||||
});
|
});
|
||||||
this._updateTextScannerEnabled();
|
this._updateTextScannerEnabled();
|
||||||
|
|
||||||
@ -399,8 +402,8 @@ class Frontend {
|
|||||||
if (textSource !== null) {
|
if (textSource !== null) {
|
||||||
const optionsContext = await this.getOptionsContext();
|
const optionsContext = await this.getOptionsContext();
|
||||||
results = (
|
results = (
|
||||||
await this._findTerms(textSource, optionsContext) ||
|
await this._textScanner.findTerms(textSource, optionsContext) ||
|
||||||
await this._findKanji(textSource, optionsContext)
|
await this._textScanner.findKanji(textSource, optionsContext)
|
||||||
);
|
);
|
||||||
if (results !== null) {
|
if (results !== null) {
|
||||||
const focus = (cause === 'mouse');
|
const focus = (cause === 'mouse');
|
||||||
@ -424,32 +427,6 @@ class Frontend {
|
|||||||
return results;
|
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) {
|
async _showExtensionUnloaded(textSource) {
|
||||||
if (textSource === null) {
|
if (textSource === null) {
|
||||||
textSource = this._textScanner.getCurrentTextSource();
|
textSource = this._textScanner.getCurrentTextSource();
|
||||||
|
@ -228,9 +228,6 @@ class Display extends EventDispatcher {
|
|||||||
|
|
||||||
this._queryParser.setOptions({
|
this._queryParser.setOptions({
|
||||||
selectedParser: options.parsing.selectedParser,
|
selectedParser: options.parsing.selectedParser,
|
||||||
scanLength: scanning.length,
|
|
||||||
sentenceExtent: options.anki.sentenceExt,
|
|
||||||
layoutAwareScan: scanning.layoutAwareScan,
|
|
||||||
termSpacing: options.parsing.termSpacing,
|
termSpacing: options.parsing.termSpacing,
|
||||||
scanning: {
|
scanning: {
|
||||||
deepContentScan: scanning.deepDomScan,
|
deepContentScan: scanning.deepDomScan,
|
||||||
@ -238,7 +235,10 @@ class Display extends EventDispatcher {
|
|||||||
modifier: scanning.modifier,
|
modifier: scanning.modifier,
|
||||||
useMiddleMouse: scanning.middleMouse,
|
useMiddleMouse: scanning.middleMouse,
|
||||||
delay: scanning.delay,
|
delay: scanning.delay,
|
||||||
touchInputEnabled: scanning.touchInputEnabled
|
touchInputEnabled: scanning.touchInputEnabled,
|
||||||
|
scanLength: scanning.length,
|
||||||
|
sentenceExtent: options.anki.sentenceExt,
|
||||||
|
layoutAwareScan: scanning.layoutAwareScan
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
/* global
|
/* global
|
||||||
* DocumentUtil
|
* DocumentUtil
|
||||||
|
* api
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class TextScanner extends EventDispatcher {
|
class TextScanner extends EventDispatcher {
|
||||||
@ -43,6 +44,9 @@ class TextScanner extends EventDispatcher {
|
|||||||
this._useMiddleMouse = false;
|
this._useMiddleMouse = false;
|
||||||
this._delay = 0;
|
this._delay = 0;
|
||||||
this._touchInputEnabled = false;
|
this._touchInputEnabled = false;
|
||||||
|
this._scanLength = 1;
|
||||||
|
this._sentenceExtent = 1;
|
||||||
|
this._layoutAwareScan = false;
|
||||||
|
|
||||||
this._enabled = false;
|
this._enabled = false;
|
||||||
this._eventListeners = new EventListenerCollection();
|
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') {
|
if (typeof deepContentScan === 'boolean') {
|
||||||
this._deepContentScan = deepContentScan;
|
this._deepContentScan = deepContentScan;
|
||||||
}
|
}
|
||||||
@ -110,6 +114,15 @@ class TextScanner extends EventDispatcher {
|
|||||||
if (typeof touchInputEnabled === 'boolean') {
|
if (typeof touchInputEnabled === 'boolean') {
|
||||||
this._touchInputEnabled = false;
|
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) {
|
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
|
// Private
|
||||||
|
|
||||||
_onMouseOver(e) {
|
_onMouseOver(e) {
|
||||||
|
Loading…
Reference in New Issue
Block a user