47ea57080b515e5dad5f658c58feb8944a7e7d61
chmalee
  Thu Jan 29 15:30:26 2026 -0800
Replace clade/assembly dropdowns with a search bar on most CGIs. Add a recents list to hgGateway and to the species bar and to the 'Genomes' dropdown menu. Track recently selected species in localStorage. Add toGenome and fromGenome arguemnts to hubApi/liftOver in order to find appropriate liftover assemblies, refs #36232

diff --git src/hg/cgilib/cartJson.c src/hg/cgilib/cartJson.c
index ec3be61dcb5..43bdd46d203 100644
--- src/hg/cgilib/cartJson.c
+++ src/hg/cgilib/cartJson.c
@@ -713,40 +713,41 @@
  * value, set it to the value. */
 {
 struct hashCookie cookie = hashFirst(paramHash);
 struct hashEl *hel;
 while ((hel = hashNext(&cookie)) != NULL)
     {
     if (isEmpty(cartOptionalString(cj->cart, hel->name)))
 	{
 	char *val = jsonStringVal((struct jsonElement *)(hel->val), hel->name);
 	if (val)
 	    cartSetString(cj->cart, hel->name, val);
 	}
     }
 }
 
-static void jsonWriteValueLabel(struct jsonWrite *jw, char *value, char *label)
-/* Assuming we're already in an object, write out value and label tags & strings. */
+//static void jsonWriteValueLabel(struct jsonWrite *jw, char *value, char *label)
+/* Assuming we're already in an object, write out value and label tags & strings. 
 {
 jsonWriteString(jw, "value", value);
 jsonWriteString(jw, "label", label);
 }
+*/
 
-static void printCladeOrgDbTree(struct jsonWrite *jw)
+//static void printCladeOrgDbTree(struct jsonWrite *jw)
 /* Print out the tree of clades, organisms and dbs as JSON.  Each node has value and label
- * for menu options; clade nodes and org nodes also have children and default. */
+ * for menu options; clade nodes and org nodes also have children and default. 
 {
 jsonWriteListStart(jw, "cladeOrgDb");
 struct slPair *clade, *cladeOptions = hGetCladeOptions();
 struct dbDb *centralDbDbList = hDbDbList();
 for (clade = cladeOptions;  clade != NULL;  clade = clade->next)
     {
     jsonWriteObjectStart(jw, NULL);
     jsonWriteValueLabel(jw, clade->name, clade->val);
     jsonWriteListStart(jw, "children");
     struct slPair *org, *orgOptions = hGetGenomeOptionsForClade(clade->name);
     for (org = orgOptions;  org != NULL;  org = org->next)
         {
         jsonWriteObjectStart(jw, NULL);
         jsonWriteValueLabel(jw, org->name, org->val);
         jsonWriteListStart(jw, "children");
@@ -763,36 +764,37 @@
                 jsonWriteValueLabel(jw, dbDb->name, dbDb->description);
                 jsonWriteString(jw, "defaultPos", dbDb->defaultPos);
                 jsonWriteObjectEnd(jw);
                 }
             }
         jsonWriteListEnd(jw);   // children (dbs)
         jsonWriteString(jw, "default", trimSpaces(hDefaultDbForGenome(org->name)));
         jsonWriteObjectEnd(jw); // org
         }
     jsonWriteListEnd(jw);   // children (orgs)
     jsonWriteString(jw, "default", trimSpaces(hDefaultGenomeForClade(clade->name)));
     jsonWriteObjectEnd(jw); // clade
     }
 jsonWriteListEnd(jw);
 }
+*/
 
 static void getCladeOrgDbPos(struct cartJson *cj, struct hash *paramHash)
 /* Get cart's current clade, org, db, position and geneSuggest track. */
 {
 jsonWriteObjectStart(cj->jw, "cladeOrgDb");
-printCladeOrgDbTree(cj->jw);
+//printCladeOrgDbTree(cj->jw);
 char *db = cartString(cj->cart, "db");
 jsonWriteString(cj->jw, "db", db);
 char *org = cartUsualString(cj->cart, "org", hGenome(db));
 jsonWriteString(cj->jw, "org", org);
 char *clade = cartUsualString(cj->cart, "clade", hClade(org));
 jsonWriteString(cj->jw, "clade", clade);
 jsonWriteObjectEnd(cj->jw);
 char *position = cartOptionalString(cj->cart, "position");
 if (isEmpty(position))
     position = hDefaultPos(db);
 jsonWriteString(cj->jw, "position", position);
 printGeneSuggestTrack(cj, db);
 }
 
 static void getStaticHtml(struct cartJson *cj, struct hash *paramHash)