7ce9b0df36452543414318ecdb736030cfc86be8
max
  Fri Feb 27 06:39:30 2026 -0800
superTrack UI: removing change handler from the top level dropdown, and adding the folder icons to the track labels, refs #37036

diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index 4c7f3fc00dc..3ccbc803a49 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -2814,31 +2814,31 @@
         char **vizList = hTvGetVizArr(tv, tdb->canPack, onlyVis);
         int vizListLen = arrNullLen(vizList);
         for (int i = 0; i < vizListLen; i++) {
             char *buttonViz = vizList[i];
             // the currently active viz mode is an 'active' button = pressed
             if (strcasecmp(buttonViz, trackVizStr) == 0)
                 printf("<button class='seg-active'>");
             else
                 printf("<button>");
             printf("%c%s", toupper((unsigned char)buttonViz[0]), buttonViz + 1); // upcase first letter
             puts("</button>");
         }
         puts("</div>");
         
         printf("</TD>\n<TD>");
-        hPrintPennantIcon(tdb);
+        hPrintIcons(tdb);
 	safef(id, sizeof id, "%s_link", tdb->track);
         // the <select> tag is only needed to send arguments to the hgTracks CGI. It will be hidden, see below.
         printf("<A HREF='%s?%s=%s&c=%s&g=%s' id='%s'>%s</A>&nbsp;", 
                     tdbIsDownloadsOnly(tdb) ? hgFileUiName(): hTrackUiForTrack(tdb->track),
                     cartSessionVarName(), cartSessionId(cart), chromosome, cgiEncode(tdb->track), 
                     id, tdb->shortLabel);
 	jsOnEventById("click", id, "superT.submitAndLink(this);");
         }
     else
         {
         printf("<A HREF='%s?%s=%s&g=%s'>Downloads</A>",
                hgFileUiName(),cartSessionVarName(), cartSessionId(cart), cgiEncode(tdb->track));
         printf("</TD>\n<TD>");
         printf("%s&nbsp;",tdb->shortLabel);
         }
@@ -2852,31 +2852,31 @@
     }
 printf("</TABLE>");
 
 // Now configure the elements above with Javascript:
 
 // * Clicking a button sets the dropdown to the button's text
 jsOnEventBySelector("click", ".seg-btn-group > button", "let dropdown = $('#' + $(this).parent().data('trackname')); let buttonText=$(this).text().toLowerCase(); dropdown.val(buttonText).removeClass('hiddenText').addClass('normalText');");
 // * Clicking buttons does not submit the form (default action of <button> is to submit, unless type=button)
 jsInline("$('.seg-btn-group button').attr('type', 'button');");
 // * Clicking buttons makes them pressed. Also, clicking any button shows the superTrack
 jsInline("$('.seg-btn-group').on('click', 'button', function() {"
   "$(this).addClass('seg-active').siblings().removeClass('seg-active');"
   "$('.superDropdown').val('show');"
   "});");
 // * Changing the dropdown updates the buttons
-jsInline("$('.vizSelect').on('change', function() {"
+jsInline("$('#superTrackTable .vizSelect').on('change', function() {"
   "$(this).next().children().removeClass('seg-active');"
   "let labelToFind = capitalizeFirstLetter($(this).val());"
   "$(this).next().find('button').filter(function() { return $(this).text().trim() === labelToFind; }).addClass('seg-active');"
   "});");
 // * Hide all subtrack dropdowns from the user. They are used so the CGI arguments
 // are sent to hgTracks, but are not necessary as UI elements anymore
 jsInline("$('#superTrackTable .vizSelect').hide();");
 }
 
 #ifdef USE_HAL
 static void cfgHalSnake(struct trackDb *tdb, char *name)
 {
 boolean parentLevel = isNameAtParentLevel(tdb, name);
 if (parentLevel)
     return;