diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-10-09 17:06:51 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-09 17:06:51 -0400 |
commit | 0a8992d21550dff1176820d434b5dd7e4f233749 (patch) | |
tree | 70f06b7add2971a7bd3c41f5a63327a9040fba3f | |
parent | 0e4b769390ec88e609e862776dff2601227baaa5 (diff) |
Search query back button (#1981)
* Always allow history to go back/forward when using browser history
* Add a back button which is visible when using the query parser
-rw-r--r-- | ext/js/display/display-history.js | 7 | ||||
-rw-r--r-- | ext/js/display/display.js | 4 | ||||
-rw-r--r-- | ext/js/display/search-display-controller.js | 21 | ||||
-rw-r--r-- | ext/search.html | 1 |
4 files changed, 21 insertions, 12 deletions
diff --git a/ext/js/display/display-history.js b/ext/js/display/display-history.js index 449bec47..901a2d84 100644 --- a/ext/js/display/display-history.js +++ b/ext/js/display/display-history.js @@ -92,11 +92,6 @@ class DisplayHistory extends EventDispatcher { } _go(forward) { - const target = forward ? this._current.next : this._current.previous; - if (target === null) { - return false; - } - if (this._useBrowserHistory) { if (forward) { history.forward(); @@ -104,6 +99,8 @@ class DisplayHistory extends EventDispatcher { history.back(); } } else { + const target = forward ? this._current.next : this._current.previous; + if (target === null) { return false; } this._current = target; this._updateHistoryFromCurrent(true); } diff --git a/ext/js/display/display.js b/ext/js/display/display.js index ed1af17e..ed708b3a 100644 --- a/ext/js/display/display.js +++ b/ext/js/display/display.js @@ -1538,9 +1538,7 @@ class Display extends EventDispatcher { } _triggerContentUpdateStart() { - let {content} = this._history; - if (typeof content !== 'object' || content === null) { content = {}; } - this.trigger('contentUpdateStart', {type: this._contentType, query: this._query, content}); + this.trigger('contentUpdateStart', {type: this._contentType, query: this._query}); } _triggerContentUpdateEntry(dictionaryEntry, element, index) { diff --git a/ext/js/display/search-display-controller.js b/ext/js/display/search-display-controller.js index 2b97479e..c929ceaa 100644 --- a/ext/js/display/search-display-controller.js +++ b/ext/js/display/search-display-controller.js @@ -28,6 +28,7 @@ class SearchDisplayController { this._displayAudio = displayAudio; this._searchPersistentStateController = searchPersistentStateController; this._searchButton = document.querySelector('#search-button'); + this._searchBackButton = document.querySelector('#search-back-button'); this._queryInput = document.querySelector('#search-textbox'); this._introElement = document.querySelector('#intro'); this._clipboardMonitorEnableCheckbox = document.querySelector('#clipboard-monitor-enable'); @@ -75,6 +76,7 @@ class SearchDisplayController { this._display.setHistorySettings({useBrowserHistory: true}); this._searchButton.addEventListener('click', this._onSearch.bind(this), false); + this._searchBackButton.addEventListener('click', this._onSearchBackButtonClick.bind(this), false); this._wanakanaEnableCheckbox.addEventListener('change', this._onWanakanaEnableChange.bind(this)); window.addEventListener('copy', this._onCopy.bind(this)); this._clipboardMonitor.on('change', this._onExternalSearchUpdate.bind(this)); @@ -146,15 +148,20 @@ class SearchDisplayController { this._setWanakanaEnabled(enableWanakana); } - _onContentUpdateStart({type, query, content}) { + _onContentUpdateStart({type, query}) { let animate = false; let valid = false; + let showBackButton = false; switch (type) { case 'terms': case 'kanji': - animate = !!content.animate; - valid = (typeof query === 'string' && query.length > 0); - this._display.blurElement(this._queryInput); + { + const {content, state} = this._display.history; + animate = (typeof content === 'object' && content !== null && content.animate === true); + showBackButton = (typeof state === 'object' && state !== null && state.cause === 'queryParser'); + valid = (typeof query === 'string' && query.length > 0); + this._display.blurElement(this._queryInput); + } break; case 'clear': valid = false; @@ -165,6 +172,8 @@ class SearchDisplayController { if (typeof query !== 'string') { query = ''; } + this._searchBackButton.hidden = !showBackButton; + if (this._queryInput.value !== query) { this._queryInput.value = query; this._updateSearchHeight(true); @@ -193,6 +202,10 @@ class SearchDisplayController { this._search(true, 'new', true, null); } + _onSearchBackButtonClick() { + this._display.history.back(); + } + _onCopy() { // ignore copy from search page this._clipboardMonitor.setPreviousText(window.getSelection().toString().trim()); diff --git a/ext/search.html b/ext/search.html index 03ee781f..e435e657 100644 --- a/ext/search.html +++ b/ext/search.html @@ -50,6 +50,7 @@ </div> <div class="search-textbox-container"> <textarea id="search-textbox" class="scrollbar" placeholder="Input a term, expression, sentence, or block of text" autocomplete="off" lang="ja" autofocus></textarea> + <button id="search-back-button" class="search-button" hidden><span class="icon" data-icon="left-chevron"></span></button> <button id="search-button" class="search-button"><span class="icon" data-icon="magnifying-glass"></span></button> </div> </div> |