651f959d7553ee0256b1e0b37ffa83d64709511d
lrnassar
  Mon Mar 16 17:57:16 2026 -0700
Adding accessible labels to form controls across main CGI pages. Extends cheapcgi and hui libraries with aria-label support for track visibility dropdowns, and adds <label> elements to hgBlat, hgTables, hgPcr, and hgGateway form controls. Also adds Form Control Labels section to accessibility page. refs #37253

diff --git src/lib/cheapcgi.c src/lib/cheapcgi.c
index d6884a937d0..288b1c4c02e 100644
--- src/lib/cheapcgi.c
+++ src/lib/cheapcgi.c
@@ -2098,72 +2098,82 @@
 cgiMakeDoubleVarInRange(varName,initialVal,title,width,minStr,NULL);
 }
 
 void cgiMakeDoubleVarWithMax(char *varName, double initialVal, char *title, int width, double max)
 {
 char maxLimit[20];
 char *maxStr=NULL;
 if ((int)max != NO_VALUE)
     {
     safef(maxLimit,sizeof(maxLimit),"%g",max);
     maxStr = maxLimit;
     }
 cgiMakeDoubleVarInRange(varName,initialVal,title,width,NULL,maxStr);
 }
 
-void cgiMakeDropListClassWithIdStyleAndJavascript(char *name, char *id, char *menu[],
-        int menuSize, char *checked, char *class, char *style, struct slPair *events)
-/* Make a drop-down list with name, id, text class, style and javascript. */
+void cgiMakeDropListClassWithIdStyleJavascriptAndLabel(char *name, char *id, char *menu[],
+        int menuSize, char *checked, char *class, char *style, struct slPair *events,
+        char *ariaLabel)
+/* Make a drop-down list with name, id, text class, style, javascript and optional aria-label. */
 {
 int i;
 char *selString;
 if (checked == NULL) checked = menu[0];
 printf("<SELECT");
 if (name)
     printf(" NAME='%s'", name);
 if (events && !id)  // use name as id
     id = name;
 if (id)
     printf(" id='%s'", id);
 
 if (class)
     printf(" class='%s'", class);
 
 if (events)
     {
     struct slPair *e;
     for(e = events; e; e = e->next)
 	{
 	jsOnEventById(e->name, id, e->val);
 	}
     }
 if (style)
     printf(" style='%s'", style);
+if (ariaLabel)
+    printf(" aria-label=\"%s\"", ariaLabel);
 printf(">\n");
 for (i=0; i<menuSize; ++i)
     {
     if (sameWord(menu[i], checked))
         selString = " SELECTED";
     else
         selString = "";
 
     char* opt = menu[i];
     printf("<OPTION%s value='%s'>%c%s</OPTION>\n", selString, opt, toupper((unsigned char)opt[0]), opt+1);
     }
 printf("</SELECT>\n");
 }
 
+void cgiMakeDropListClassWithIdStyleAndJavascript(char *name, char *id, char *menu[],
+        int menuSize, char *checked, char *class, char *style, struct slPair *events)
+/* Make a drop-down list with name, id, text class, style and javascript. */
+{
+cgiMakeDropListClassWithIdStyleJavascriptAndLabel(name, id, menu, menuSize, checked, class, style, events, NULL);
+}
+
 void cgiMakeDropListClassWithStyleAndJavascript(char *name, char *menu[],
         int menuSize, char *checked, char *class, char *style, struct slPair *events)
 /* Make a drop-down list with names, text class, style and javascript. */
 {
 cgiMakeDropListClassWithIdStyleAndJavascript(name,NULL,menu,menuSize,checked,class,style,events);
 }
 
 void cgiMakeDropListClassWithStyle(char *name, char *menu[],
                                    int menuSize, char *checked, char *class, char *style)
 /* Make a drop-down list with names, text class and style. */
 {
 cgiMakeDropListClassWithStyleAndJavascript(name,menu,menuSize,checked,class,style,NULL);
 }
 
 void cgiMakeDropListClass(char *name, char *menu[],