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/hg/hgPcr/hgPcr.c src/hg/hgPcr/hgPcr.c
index 6cbcd272147..cabcf8a8241 100644
--- src/hg/hgPcr/hgPcr.c
+++ src/hg/hgPcr/hgPcr.c
@@ -432,84 +432,88 @@
     "});\n"
     , searchBarId
 );
 
 printf("</center></td><TD><CENTER>\n");
 printf("Assembly:<BR><span id='genomeLabel'>%s</span>", getCurrentGenomeLabel(db));
 printf("</CENTER></TD>\n");
 
 if (gotTargetDb)
     {
     struct targetPcrServer *targetServerList = getTargetServerList(db, NULL);
     if (targetServerList != NULL)
 	{
 	char *target = cartUsualString(cart, "wp_target", "genome");
 	printf("%s", "<TD><CENTER>\n");
-	printf("Target:<BR>");
+	printf("<label>Target:<BR>");
 	showTargets(target, targetServerList);
+	printf("</label>");
 	printf("%s", "</CENTER></TD>\n");
 	}
     else
 	cgiMakeHiddenVar("wp_target", "genome");
     }
 else
     cgiMakeHiddenVar("wp_target", "genome");
 
 printf("%s", "<TD COLWIDTH=2><CENTER>\n");
-printf("Forward primer:<BR>");
+printf("<label for='wp_f'>Forward primer:</label><BR>");
 cgiMakeTextVar("wp_f", fPrimer, 22);
 printf("%s", "</CENTER></TD>\n");
 
 printf("%s", "<TD><CENTER COLWIDTH=2>\n");
-printf(" Reverse primer:<BR>");
+printf("<label for='wp_r'> Reverse primer:</label><BR>");
 cgiMakeTextVar("wp_r", rPrimer, 22);
 printf("%s", "</CENTER></TD>\n");
 
 printf("%s", "<TD><CENTER>\n");
 printf("&nbsp;<BR>");
 cgiMakeButton("Submit", "Submit");
 printf("%s", "</CENTER></TD>\n");
 
 printf("</TR></TABLE><BR>");
 
 printf("<TABLE BORDER=0 WIDTH=\"96%%\" COLS=4><TR>\n");
 printf("%s", "<TD><CENTER>\n");
-printf("Max product size: ");
+printf("<label>Max product size: ");
 cgiMakeIntVar("wp_size", maxSize, 5);
+printf("</label>");
 printf("%s", "</CENTER></TD>\n");
 
 printf("%s", "<TD><CENTER>\n");
-printf(" Min perfect match: ");
+printf("<label> Min perfect match: ");
 cgiMakeIntVar("wp_perfect", minPerfect, 2);
+printf("</label>");
 printf("%s", "</CENTER></TD>\n");
 
 jsOnEventById("click", "Submit", "if ($('#wp_r').val()==='' || $('#wp_f').val()==='') "\
         "{ alert('Please specify at least a forward and reverse primer. Both input boxes need to be filled out.'); event.preventDefault(); }");
 
 printf("%s", "<TD><CENTER>\n");
-printf(" Min good match: ");
+printf("<label> Min good match: ");
 cgiMakeIntVar("wp_good", minGood, 2);
+printf("</label>");
 printf("%s", "</CENTER></TD>\n");
 
 printf("%s", "<TD><CENTER>\n");
-printf(" Flip reverse primer: ");
-cgiMakeCheckBox("wp_flipReverse", flipReverse);
+printf("<label for='wp_flipReverse'> Flip reverse primer: </label>");
+cgiMakeCheckBoxWithId("wp_flipReverse", flipReverse, "wp_flipReverse");
 printf("%s", "</CENTER></TD>\n");
 
 printf("%s", "<TD><CENTER>\n");
-printf(" Append to existing PCR result: ");
-cgiMakeCheckBox("wp_append", appendToResults);
+printf("<label for='wp_append'> Append to existing PCR result: </label>");
+cgiMakeCheckBoxWithId("wp_append", appendToResults, "wp_append");
 printf("%s", "</CENTER></TD>\n");
 
 printf("</TR></TABLE><BR>");
 
 printf("</FORM>\n");
 
 /* Put up a second form who's sole purpose is to preserve state
  * when the user flips the genome button. */
 printf("<FORM ACTION=\"../cgi-bin/hgPcr\" METHOD=\"GET\" NAME=\"orgForm\">"
        "<input type=\"hidden\" name=\"wp_target\" value=\"\">\n"
        "<input type=\"hidden\" name=\"db\" value=\"\">\n"
        "<input type=\"hidden\" name=\"org\" value=\"\">\n"
        "<input type=\"hidden\" name=\"wp_f\" value=\"\">\n"
        "<input type=\"hidden\" name=\"wp_r\" value=\"\">\n"
        "<input type=\"hidden\" name=\"wp_size\" value=\"\">\n"