fe68c1b1ff0235428aefefd9e8f68679f73f3fd6
hiram
Sat Aug 17 07:16:35 2024 -0700
initial prototype code for assemblySearch function refs #32596
diff --git src/hg/js/assemblySearch.js src/hg/js/assemblySearch.js
new file mode 100644
index 0000000..a1fe210
--- /dev/null
+++ src/hg/js/assemblySearch.js
@@ -0,0 +1,153 @@
+document.addEventListener('DOMContentLoaded', function() {
+ var searchForm = document.getElementById('searchForm');
+ var searchInput = document.getElementById('searchBox');
+ var clearButton = document.getElementById('clearSearch');
+
+ 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('limitResultCount');
+ var browserExist = document.querySelector('input[name="browserExist"]:checked').value;
+ var wordMatch = document.querySelector('input[name="wordMatch"]:checked').value;
+ makeRequest(searchTerm, browserExist, resultCountLimit.value, wordMatch);
+ });
+});
+
+// Function to generate the table and extra information
+function populateTableAndInfo(jsonData) {
+ var tableBody = document.getElementById('tableBody');
+ var metaData = document.getElementById('metaData');
+ document.getElementById('searchString').innerHTML = "";
+ document.getElementById('matchCounts').innerHTML = "0";
+ document.getElementById('availableAssemblies').innerHTML = "0";
+ document.getElementById('elapsedTime').innerHTML = "0";
+
+ // Clear existing table content
+ tableBody.innerHTML = '';
+ metaData.innerHTML = '';
+
+ // Extract the genomic entries and the extra info
+ const genomicEntries = {};
+ const extraInfo = {};
+
+ for (const key in jsonData) {
+ if (jsonData[key].scientificName) {
+ genomicEntries[key] = jsonData[key];
+ } else {
+ extraInfo[key] = jsonData[key];
+ }
+ }
+
+ var count = 0;
+ for (const id in genomicEntries) {
+ var dataRow = '
';
+ dataRow += "" + ++count + " | ";
+ var urlReference = id;
+ if (genomicEntries[id].browserExists) {
+ if (id.startsWith("GC")) {
+ urlReference = "" + id + "";
+ } else {
+ urlReference = "" + id + "";
+ }
+ }
+ dataRow += "" + urlReference + " | ";
+ dataRow += "" + genomicEntries[id].scientificName + " | ";
+ dataRow += "" + genomicEntries[id].commonName + " | ";
+ dataRow += "" + genomicEntries[id].clade + " | ";
+ dataRow += "" + genomicEntries[id].description + " | ";
+ dataRow += '
';
+ tableBody.innerHTML += dataRow;
+ }
+ var dataTable = document.getElementById('dataTable');
+ sorttable.makeSortable(dataTable);
+
+ document.getElementById('searchString').innerHTML = extraInfo['genomeSearch'];
+ document.getElementById('matchCounts').innerHTML = extraInfo['totalMatchCount'].toLocaleString();
+ document.getElementById('availableAssemblies').innerHTML = extraInfo['availableAssemblies'].toLocaleString();
+ var etMs = extraInfo['elapsedTimeMs'];
+ var elapsedTime = etMs.toLocaleString() + " milliseconds";
+ if ( etMs > 1000 ) {
+ var etSec = etMs/1000;
+ elapsedTime = etSec.toFixed(2) + " seconds";
+ }
+ document.getElementById('elapsedTime').innerHTML = elapsedTime.toLocaleString();
+} // function populateTableAndInfo(jsonData)
+
+function enableButtons() {
+ document.getElementById('submitButton').disabled = false;
+ document.getElementById('clearSearch').disabled = false;
+}
+
+function disableButtons() {
+ document.getElementById('submitButton').disabled = true;
+ document.getElementById('clearSearch').disabled = true;
+}
+
+function makeRequest(query, browserExist, resultLimit, wordMatch) {
+ // Disable the submit button
+ disableButtons();
+ var queryString = query;
+ // for allWords, place + sign in front of each word if not already there
+ if (wordMatch === "allWords") {
+ const words = query.split(/\s+/);
+ if (words.length > 1) { // not needed on only one word
+ var queryPlus = ""; // compose new query string
+ words.forEach(word => {
+ if (word.startsWith("+")) {
+ queryPlus += " " + word; // space separated 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 url = "https://genome-test.gi.ucsc.edu/cgi-bin/hubApi/findGenome?genomeSearch=" + encodeURIComponent(queryString);
+ url += ";browser=" + browserExist;
+ url += ";maxItemsOutput=" + resultLimit;
+
+ xhr.open('GET', 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";
+ enableButtons();
+ var tableBody = document.getElementById('tableBody');
+ var metaData = document.getElementById('metaData');
+ tableBody.innerHTML = '';
+ metaData.innerHTML = '';
+ metaData.innerHTML = "no results found for query: '" + queryString + "'";
+ document.getElementById('searchString').innerHTML = queryString;
+ document.getElementById('matchCounts').innerHTML = "0";
+ document.getElementById('availableAssemblies').innerHTML = "0";
+ document.getElementById('elapsedTime').innerHTML = "0";
+ }
+ };
+
+ xhr.onerror = function() {
+ alert('console.log("Request failed")');
+ console.log('Request failed');
+ };
+
+ xhr.send();
+}