diff --git a/asl_rulebook2/webapp/static/MainApp.js b/asl_rulebook2/webapp/static/MainApp.js index 8b02f6d..985ded1 100644 --- a/asl_rulebook2/webapp/static/MainApp.js +++ b/asl_rulebook2/webapp/static/MainApp.js @@ -77,11 +77,7 @@ gMainApp.component( "main-app", { this.getFootnoteIndex(), this.getASOP(), ] ).then( () => { - this.isLoaded = true ; - gEventBus.emit( "app-loaded" ) ; - $( "#watermark" ).css( "opacity", 0.15 ) ; - this.showStartupMsgs() ; - $( "#query-string" ).focus() ; // nb: because autofocus on the doesn't work :-/ + this.onStartupDone() ; } ).catch( () => { // NOTE: Each individual Promise should report their own errors i.e. what could we do here, // other than show a generic "startup failed" error? @@ -115,21 +111,6 @@ gMainApp.component( "main-app", { resp["empty"] = { "cdoc_id": "empty", "title": "Empty document" } ; // nb: for testing porpoises self.contentDocs = resp ; self.installContentDocs( resp ) ; - // start off showing the main ASL rulebook - // NOTE: To avoid forcing the user to configure which document this is, we assume that - // it's the one with the most targets. - let targetCdocId = null ; - for ( let cdocId in self.contentDocs ) { - if ( self.contentDocs[cdocId].targets == undefined ) - continue - if ( targetCdocId == null || Object.keys(self.contentDocs[cdocId].targets).length > Object.keys(self.contentDocs[targetCdocId].targets).length ) - targetCdocId = cdocId ; - } - if ( targetCdocId != null ) { - Vue.nextTick( () => { - gEventBus.emit( "show-page", targetCdocId, 1 ) ; - } ) ; - } } ).catch( (errorMsg) => { showErrorMsg( "Couldn't get the content docs.", errorMsg ) ; } ) ; @@ -212,9 +193,9 @@ gMainApp.component( "main-app", { } ) ; }, - showStartupMsgs() { + onStartupDone() { // show any startup messages - return getJSON( gGetStartupMsgsUrl ).then( (resp) => { //eslint-disable-line no-undef + getJSON( gGetStartupMsgsUrl ).then( (resp) => { //eslint-disable-line no-undef [ "info", "warning", "error" ].forEach( (msgType) => { if ( ! resp[msgType] ) return ; @@ -227,6 +208,40 @@ gMainApp.component( "main-app", { } ).catch( (errorMsg) => { showErrorMsg( "Couldn't get the startup messages.", errorMsg ) ; } ) ; + // check if we should start with a query + let queryString = gUrlParams.get( "query" ) || gUrlParams.get( "q" ) ; + if ( window.location.hash != "" ) + queryString = window.location.hash.substring( 1 ) ; + if ( queryString != null && queryString != undefined ) { + // yup - make it so + // NOTE: The content pane flickers as it shows the cover page, then jumps to search result. + // I tried opening the PDF at the target destination, but the same thing still happens :-( + gEventBus.emit( "search", queryString ) ; + } else { + // start off showing the main ASL rulebook + // NOTE: To avoid forcing the user to configure which document this is, + // we assume that it's the one with the most targets. + let targetCdocId = null ; + for ( let cdocId in this.contentDocs ) { + if ( this.contentDocs[cdocId].targets == undefined ) + continue + if ( targetCdocId == null || Object.keys(this.contentDocs[cdocId].targets).length > Object.keys(this.contentDocs[targetCdocId].targets).length ) + targetCdocId = cdocId ; + } + if ( targetCdocId != null ) { + Vue.nextTick( () => { + gEventBus.emit( "show-page", targetCdocId, 1 ) ; + } ) ; + } + } + // update the UI + $( "#watermark" ).css( "opacity", 0.15 ) ; + this.$nextTick( () => { + $( "#query-string" ).focus() ; // nb: because autofocus on the doesn't work :-/ + } ) ; + // notify everyone that startup has completed + this.isLoaded = true ; + gEventBus.emit( "app-loaded" ) ; }, onEscapePressed() { diff --git a/asl_rulebook2/webapp/static/SearchPane.js b/asl_rulebook2/webapp/static/SearchPane.js index e5e64f6..503f67f 100644 --- a/asl_rulebook2/webapp/static/SearchPane.js +++ b/asl_rulebook2/webapp/static/SearchPane.js @@ -1,4 +1,4 @@ -import { gMainApp, gAppConfig, gUrlParams, gEventBus } from "./MainApp.js" ; +import { gMainApp, gAppConfig, gEventBus } from "./MainApp.js" ; import { gUserSettings, saveUserSettings } from "./UserSettings.js" ; import { postURL, findTargets, getPrimaryTarget, linkifyAutoRuleids, fixupSearchHilites, hideFootnotes } from "./utils.js" ; @@ -71,15 +71,6 @@ gMainApp.component( "search-box", { } } ) ; - gEventBus.on( "app-loaded", () => { - // check if we should start off with a query - let queryString = gUrlParams.get( "query" ) || gUrlParams.get( "q" ) || gAppConfig.WEBAPP_INITIAL_QUERY_STRING ; - if ( window.location.hash != "" ) - queryString = window.location.hash.substring( 1 ) ; - if ( queryString != null && queryString != undefined ) - gEventBus.emit( "search-for", queryString ) ; - } ) ; - gEventBus.on( "tab-activated", (tabbedPages, tabId) => { // set focus to the query string input box if ( tabbedPages.tabbedPagesId == "nav" && tabId == "search" )