8b044d5f4044e8450db06f21481249e95bec7f85
kate
  Wed Mar 3 17:07:11 2021 -0800
Multi-region link on hgTrackUi now turns track on in dense if it was hidden. Responding to QA note 22. refs #26385

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 99d609f..4f30426 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -337,31 +337,31 @@
     }
 
 char id[256];
 safef(id, sizeof id, "div_%s_link", tdb->track);
 printf("%s<A id='%s' HREF='#a_meta_%s' "
    "title='Show metadata details...'>%s<img src='../images/downBlue.png'/></A>",
    (embeddedInText?"&nbsp;":"<P>"),id,tdb->track, (title?title:""));
 jsOnEventByIdF("click", id, "return metadataShowHide(\"%s\",%s,true);", 
     tdb->track, showLongLabel?"true":"false");
 printf("<DIV id='div_%s_meta' style='display:none;'>%s</div>",tdb->track, metadataAsHtmlTable(db,tdb,showLongLabel,FALSE));
 return TRUE;
 }
 
 /* Multi-region UI */
 
-boolean makeMultiRegionLink(char *db, struct trackDb *tdb)
+boolean makeMultiRegionLink(char *db, struct trackDb *tdb, struct cart *cart)
 /* Make a link to launch browser in multi-region custom URL mode, based on
  * track setting. This includes creating a custom track displaying the regions.
  * The link switches to exit multi-region if browser is already in multi-region mode
  * based on regions defined for this track. */
 {
 char *regionUrl = trackDbSetting(tdb, MULTI_REGION_BED_URL);
 if (isEmpty(regionUrl))
     return FALSE;
 
 // make custom track for regions, alternating colors
 
 // TODO: truncate CT name and label at word boundary
 // TODO: fix bedPackDense to work with multi-region
 // TODO: limit number of regions ?
 struct dyString *dsCustomText = dyStringCreate(
@@ -507,54 +507,60 @@
 hexBinaryString(hash, SHA_DIGEST_LENGTH, newSha1, (SHA_DIGEST_LENGTH + 1) * 2);
 char sha1File[1024];
 safef(sha1File, sizeof sha1File, "%s.sha1", mrTn.forCgi);
 f = mustOpen(sha1File, "w");
 mustWrite(f, newSha1, strlen(newSha1));
 carefulClose(&f);
 
 char customHtml[1000];
 safef(customHtml, sizeof customHtml, "<h2>Description</h2>\n"
     "<p>This custom track displays regions of interest for the "
     "<a href='../cgi-bin/hgTrackUi?db=%s&g=%s'><em>%s</em> track</a>.</p>",
         db, tdb->track, tdb->shortLabel);
 
 // TODO: support #padding in custom regions file
 
+enum trackVisibility vis =
+                hTvFromString(cartUsualString(cart, tdb->track, hStringFromTv(tdb->visibility)));
+if (vis == tvHide)
+    vis = tvDense;
+
 printf("<p>");
 printf("<a href='../cgi-bin/hgTracks?"
                 "virtMode=1&"
                 "virtModeType=customUrl&"
                 "virtWinFull=on&"
                 "virtShortDesc=%s&"
                 "multiRegionsBedUrl=%s&"
                 "%s=%s&"
+                "%s=%s&"
                 "%s=%s'>"
         "Display regions of interest (%d)</a>",
-                    tdb->track, cgiEncode(regionFile),
+                    tdb->track, cgiEncode(regionFile), tdb->track, hStringFromTv(vis),
                     CT_CUSTOM_DOC_TEXT_VAR, cgiEncode(customHtml),
                     CT_CUSTOM_TEXT_VAR, cgiEncode(dyStringCannibalize(&dsCustomText)), regionCount);
 printf(" in multi-region view (custom regions mode)");
 printf("&nbsp;&nbsp;&nbsp;");
 printf("<a href=\"../goldenPath/help/multiRegionHelp.html\" target=_blank>(Help)</a>\n");
 printf("</p>");
 return TRUE;
 }
 
-void extraUiLinks(char *db,struct trackDb *tdb)
+void extraUiLinks(char *db, struct trackDb *tdb, struct cart *cart)
 // Show metadata, and downloads, schema links where appropriate
 {
-makeMultiRegionLink(db, tdb);
+makeMultiRegionLink(db, tdb, cart);
 
 struct slPair *pairs = trackDbMetaPairs(tdb);
 if (pairs != NULL)
     printf("<b>Metadata:</b><br>%s\n", pairsAsHtmlTable( pairs, tdb, FALSE, FALSE));
 else if (!tdbIsComposite(tdb) && !trackHubDatabase(db) && (metadataForTable(db, tdb, NULL) != NULL))
     printf("<b>Metadata:</b><br>%s\n", metadataAsHtmlTable(db, tdb, FALSE, FALSE));
 
 boolean schemaLink = trackDataAccessible(db, tdb);
 boolean downloadLink = (trackDbSetting(tdb, "wgEncode") != NULL && !tdbIsSuperTrack(tdb));
 int links = 0;
 if (schemaLink)
     links++;
 if (downloadLink)
     links++;