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> ", 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 ",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;