33d86ed28182f6dc7903ac522f4d94bf9906274d
max
  Wed Apr 29 01:44:21 2026 -0700
add submit button to superTrack filters, refs #36258

diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index 913d52b0cc8..0c903203334 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -3994,30 +3994,39 @@
 else
     specificUi(tdb, tdbList, ct, ajax);
 
 // Decorator UI
 struct slName *decoratorSettings = trackDbSettingsWildMatch(tdb, "decorator.*");
 if (decoratorSettings)
     {
     char *browserVersion;
     if (btIE == cgiClientBrowser(&browserVersion, NULL, NULL) && *browserVersion < '8')
         htmlHorizontalLine();
     else
         printf("<HR ALIGN='bottom' style='position:relative; top:1em;'>");
     decoratorUi(tdb, cart, decoratorSettings);
     }
 
+// Repeat the Submit button near the bottom of the form so that users do not
+// have to scroll back up to the top after tweaking filters on a long page.
+if (!ajax)
+    {
+    puts("<p style='margin-top:1em;'>");
+    cgiMakeButton("Submit", "Submit");
+    puts("</p>");
+    }
+
 puts("</FORM>");
 
 if (ajax)
     return;
 
 if (ct)
     {
     /* hidden form for custom tracks CGI */
     printf("<FORM ACTION='%s' NAME='customTrackForm'>", hgCustomName());
     cartSaveSession(cart);
     cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, tdb->track);
     puts("</FORM>\n");
     if (ct->bbiFile)
 	{
 	time_t timep = bbiUpdateTime(ct->bbiFile);