28bdadf237c69b5f8bd7ff2128210c82dddbd653 hiram Mon Aug 26 08:25:37 2024 -0700 coordinate the findGenome arguments with the assemblySearch javaScript refs #32596 diff --git src/hg/js/assemblySearch.js src/hg/js/assemblySearch.js index 30b4e45..055445c 100644 --- src/hg/js/assemblySearch.js +++ src/hg/js/assemblySearch.js @@ -1,43 +1,65 @@ // global variables: var debug = false; var measureTiming = false; var urlParams; -var searchFor = ""; +var query = ""; var maxItemsOutput = 500; var asmIdText = null; +// adjust default here and in assemblySearch.html +var browserExist = "mayExist"; var betterCommonName = null; var comment = null; var requestSubmitButton = null; var completedAsmId = new Map(); // keep track of requests completed // so they won't be repeated // This function is called on DOMContentLoaded as the initialization // procedure for first time page draw document.addEventListener('DOMContentLoaded', function() { // allow semi colon separators as well as ampersand - var queryString = window.location.search.replaceAll(";", "&"); - urlParams = new URLSearchParams(queryString); + var urlArgList = window.location.search.replaceAll(";", "&"); + urlParams = new URLSearchParams(urlArgList); if (urlParams.has('measureTiming')) { // accepts no value or other string var measureValue = urlParams.get('measureTiming'); if ("0" === measureValue | "off" === measureValue) { measureTiming = false; } else { // any other string turns it on measureTiming = true; } } + if (urlParams.has('browser')) { + var browserValue = urlParams.get('browser'); + if ("mayExist" === browserValue) { + browserExist = "mayExist"; + document.getElementById('mustExist').checked = true; + document.getElementById('notExist').checked = true; + } else if ("mustExist" === browserValue) { + browserExist = "mustExist"; + document.getElementById('mustExist').checked = true; + document.getElementById('notExist').checked = false; + } else if ("notExist" === browserValue) { + browserExist = "notExist"; + document.getElementById('mustExist').checked = false; + document.getElementById('notExist').checked = true; +// } else { + // not going to worry about this here today, but there should be + // a non-obtrusive dialog pop-up message about illegal arguments +// alert("warning: illegal value for browser=... must be one of: mayExist, mustExist, notExist"); + } + } if (urlParams.has('debug')) { // accepts no value or other string var debugValue = urlParams.get('debug'); if ("0" === debugValue | "off" === debugValue) { debug = false; } else { // any other string turns it on debug = true; } } // add extra element to the help text bullet list for API example if (debug) { var searchTipList = document.getElementById("searchTipList"); // Create a new list item var li = document.createElement("li"); li.innerHTML = "example API call: n/a"; @@ -54,31 +76,31 @@ comment = document.getElementById("comment"); requestSubmitButton = document.getElementById("submitButton"); document.getElementById("modalFeedback").addEventListener("submit", checkForm, false); modalInit(); clearButton.addEventListener('click', function() { searchInput.value = ''; // Clear the search input field }); searchForm.addEventListener('submit', function(event) { event.preventDefault(); // Prevent form submission var searchTerm = document.getElementById('searchBox').value; var resultCountLimit = document.getElementById('maxItemsOutput'); - var browserExist = "mustExist"; + browserExist = "mayExist"; var mustExist = document.getElementById('mustExist').checked; var notExist = document.getElementById('notExist').checked; if (mustExist && notExist) { browserExist = "mayExist"; } else if (notExist) { browserExist = "notExist"; } var wordMatch = document.querySelector('input[name="wordMatch"]:checked').value; makeRequest(searchTerm, browserExist, resultCountLimit.value, wordMatch); }); advancedSearchButton.addEventListener('click', function() { var advancedSearchOptions = document.getElementById("advancedSearchOptions"); // I don't know why it is false the first time ? if (! advancedSearchOptions.style.display || @@ -91,34 +113,34 @@ } }); var tableHeader = document.getElementById('tableHeader'); headerRefresh(tableHeader); if (urlParams.has('maxItemsOutput')) { maxItemsOutput = parseInt(urlParams.get('maxItemsOutput'), 10); if (maxItemsOutput < 1) { maxItemsOutput = 1; } else if (maxItemsOutput > 1000) { maxItemsOutput = 1000; } document.getElementById('maxItemsOutput').value = maxItemsOutput; } - if (urlParams.has('searchFor')) { - searchFor = urlParams.get('searchFor'); - if (searchFor.length > 0) { - searchInput.value = searchFor; + if (urlParams.has('q')) { + query = urlParams.get('q'); + if (query.length > 0) { + searchInput.value = query; document.getElementById('submitSearch').click(); } } document.getElementById("measureTiming").style.display = "none"; }); // refresh the thead columns in the specified table function headerRefresh(tableHead) { // clear existing content tableHead.innerHTML = ''; // re-populate header row - the sortable system added a class to // the last sorted column, need to rebuild the headerRow to get the // header back to pristine condition for the next sort var headerRow = ''; headerRow += '
view/
request ⓘ"view" opens the genome browser for an existing assembly, "request" opens an assembly request form.
'; @@ -178,31 +200,31 @@ dataRow += "" + genomicEntries[id].commonName + ""; dataRow += "" + genomicEntries[id].scientificName + ""; dataRow += "" + asmInfoUrl + ""; dataRow += "" + genomicEntries[id].clade + ""; dataRow += "" + genomicEntries[id].description + ""; dataRow += ''; tableBody.innerHTML += dataRow; } var dataTable = document.getElementById('dataTable'); sorttable.makeSortable(dataTable); var itemCount = parseInt(extraInfo.itemCount, 10); var totalMatchCount = parseInt(extraInfo.totalMatchCount, 10); var availableAssemblies = parseInt(extraInfo.availableAssemblies, 10); - var resultCounts = "results for search string: '" + extraInfo.genomeSearch + "', "; + var resultCounts = "results for search string: '" + extraInfo.q + "', "; if ( itemCount === totalMatchCount ) { resultCounts += "showing " + itemCount.toLocaleString() + " match results, "; } else { resultCounts += "showing " + itemCount.toLocaleString() + " match results "; resultCounts += "from " + totalMatchCount.toLocaleString() + " total matches, "; } resultCounts += "out of " + availableAssemblies.toLocaleString() + " total number of assemblies"; document.getElementById('resultCounts').innerHTML = resultCounts; if (measureTiming) { var etMs = extraInfo.elapsedTimeMs; var elapsedTime = "" + etMs.toLocaleString() + " milliseconds"; if ( etMs > 1000 ) { var etSec = etMs/1000; elapsedTime = "" + etSec.toFixed(2) + " seconds"; } @@ -447,31 +469,31 @@ queryPlus += " " + word; // space separates each word } else { queryPlus += " +" + word; } }); queryString = queryPlus.trimStart(); // remove first space character } } // Show the wait spinner document.querySelector(".submitContainer").classList.add("loading"); document.getElementById("loadingSpinner").style.display = "block"; var xhr = new XMLHttpRequest(); var urlPrefix = "/cgi-bin/hubApi"; - var url = "/findGenome?genomeSearch=" + encodeURIComponent(queryString); + var url = "/findGenome?q=" + encodeURIComponent(queryString); url += ";browser=" + browserExist; url += ";maxItemsOutput=" + resultLimit; if (debug) { var apiUrl = "" + url + ""; document.getElementById("recentAjax").innerHTML = apiUrl; } xhr.open('GET', urlPrefix + url, true); xhr.onload = function() { if (xhr.status === 200) { // Hide the wait spinner once the AJAX request is complete document.querySelector(".submitContainer").classList.remove("loading"); document.getElementById("loadingSpinner").style.display = "none";