16eee40c920d259c10ee345472708d0cc0cc3393
chmalee
  Tue Mar 3 11:25:23 2026 -0800
Adds an hg.conf defined 'popular' species list to the new search bar as a 'default' list of results upon focus of the search bar. Combines with 'recents' list. Add a chevron next to the search bar so users know the autocomplete has some default options, refs #36232

diff --git src/hg/hgConvert/hgConvert.c src/hg/hgConvert/hgConvert.c
index b6c0212324b..44fde6ffc9f 100644
--- src/hg/hgConvert/hgConvert.c
+++ src/hg/hgConvert/hgConvert.c
@@ -114,31 +114,30 @@
 
 /* Hidden fields for form submission */
 hPrintf("<input name='%s' value='%s' type='hidden'>\n", HGLFT_TOORG_VAR, toDb->organism);
 hPrintf("<input name='%s' value='%s' type='hidden'>\n", HGLFT_TODB_VAR, liftOver->toDb);
 
 /* Search bar */
 char *searchBarId = "toGenomeSearch";
 puts("<div class='fieldRow'>\n");
 puts("<span class='fieldLabel'>Search:</span>\n");
 printGenomeSearchBar(searchBarId, "Search for target genome...", NULL, TRUE, NULL, NULL);
 puts("</div>\n");
 
 /* Current selection display */
 char *selectedLabel = getCurrentGenomeLabel(liftOver->toDb);
 hPrintf("<div class='currentSelection' id='toGenomeLabel'>%s</div>\n", selectedLabel);
-
 /* Assembly dropdown (updates based on genome selection) */
 puts("<div class='fieldRow'>\n");
 puts("<span class='fieldLabel'>Assembly:</span>\n");
 dbList = hGetLiftOverToDatabases(liftOver->fromDb);
 printAllAssemblyListHtmlParm(liftOver->toDb, dbList, HGLFT_TODB_VAR, TRUE, "change", onChangeToOrg);
 puts("</div>\n");
 
 /* QuickLift option */
 if (askAboutQuickLift)
     {
     puts("<div class='fieldRow' style='margin-top: 15px;'>\n");
     cgiMakeCheckBoxWithId("doQuickLift", quickLift, "doQuickLift");
     puts(" <label for='doQuickLift'>QuickLift tracks</label>\n");
     puts(" <a href='https://docs.google.com/document/d/1wecESHUpgTlE6U_Mj0OnfHeSZBrTX9hkZRN5jlJS8ZQ/edit?usp=sharing' "
          "target='ucscHelp' title='QuickLift is in beta testing' "
@@ -196,35 +195,54 @@
     "            document.mainForm.submit();\n"
     "        }\n"
     "\n"
     "        let selectEle = document.getElementById('toGenomeLabel');\n"
     "        initSpeciesAutoCompleteDropdown('%s', onGenomeSelect.bind(null, selectEle), null, null, processAndFilterResults, onSearchError);\n"
     "    });\n"
     "\n"
     "document.addEventListener('DOMContentLoaded', () => {\n"
     "    let btn = document.getElementById('%sButton');\n"
     "    if (btn) {\n"
     "        btn.addEventListener('click', () => {\n"
     "            let val = document.getElementById('%s').value;\n"
     "            $('[id=\\x27%s\\x27]').autocompleteCat('search', val);\n"
     "        });\n"
     "    }\n"
+    "    let toggle = document.getElementById('%sToggle');\n"
+    "    if (toggle) {\n"
+    "        let wasOpen = false;\n"
+    "        toggle.addEventListener('mousedown', () => {\n"
+    "            let $input = $('[id=\\x27%s\\x27]');\n"
+    "            wasOpen = $input.autocompleteCat('widget').is(':visible');\n"
+    "        });\n"
+    "        toggle.addEventListener('click', () => {\n"
+    "            let $input = $('[id=\\x27%s\\x27]');\n"
+    "            if (wasOpen) {\n"
+    "                $input.autocompleteCat('close');\n"
+    "            } else {\n"
+    "                $input.val('');\n"
+    "                $input.autocompleteCat('search', '');\n"
+    "                $input.focus();\n"
+    "            }\n"
+    "        });\n"
+    "    }\n"
     "});\n"
     , liftOver->fromDb
     , HGLFT_TOORG_VAR
     , HGLFT_TODB_VAR
     , searchBarId, searchBarId, searchBarId, searchBarId
+    , searchBarId, searchBarId, searchBarId
 );
 
 puts("</FORM>\n");
 
 cartWebEnd();
 }
 
 static double scoreLiftOverChain(struct liftOverChain *chain,
     char *fromOrg, char *fromDb, char *toOrg, char *toDb, struct hash *dbRank )
 /* Score the chain in terms of best match for cart settings */
 {
 double score = 0;
 
 char *chainFromOrg = hOrganism(chain->fromDb);
 char *chainToOrg = hOrganism(chain->toDb);