From fd9bb02aab031c87515692a351e0e07d9d1c9d19 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Thu, 16 Mar 2023 12:36:02 -0400 Subject: [PATCH] Fix search widget when swapping document in new code viewer --- src/js/code-viewer.js | 20 +++++++++++++++++--- src/js/codemirror/search.js | 14 ++++++++++++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/js/code-viewer.js b/src/js/code-viewer.js index e782809d0..a290cb0b8 100644 --- a/src/js/code-viewer.js +++ b/src/js/code-viewer.js @@ -208,7 +208,7 @@ async function setURL(resourceURL) { afterDoc = new CodeMirror.Doc(r.text, r.mime || ''); urlToDocMap.set(afterURL, afterDoc); } - cmEditor.swapDoc(afterDoc); + swapDoc(afterDoc); currentURL = afterURL; setInputURL(afterURL); const a = qs$('.cm-search-widget .sourceURL'); @@ -244,6 +244,20 @@ function removeURL(url) { /******************************************************************************/ +function swapDoc(doc) { + const r = cmEditor.swapDoc(doc); + if ( self.searchThread ) { + self.searchThread.setHaystack(cmEditor.getValue()); + } + const input = qs$('.cm-search-widget-input input[type="search"]'); + if ( input.value !== '' ) { + qs$('.cm-search-widget').dispatchEvent(new Event('input')); + } + return r; +} + +/******************************************************************************/ + async function start() { await setURL(params.get('url')); @@ -254,7 +268,7 @@ async function start() { dom.on('#reloadURL', 'click', ( ) => { const input = qs$('#header input[type="url"]'); const url = input.value; - const beforeDoc = cmEditor.swapDoc(new CodeMirror.Doc('', '')); + const beforeDoc = swapDoc(new CodeMirror.Doc('', '')); fetchResource(url).then(r => { if ( urlToDocMap.has(url) === false ) { return; } const afterDoc = r !== undefined @@ -262,7 +276,7 @@ async function start() { : beforeDoc; urlToDocMap.set(url, afterDoc); if ( currentURL !== url ) { return; } - cmEditor.swapDoc(afterDoc); + swapDoc(afterDoc); }); }); diff --git a/src/js/codemirror/search.js b/src/js/codemirror/search.js index c25e90889..f05f6d2fc 100644 --- a/src/js/codemirror/search.js +++ b/src/js/codemirror/search.js @@ -70,8 +70,18 @@ ); }; - const searchWidgetInputHandler = function(cm) { - let state = getSearchState(cm); + const searchWidgetInputHandler = function(cm, ev) { + const state = getSearchState(cm); + if ( ev.isTrusted !== true ) { + if ( state.queryText === '' ) { + clearSearch(cm); + } else { + cm.operation(function() { + startSearch(cm, state); + }); + } + return; + } if ( queryTextFromSearchWidget(cm) === state.queryText ) { return; } if ( state.queryTimer !== null ) { clearTimeout(state.queryTimer);