ee8b9b26531c6606398b89ef86aa72469ab92bd5
max
  Tue Oct 28 09:29:27 2025 -0700
adding new info icon to group and making the hide group button do a refresh, refs #36610

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index e0be4437f9d..2b4336e35da 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -9664,96 +9664,108 @@
                 hPrintf("<th align=\"left\" colspan=%d class='quickToggleBar'>",MAX_CONTROL_COLUMNS);
             else
                 hPrintf("<th align=\"left\" colspan=%d class='nativeToggleBar'>",MAX_CONTROL_COLUMNS);
             hPrintf("<table style='width:100%%;'><tr><td style='text-align:left;'>");
             hPrintf("\n<A NAME=\"%sGroup\"></A>",group->name);
 
 	    char idText[256];
 	    safef(idText, sizeof idText, "%s_button", group->name);
             hPrintf("<IMG class='toggleButton'"
                     " id='%s' src=\"%s\" alt=\"%s\" title='%s this group'>&nbsp;&nbsp;",
                     idText, indicatorImg, indicator,isOpen?"Collapse":"Expand");
 	    jsOnEventByIdF("click", idText, "return vis.toggleForGroup(this, '%s');", group->name);
 
             if (isHubTrack(group->name))
 		{
+
                 if (strstr(group->label, "Collections"))
                     {
                     safef(idText, sizeof idText, "%s_edit", group->name);
                     hPrintf("<input name=\"hubEditButton\" id='%s'"
                         " type=\"button\" value=\"edit\">\n", idText);
                     jsOnEventByIdF("click", idText,
                         "document.editHubForm.submit();return true;");
                     }
                 }
 
             hPrintf("</td><td style='text-align:center; width:90%%;'>\n<B>%s</B>", group->label);
-            hPrintf("</td><td style='text-align:right;'>\n");
-            if (isHubTrack(group->name))
-		{
+            
             char *hubName = hubNameFromGroupName(group->name);
             struct trackHub *hub = grabHashedHub(hubName);
+            if (hubName)
+                {
+                puts("&nbsp;");
+                char infoText[10000];
+                safef(infoText, sizeof infoText, "A track hub is a list of tracks produced and hosted by external data providers. The UCSC browser group is not responsible for them. This hub is loaded from %s", hub->url);
+                printInfoIconColor(infoText, "white");
+                }
 
+            hPrintf("</td><td style='text-align:right;'>\n");
+            
+            if (hubName)
+		{
                 // visibility: hidden means that the element takes up space so the center alignment is not disturbed.
                 if (hub != NULL)
                     {
                     if (hub->descriptionUrl == NULL)
                         {
                         hPrintf("<a title='The track hub authors have not provided a descriptionUrl with background "
                                 "information about this track hub. ");
                         if (hub->email)
                             hPrintf("The authors can be reached at %s. ", hub->email);
                         hPrintf("This link leads to our documentation page about the descriptionUrl statement in hub.txt. ");
                         hPrintf("' href='../goldenPath/help/hgTrackHubHelp.html#hub.txt' "
                                 "style='color:#FFF; font-size: 13px;' target=_blank>No Info</a>");
                         }
                     else
                         {
                         hPrintf("<a title='Link to documentation about this track hub, provided by the track hub authors (not UCSC). ");
                         if (hub->email)
                             hPrintf("The authors can be reached at %s", hub->email);
                         hPrintf("' href='%s' "
                             "style='color:#FFF; font-size: 13px;' target=_blank>Info</a>", hub->descriptionUrl);
                         }
                     hPrintf("&nbsp;&nbsp;");
                     }
+                }
 
             hPrintf("<button type='button' class=\"hgtButtonHideGroup\" data-group-name=\"%s\" "
                     "title='Hide all tracks in this group'>Hide group</button>&nbsp;",
                     group->name);
 
+            if (hubName)
+                {
 		safef(idText, sizeof idText, "%s_%d_disconn", hubName, disconCount);
                 disconCount++;
-                hPrintf("<input name=\"hubDisconnectButton\" id='%s'"
+                hPrintf("<input name=\"hubDisconnectButton\" title='Disconnect third-party track hub and remove all tracks' "
+                        "id='%s'"
                     " type=\"button\" value=\"Disconnect\">\n", idText);
 		jsOnEventByIdF("click", idText,
                     "document.disconnectHubForm.elements['hubId'].value='%s';"
                     "document.disconnectHubForm.submit();return true;",
 		    hubName + strlen(hubTrackPrefix));
 
 #ifdef GRAPH_BUTTON_ON_QUICKLIFT
 		safef(idText, sizeof idText, "%s_%d_graph", hubName, graphCount);
                 graphCount++;
                 hPrintf("<input name=\"graphButton\" id='%s'"
                     " type=\"button\" value=\"Graph\">\n", idText);
 #endif
 		}
 
-
-
             hPrintf("<input type='submit' name='hgt.refresh' value='Refresh' "
-                    "title='Update image with your changes'>\n");
+                    "title='Update image with your changes. Any of the refresh buttons on this page may be used.'>\n");
             hPrintf("</td></tr></table></th>\n");
             controlGridEndRow(cg);
 
             /* Base Position track goes into map group, which will always exist. */
             if (!showedRuler && sameString(group->name, "map") )
 		{
 		char *url = trackUrl(RULER_TRACK_NAME, chromName);
 		showedRuler = TRUE;
 		myControlGridStartCell(cg, isOpen, group->name, FALSE);
 		hPrintf("<A HREF=\"%s\">", url);
 		hPrintf(" %s<BR> ", RULER_TRACK_LABEL);
 		hPrintf("</A>");
 		hDropListClassWithStyle("ruler", rulerMenu,
 			sizeof(rulerMenu)/sizeof(char *), rulerMenu[rulerMode],
 			rulerMode == tvHide ? "hiddenText" : "normalText",