60d9b1d7e95db856ac2a31eb65d5e08f4e732f4e chmalee Fri May 19 10:08:08 2023 -0700 Add short DNA sequence recognition regex to hgSearch/hgGateway so users can paste short sequences into the search box and go right to hgBlat, same as on hgTracks, refs #31292 diff --git src/hg/js/hgSearch.js src/hg/js/hgSearch.js index 54667c0..0cc5d47 100644 --- src/hg/js/hgSearch.js +++ src/hg/js/hgSearch.js @@ -732,30 +732,40 @@ function handleErrorState(jqXHR, textStatus) { cart.defaultErrorCallback(jqXHR, textStatus); $("#spinner").remove(); } function sendUserSearch() { // User has clicked the search button, if they also entered a search // term, fire off a search cart.debug(debugCartJson); var searchTerm = $("#searchBarSearchString").val().replaceAll("\"",""); if (searchTerm !== undefined && searchTerm.length > 0) { // put up a loading image $("#searchBarSearchButton").after("<i id='spinner' class='fa fa-spinner fa-spin'></i>"); + // redirect to hgBlat if the input looks like a DNA sequence + // minimum length=19 so we do not accidentally redirect to hgBlat for a gene identifier + // like ATG5 + var dnaRe = new RegExp("^(>[^\n\r ]+[\n\r ]+)?(\\s*[actgnACTGN \n\r]{19,}\\s*)$"); + if (dnaRe.test(searchTerm)) { + var blatUrl = "hgBlat?type=BLAT%27s+guess&userSeq="+searchTerm; + window.location.href = blatUrl; + return false; + } + // if the user entered a plain position string like chr1:blah-blah, just // go to the old cgi/hgTracks var canonMatch = searchTerm.match(canonicalRangeExp); var gbrowserMatch = searchTerm.match(gbrowserRangeExp); var lengthMatch = searchTerm.match(lengthRangeExp); var bedMatch = searchTerm.match(bedRangeExp); var sqlMatch = searchTerm.match(sqlRangeExp); var singleMatch = searchTerm.match(singleBaseExp); var positionMatch = canonMatch || gbrowserMatch || lengthMatch || bedMatch || sqlMatch || singleMatch; if (positionMatch !== null) { var prevCgi = uiState.prevCgi !== undefined ? uiState.prevCgi : "hgTracks"; window.location.replace("../cgi-bin/" + prevCgi + "?db=" + db + "position=" + encodeURIComponent(searchTerm)); return; }