summaryrefslogtreecommitdiff
path: root/ext/mixed/js/text-scanner.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mixed/js/text-scanner.js')
-rw-r--r--ext/mixed/js/text-scanner.js46
1 files changed, 45 insertions, 1 deletions
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) {