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";