7ce36f0c36f7d858a22186a84f621082ca6b17a1
chmalee
  Fri Apr 21 09:40:49 2023 -0700
When doing a singplePos redirect I forgot to check for supertrack child settings and was missing the parent visibilities on the url, refs #31090

diff --git src/hg/hgSearch/hgSearch.c src/hg/hgSearch/hgSearch.c
index 6996ed1..d2c518e 100644
--- src/hg/hgSearch/hgSearch.c
+++ src/hg/hgSearch/hgSearch.c
@@ -613,33 +613,55 @@
 // if the search would normally be a singlePos, like a chromosome name or HGVS search,
 // we can just go directly there. But if we aren't a singlePos, we need to show
 // the results page
 boolean doRedirect = TRUE;
 measureTiming = cartUsualBoolean(cart, "measureTiming", FALSE);
 struct hgPositions *hgp = doQuery(cj->jw, db, allCategories, doRedirect, userSearch, measureTiming);
 // Since we are coming from another CGI or a URL manip, go directly to hgTracks
 // if we resolve to a single position
 if (hgp && hgp->singlePos)
     {
     char newPosBuf[128];
     safef(newPosBuf, sizeof(newPosBuf), "%s:%d-%d", hgp->singlePos->chrom, hgp->singlePos->chromStart+1, hgp->singlePos->chromEnd);
     cartSetString(cj->cart, "position", newPosBuf);
     if (hgp->singlePos->highlight)
         cartSetString(cj->cart, "addHighlight", hgp->singlePos->highlight);
+    char *trackName = hgp->tableList->name;
+    struct trackDb *track = NULL;
+    track = tdbForTrack(db, trackName, &hgFindTdbList);
+    if (!track && startsWith("all_", trackName))
+        track = tdbForTrack(db, trackName+strlen("all_"), &hgFindTdbList);
+    if (!track)
+        errAbort("no track for table \"%s\" found via a findSpec", trackName);
     puts("Content-type:text/html\n");
     puts("<HTML>\n<HEAD>\n");
-    printf("<script>window.location.href=\"../cgi-bin/hgTracks?db=%s&position=%s\";</script>\n", db, newPosBuf);
+    printf("<script>window.location.href=\"../cgi-bin/hgTracks?");
+    printf("db=%s", db);
+    printf("&position=%s", newPosBuf);
+    printf("&%s=pack", trackName);
+    printf("&hgFind.matches=%s", hgp->singlePos->name);
+    if (track && track->parent)
+        {
+        if (tdbIsSuperTrackChild(track))
+            printf("&%s=show", track->parent->track);
+        else
+            {
+            // tdb is a subtrack of a composite or a view
+            printf("&%s_sel=1&%s_sel=1", trackName, track->parent->track);
+            }
+        }
+    printf("\"</script>\n");
     puts("</HEAD>\n</HTML>");
     }
 else
     {
     dyStringPrintf(cj->jw->dy, ", \"db\": '%s'", db);
     dyStringPrintf(cj->jw->dy, ", \"categs\": ");
     jsonDyStringPrint(cj->jw->dy, categsJsonElement, NULL,-1);
     dyStringPrintf(cj->jw->dy, ", \"trackGroups\": ");
     jsonDyStringPrint(cj->jw->dy, makeTrackGroupsJson(db), NULL, -1);
     dyStringPrintf(cj->jw->dy, ", \"genomes\": ");
     jsonDyStringPrint(cj->jw->dy, getGenomes(), NULL, -1);
 
     // Now we need to actually spit out the page + json
     webStartGbNoBanner(cart, db, "Search Disambiguation");
     printMainPageIncludes();