aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-12-21 19:19:59 -0500
committerGitHub <noreply@github.com>2020-12-21 19:19:59 -0500
commit18043babeb8735a7707f273eab2b9364aa42ab7a (patch)
treef09a32ff7f7d471761234698f922dd88d0ef9335
parent9dd2a9c98e72f1e546499057d48b8bbe3c5eb330 (diff)
Improve query parser scanning (#1154)
* Improve how the search page updates after settings have changed * Always update the history on the first scan of the query parser
-rw-r--r--ext/bg/js/search.js2
-rw-r--r--ext/mixed/js/display.js41
2 files changed, 40 insertions, 3 deletions
diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js
index 85efc7a0..884ab33c 100644
--- a/ext/bg/js/search.js
+++ b/ext/bg/js/search.js
@@ -144,7 +144,7 @@ class DisplaySearch extends Display {
await this.updateOptions();
const query = this._queryInput.value;
if (query) {
- this._search(false, false);
+ this.searchLast();
}
}
diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js
index 22021f5c..7491cd60 100644
--- a/ext/mixed/js/display.js
+++ b/ext/mixed/js/display.js
@@ -71,6 +71,8 @@ class Display extends EventDispatcher {
this._contentType = 'clear';
this._defaultTitle = document.title;
this._titleMaxLength = 1000;
+ this._query = '';
+ this._rawQuery = '';
this._fullQuery = '';
this._documentUtil = new DocumentUtil();
this._progressIndicator = document.querySelector('#progress-indicator');
@@ -459,6 +461,31 @@ class Display extends EventDispatcher {
this._updateFocusedElement();
}
+ searchLast() {
+ const type = this._contentType;
+ if (type === 'clear') { return; }
+ const query = this._rawQuery;
+ const state = (
+ this._historyHasState() ?
+ clone(this._history.state) :
+ {
+ focusEntry: 0,
+ sentence: {text: query, offset: 0},
+ url: window.location.href
+ }
+ );
+ const details = {
+ focus: false,
+ history: false,
+ params: this._createSearchParams(type, query, false),
+ state,
+ content: {
+ definitions: null
+ }
+ };
+ this.setContent(details);
+ }
+
// Message handlers
_onMessage({action, params}, sender, callback) {
@@ -560,6 +587,8 @@ class Display extends EventDispatcher {
let clear = true;
this._historyHasChanged = true;
this._contentType = type;
+ this._query = '';
+ this._rawQuery = '';
const eventArgs = {type, urlSearchParams, token};
// Set content
@@ -570,9 +599,11 @@ class Display extends EventDispatcher {
let query = urlSearchParams.get('query');
if (!query) { break; }
+ this._query = query;
clear = false;
const isTerms = (type === 'terms');
query = this.postProcessQuery(query);
+ this._rawQuery = query;
let queryFull = urlSearchParams.get('full');
queryFull = (queryFull !== null ? this.postProcessQuery(queryFull) : query);
const wildcardsEnabled = (urlSearchParams.get('wildcards') !== 'off');
@@ -611,14 +642,20 @@ class Display extends EventDispatcher {
_onQueryParserSearch({type, definitions, sentence, inputInfo: {cause}, textSource, optionsContext}) {
const query = textSource.text();
- const history = (cause === 'click');
+ const historyState = this._history.state;
+ const history = (
+ cause === 'click' ||
+ !isObject(historyState) ||
+ historyState.cause !== 'queryParser'
+ );
const details = {
focus: false,
history,
params: this._createSearchParams(type, query, false),
state: {
sentence,
- optionsContext
+ optionsContext,
+ cause: 'queryParser'
},
content: {
definitions