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();