138466997afeed868f4265c70bd950ef75a643c6
hiram
Wed Aug 21 12:04:23 2024 -0700
advanced search hoptions now hidden by default and allow debug flag to turn on API url reference refs #32596
diff --git src/hg/js/assemblySearch.js src/hg/js/assemblySearch.js
index dfd6944..b80ee0e 100644
--- src/hg/js/assemblySearch.js
+++ src/hg/js/assemblySearch.js
@@ -1,44 +1,64 @@
// global variables:
+var debug = false;
var measureTiming = false;
var urlParams;
var searchFor = "";
var maxItemsOutput = 500;
var asmIdText = null;
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);
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('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";
+ // Append the new list item to the ordered list
+ searchTipList.appendChild(li);
+ }
var searchForm = document.getElementById('searchForm');
+ var advancedSearchButton = document.getElementById('advancedSearchButton');
var searchInput = document.getElementById('searchBox');
var clearButton = document.getElementById('clearSearch');
asmIdText = document.getElementById("formAsmId");
betterCommonName = document.getElementById("betterCommonName");
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) {
@@ -46,30 +66,43 @@
var searchTerm = document.getElementById('searchBox').value;
var resultCountLimit = document.getElementById('maxItemsOutput');
var browserExist = "mustExist";
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 ||
+ advancedSearchOptions.style.display === "none") {
+ advancedSearchOptions.style.display = "flex";
+ this.textContent = "hide advanced search options"; // Change button text
+ } else {
+ advancedSearchOptions.style.display = "none";
+ this.textContent = "show advanced search options"; // Change button text
+ }
+ });
+
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) {
@@ -264,30 +297,42 @@
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (4 === this.readyState && 200 === this.status) {
requestSubmitButton.value = "request completed";
} else {
if (4 === this.readyState && 404 === this.status) {
failedRequest(url);
}
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
} // sendRequest: function(name, email. asmId)
+// do not allow both checkboxes to go off
+function atLeastOneCheckBoxOn(e) {
+ var mustExist = document.getElementById('mustExist').checked;
+ var notExist = document.getElementById('notExist').checked;
+ if (! mustExist && ! notExist ) { // turn on the other one when both off
+ if (e.name === "mustExist") {
+ document.getElementById('notExist').checked = true;
+ } else {
+ document.getElementById('mustExist').checked = true;
+ }
+ }
+}
function checkForm(e) {
if (requestSubmitButton.value === "request completed") {
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
closeModal(e);
return;
}
var form = (e.target) ? e.target : e.srcElement;
if(form.name.value === "") {
alert("Please enter your Name");
form.name.focus();
@@ -406,32 +451,34 @@
});
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);
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";
enableButtons();
var data = JSON.parse(xhr.responseText);
populateTableAndInfo(data);
} else {
// Hide the wait spinner once the AJAX request is complete
document.querySelector(".submitContainer").classList.remove("loading");
document.getElementById("loadingSpinner").style.display = "none";