94041c12e043016875ebd340568bda0ccaf122f6 lrnassar Wed Jul 8 13:53:22 2026 -0700 Add db= to cross-CGI hgTracks/hgTrackUi/hgc links to prevent wrong-assembly errors. refs #37840 Completes the incomplete work from #26892: links from the browser to a different CGI omitted db=, so the target CGI fell back to the cart's db (often wrong), producing "Can't find <track> in track database <db>" errors and broken shared links. Adds the current-assembly db to link builders across hgTracks (chromGraphTrack, expRatioTracks, config ruler and per-track configure links, variation), hgVai, hgFileUi, hgGtexTrackSettings, hgBlat, hgGene, hgNear, the barChart/GTEx faceted UI (facetedBar, barChartUi, gtexUi), and the hgTrackUi group-configure link. diff --git src/hg/lib/gtexUi.c src/hg/lib/gtexUi.c index 9e91e5c9e43..30755a0b27f 100644 --- src/hg/lib/gtexUi.c +++ src/hg/lib/gtexUi.c @@ -461,32 +461,32 @@ selected = cartCgiUsualString(cart, cartVar, GTEX_COLORS_DEFAULT); boolean isGtexColors = sameString(selected, GTEX_COLORS_GTEX); cgiMakeRadioButton(cartVar, GTEX_COLORS_GTEX, isGtexColors); printf("GTEx\n"); cgiMakeRadioButton(cartVar, GTEX_COLORS_RAINBOW, !isGtexColors); printf("Rainbow\n"); printf("</p>"); #endif /* Tissue filter */ printf("<br>"); printf("<div><b>Tissues:</b>\n"); safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_TISSUE_SELECT); if (isPopup) { - printf("<a href='%s?g=%s'><button type='button'>Change</button><a>", - hTrackUiForTrack(track), track); + printf("<a href='%s?db=%s&g=%s'><button type='button'>Change</button><a>", + hTrackUiForTrack(track), cartUsualString(cart, "db", ""), track); } else { jsMakeCheckboxGroupSetClearButton(cartVar, TRUE); puts(" "); jsMakeCheckboxGroupSetClearButton(cartVar, FALSE); } printf("</div>"); char *version = gtexVersion(tdb->table); struct gtexTissue *tissues = gtexGetTissues(version); struct slName *selectedValues = NULL; if (cartListVarExistsAnyLevel(cart, tdb, FALSE, GTEX_TISSUE_SELECT)) selectedValues = cartOptionalSlNameListClosestToHome(cart, tdb, FALSE, GTEX_TISSUE_SELECT); char *selectType = cgiUsualString("tis", "table"); if (sameString(selectType, "group")) @@ -579,32 +579,32 @@ puts("<div>"); puts(" "); gtexEqtlUiProbability(cart, track, tdb); puts(" "); /* Display or hide tissue color patch for single-tissue eQTL's */ gtexEqtlUiTissueColor(cart, track, tdb); puts("</div>\n"); /* Tissue filter */ printf("<br>"); printf("<div><b>Tissues:</b>\n"); safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_TISSUE_SELECT); if (isPopup) { - printf("<a href='%s?g=%s'><button type='button'>Change</button><a>", - hTrackUiForTrack(track), track); + printf("<a href='%s?db=%s&g=%s'><button type='button'>Change</button><a>", + hTrackUiForTrack(track), cartUsualString(cart, "db", ""), track); } else { jsMakeCheckboxGroupSetClearButton(cartVar, TRUE); puts(" "); jsMakeCheckboxGroupSetClearButton(cartVar, FALSE); } printf("</div>"); if (!isPopup) { char *version = gtexVersion(tdb->table); struct gtexTissue *tissues = gtexGetTissues(version); struct slName *selectedValues = NULL; if (cartListVarExistsAnyLevel(cart, tdb, FALSE, GTEX_TISSUE_SELECT)) selectedValues = cartOptionalSlNameListClosestToHome(cart, tdb, FALSE, GTEX_TISSUE_SELECT);