summaryrefslogtreecommitdiff
path: root/ext/bg/js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/bg/js')
-rw-r--r--ext/bg/js/search-frontend.js7
-rw-r--r--ext/bg/js/search-query-parser.js48
-rw-r--r--ext/bg/js/search.js27
3 files changed, 41 insertions, 41 deletions
diff --git a/ext/bg/js/search-frontend.js b/ext/bg/js/search-frontend.js
index a470e873..2d2aa8d4 100644
--- a/ext/bg/js/search-frontend.js
+++ b/ext/bg/js/search-frontend.js
@@ -30,12 +30,7 @@ async function searchFrontendSetup() {
const options = await apiOptionsGet(optionsContext);
if (!options.scanning.enableOnSearchPage) { return; }
- const ignoreNodes = ['.scan-disable', '.scan-disable *'];
- if (!options.scanning.enableOnPopupExpressions) {
- ignoreNodes.push('.source-text', '.source-text *');
- }
-
- window.frontendInitializationData = {depth: 1, ignoreNodes, proxy: false};
+ window.frontendInitializationData = {depth: 1, proxy: false};
const scriptSrcs = [
'/mixed/js/text-scanner.js',
diff --git a/ext/bg/js/search-query-parser.js b/ext/bg/js/search-query-parser.js
index 06316ce2..9f59f2e5 100644
--- a/ext/bg/js/search-query-parser.js
+++ b/ext/bg/js/search-query-parser.js
@@ -27,12 +27,14 @@
*/
class QueryParser extends TextScanner {
- constructor(search) {
- super(document.querySelector('#query-parser-content'), [], [], []);
- this.search = search;
+ constructor({getOptionsContext, setContent, setSpinnerVisible}) {
+ super(document.querySelector('#query-parser-content'), [], []);
+
+ this.getOptionsContext = getOptionsContext;
+ this.setContent = setContent;
+ this.setSpinnerVisible = setSpinnerVisible;
this.parseResults = [];
- this.selectedParser = null;
this.queryParser = document.querySelector('#query-parser-content');
this.queryParserSelect = document.querySelector('#query-parser-select-container');
@@ -56,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,
@@ -79,9 +81,7 @@ class QueryParser extends TextScanner {
onParserChange(e) {
const selectedParser = e.target.value;
- this.selectedParser = selectedParser;
- apiOptionsSet({parsing: {selectedParser}}, this.search.getOptionsContext());
- this.renderParseResult();
+ apiOptionsSet({parsing: {selectedParser}}, this.getOptionsContext());
}
getMouseEventListeners() {
@@ -112,23 +112,20 @@ class QueryParser extends TextScanner {
refreshSelectedParser() {
if (this.parseResults.length > 0) {
- if (this.selectedParser === null) {
- this.selectedParser = this.search.options.parsing.selectedParser;
- }
- if (this.selectedParser === null || !this.getParseResult()) {
+ if (!this.getParseResult()) {
const selectedParser = this.parseResults[0].id;
- this.selectedParser = selectedParser;
- apiOptionsSet({parsing: {selectedParser}}, this.search.getOptionsContext());
+ apiOptionsSet({parsing: {selectedParser}}, this.getOptionsContext());
}
}
}
getParseResult() {
- return this.parseResults.find((r) => r.id === this.selectedParser);
+ const {selectedParser} = this.options.parsing;
+ return this.parseResults.find((r) => r.id === selectedParser);
}
async setText(text) {
- this.search.setSpinnerVisible(true);
+ this.setSpinnerVisible(true);
this.setPreview(text);
@@ -138,20 +135,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}`,
@@ -176,7 +173,8 @@ class QueryParser extends TextScanner {
renderParserSelect() {
this.queryParserSelect.textContent = '';
if (this.parseResults.length > 1) {
- const select = this.queryParserGenerator.createParserSelect(this.parseResults, this.selectedParser);
+ const {selectedParser} = this.options.parsing;
+ const select = this.queryParserGenerator.createParserSelect(this.parseResults, selectedParser);
select.addEventListener('change', this.onParserChange.bind(this));
this.queryParserSelect.appendChild(select);
}
diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js
index e2bdff73..9250fdde 100644
--- a/ext/bg/js/search.js
+++ b/ext/bg/js/search.js
@@ -29,12 +29,18 @@ class DisplaySearch extends Display {
constructor() {
super(document.querySelector('#spinner'), document.querySelector('#content'));
+ this._isPrepared = false;
+
this.optionsContext = {
depth: 0,
url: window.location.href
};
- this.queryParser = new QueryParser(this);
+ this.queryParser = new QueryParser({
+ getOptionsContext: this.getOptionsContext.bind(this),
+ setContent: this.setContent.bind(this),
+ setSpinnerVisible: this.setSpinnerVisible.bind(this)
+ });
this.search = document.querySelector('#search');
this.query = document.querySelector('#query');
@@ -112,6 +118,8 @@ class DisplaySearch extends Display {
this.clipboardMonitor.on('change', this.onExternalSearchUpdate.bind(this));
this.updateSearchButton();
+
+ this._isPrepared = true;
} catch (e) {
this.onError(e);
}
@@ -247,15 +255,12 @@ class DisplaySearch extends Display {
}
onWanakanaEnableChange(e) {
- const {queryParams: {query=''}} = parseUrl(window.location.href);
const enableWanakana = e.target.checked;
if (enableWanakana) {
window.wanakana.bind(this.query);
} else {
window.wanakana.unbind(this.query);
}
- this.setQuery(query);
- this.onSearchQueryUpdated(this.query.value, false);
apiOptionsSet({general: {enableWanakana}}, this.getOptionsContext());
}
@@ -278,19 +283,21 @@ class DisplaySearch extends Display {
}
}
- async updateOptions(options) {
- await super.updateOptions(options);
+ async updateOptions() {
+ await super.updateOptions();
this.queryParser.setOptions(this.options);
+ if (!this._isPrepared) { return; }
+ const query = this.query.value;
+ if (query) {
+ this.setQuery(query);
+ this.onSearchQueryUpdated(query, false);
+ }
}
isWanakanaEnabled() {
return this.wanakanaEnable !== null && this.wanakanaEnable.checked;
}
- getOptionsContext() {
- return this.optionsContext;
- }
-
setQuery(query) {
const interpretedQuery = this.isWanakanaEnabled() ? window.wanakana.toKana(query) : query;
this.query.value = interpretedQuery;