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: <span id=\"recentAjax\">n/a</span>";
@@ -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 = '<tr>';
   headerRow += '<th><div class=tooltip>view/<br>request &#9432;<span onclick="event.stopPropagation()" class="tooltiptext"><em>"view"</em> opens the genome browser for an existing assembly, <em>"request"</em> opens an assembly request form.</span></div></th>';
@@ -178,31 +200,31 @@
         dataRow += "<td>" + genomicEntries[id].commonName + "</td>";
         dataRow += "<td>" + genomicEntries[id].scientificName + "</td>";
         dataRow += "<th>" + asmInfoUrl + "</th>";
         dataRow += "<td>" + genomicEntries[id].clade + "</td>";
         dataRow += "<td>" + genomicEntries[id].description + "</td>";
         dataRow += '</tr>';
         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 = "<em>results for search string: </em><b>'" + extraInfo.genomeSearch + "'</b>, ";
+    var resultCounts = "<em>results for search string: </em><b>'" + extraInfo.q + "'</b>, ";
     if ( itemCount === totalMatchCount ) {
       resultCounts += "<em>showing </em><b>" + itemCount.toLocaleString() + "</b> <em>match results</em>, ";
     } else {
       resultCounts += "<em>showing </em><b>" + itemCount.toLocaleString() + "</b> <em>match results</em> ";
       resultCounts += "<em>from </em><b>" + totalMatchCount.toLocaleString() + "</b> <em>total matches,</em> ";
     }
     resultCounts += "<em>out of </em><b>" + availableAssemblies.toLocaleString() + "</b> <em>total number of assemblies</em>";
     document.getElementById('resultCounts').innerHTML = resultCounts;
     if (measureTiming) {
       var etMs = extraInfo.elapsedTimeMs;
       var elapsedTime = "<b>" + etMs.toLocaleString() + "</b> <em>milliseconds</em>";
       if ( etMs > 1000 ) {
          var etSec = etMs/1000;
          elapsedTime = "<b>" + etSec.toFixed(2) + "</b> <em>seconds</em>";
       }
@@ -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 = "<a href='" + urlPrefix + url + "' target=_blank>" + url + "</a>";
       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";