acace5022c846865a6e449fe1973e94504394cde
lrnassar
  Tue Apr 7 16:33:34 2026 -0700
Add aria-labels to Base Position and supertrack/container dropdowns on hgTracks. refs #37344

New hideShowDropDownWithClassExtraAndLabel() passes label through to the
existing labeled dropdown function. superTrackDropDownWithExtra() now passes
tdb->shortLabel. Ruler dropdown updated in both hgTracks.c and config.c.
Brings hgTracks track dropdown label coverage from 69% to 100%.

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 81c1a0d2864..59af3ca44cd 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -979,40 +979,47 @@
 // Normal track with no special limits needs mapping to get back checked value
 static int packIx[] = {tvHide,tvDense,tvSquish,tvPack,tvFull};
 if (visOnly==NULL && canPack)
     checked = vizArr[packIx[vis]];
 
 cgiMakeDropListClassWithIdStyleJavascriptAndLabel(varName, NULL, vizArr, vizArrLen, checked, class, TV_DROPDOWN_STYLE, events, label);
 }
 
 void hTvDropDownClassVisOnlyAndExtra(char *varName, enum trackVisibility vis,
 				 boolean canPack, char *class, char *visOnly, struct slPair *events)
 // Make track visibility drop down for varName with style class, and potentially limited to visOnly
 {
 hTvDropDownClassVisOnlyAndExtraWithLabel(varName, vis, canPack, class, visOnly, events, NULL);
 }
 
-void hideShowDropDownWithClassAndExtra(char *varName, char * id, boolean show, char *class, struct slPair *events)
-// Make hide/show dropdown for varName
+void hideShowDropDownWithClassExtraAndLabel(char *varName, char *id, boolean show, char *class,
+                                            struct slPair *events, char *ariaLabel)
+// Make hide/show dropdown for varName with optional aria-label
 {
 static char *hideShow[] =
     {
     "hide",
     "show"
     };
-cgiMakeDropListClassWithIdStyleAndJavascript(varName, id, hideShow, ArraySize(hideShow),
-				       hideShow[show], class, TV_DROPDOWN_STYLE, events);
+cgiMakeDropListClassWithIdStyleJavascriptAndLabel(varName, id, hideShow, ArraySize(hideShow),
+				       hideShow[show], class, TV_DROPDOWN_STYLE, events, ariaLabel);
+}
+
+void hideShowDropDownWithClassAndExtra(char *varName, char *id, boolean show, char *class, struct slPair *events)
+// Make hide/show dropdown for varName
+{
+hideShowDropDownWithClassExtraAndLabel(varName, id, show, class, events, NULL);
 }
 
 
 /****** Some stuff for stsMap related controls *******/
 
 static char *stsMapOptions[] = 
     {
     "All Genetic",
     "Genethon",
     "Marshfield",
     "deCODE",
     "GeneMap 99",
     "Whitehead YAC",
     "Whitehead RH",
     "Stanford TNG",
@@ -9687,32 +9694,33 @@
 // Determine if any tracks in supertrack are visible; if not, the 'show' is grayed out
 if (show && (visibleChild == -1))
     {
     visibleChild = 0;
     struct slRef *childRef;
     for ( childRef = tdb->children; childRef != NULL; childRef = childRef->next)
         {
 	struct trackDb *cTdb = childRef->val;
         cTdb->visibility =
                 hTvFromString(cartUsualString(cart, cTdb->track,
                                       hStringFromTv(cTdb->visibility)));
         if (cTdb->visibility != tvHide)
             visibleChild = 1;
         }
     }
-hideShowDropDownWithClassAndExtra(tdb->track, NULL, show, (show && visibleChild) ?
-                                  "superDropdown normalText visDD" : "superDropdown hiddenText visDD", events);
+hideShowDropDownWithClassExtraAndLabel(tdb->track, NULL, show, (show && visibleChild) ?
+                                  "superDropdown normalText visDD" : "superDropdown hiddenText visDD",
+                                  events, tdb->shortLabel);
 return TRUE;
 }
 
 int tvConvertToNumericOrder(enum trackVisibility v)
 {
 return ((v) == tvShow   ? 5 : \
         (v) == tvFull   ? 4 : \
         (v) == tvPack   ? 3 : \
         (v) == tvSquish ? 2 : \
         (v) == tvDense  ? 1 : 0);
 }
 
 int tvCompare(enum trackVisibility a, enum trackVisibility b)
 /* enum trackVis isn't in numeric order by visibility, so compare
  * symbolically: */