From 18043babeb8735a7707f273eab2b9364aa42ab7a Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Mon, 21 Dec 2020 19:19:59 -0500 Subject: [PATCH] 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 --- ext/bg/js/search.js | 2 +- ext/mixed/js/display.js | 41 +++++++++++++++++++++++++++++++++++++++-- 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