06d7be056190c14b85e71bc12523f18ea6815b5e
markd
  Mon Dec 7 00:50:29 2020 -0800
BLAT mmap index support merge with master

diff --git src/hg/hgPublicSessions/hgPublicSessions.c src/hg/hgPublicSessions/hgPublicSessions.c
index 301d292..3668479 100644
--- src/hg/hgPublicSessions/hgPublicSessions.c
+++ src/hg/hgPublicSessions/hgPublicSessions.c
@@ -130,66 +130,76 @@
 while ((row = sqlNextRow(sr)) != NULL)
     {
     gal = galLoad(row);
     slAddHead (&galList, gal);
     }
 
 sqlFreeResult(&sr);
 hDisconnectCentral(&conn);
 return galList;
 }
 
 void galleryDisplay(struct galleryEntry *galList)
 /* Print a table containing the gallery data from galList */
 {
 struct galleryEntry *thisSession = galList;
+boolean searchStrExists = cgiVarExists("search");
+char *searchStr = NULL;
+if (searchStrExists)
+    searchStr = cgiOptionalString("search");
 
 /* Hide the orderable columns and disable ordering on the visible columns
  * https://datatables.net/reference/option/columnDefs for more info.
  * Then set up the ordering drop-down menu */
 jsInlineF(
    "$(document).ready(function () {\n"
     "    $('#sessionTable').DataTable({\"columnDefs\": [{\"visible\":false, \"targets\":[2,3]},\n"
     "                                                   {\"orderable\":false, \"targets\":[0,1]}\n"
     "                                                  ],\n"
     "                                       \"dom\":\"lftip\",\n"
     "                                       \"stateSave\":true,\n"
     "                                       \"stateSaveCallback\": %s,\n"
     "                                       \"stateLoadCallback\": %s,\n"
-    "                                });\n"
+    "                                });\n",
+    jsDataTableStateSave(hgPublicSessionsPrefix), jsDataTableStateLoad(hgPublicSessionsPrefix, cart));
+
+// the user may have cleared the previous search via cgi option, or tried a new search:
+if (searchStrExists)
+    jsInlineF("     $('#sessionTable').DataTable().search(\"%s\").draw();\n", searchStr);
+
 /* Recover previous sorting choice from the cart settings, if available */
+jsInlineF(
     "    var startOrder = $('#sessionTable').DataTable().order();\n"
     "    if (startOrder[0][0] == 3) {\n"
     "        if (startOrder[0][1] == \"asc\") {\n"
     "            $('#sortMethod').val(\"useAsc\");\n"
     "        } else {\n"
     "            $('#sortMethod').val(\"useDesc\");\n"
     "        }\n"
     "    } else {\n"
     "        if (startOrder[0][0] == 2) {\n"
     "            if (startOrder[0][1] == \"asc\") {\n"
     "                $('#sortMethod').val(\"dateAsc\");\n"
     "            } else {\n"
     "                $('#sortMethod').val(\"dateDesc\");\n"
     "            }\n"
     "        } else {\n"
     "            $('#sessionTable').DataTable().order([2,'desc']).draw();\n"
     "            $('#sortMethod').val(\"dateDesc\");\n"
     "        }\n"
     "    }\n"
-    "});\n",
-    jsDataTableStateSave(hgPublicSessionsPrefix), jsDataTableStateLoad(hgPublicSessionsPrefix, cart));
+    "});\n");
 
 jsInline(
    "function changeSort() {\n"
     "    var newSort = document.getElementById('sortMethod').value;\n"
     "    var theTable = $('#sessionTable').DataTable();\n"
     "    if (newSort == \"useDesc\") {theTable.order([3,'desc']).draw(); }\n"
     "    if (newSort == \"useAsc\") {theTable.order([3,'asc']).draw(); }\n"
     "    if (newSort == \"dateDesc\") {theTable.order([2,'desc']).draw(); }\n"
     "    if (newSort == \"dateAsc\") {theTable.order([2,'asc']).draw(); }\n"
     "}\n");
 
 printf ("<p>\n");
 printf ("<b>Sort by:</b> <select id=\"sortMethod\">\n");
 printf ("\t\t<option value=\"useDesc\">Popularity (descending)</option>\n");
 printf ("\t\t<option value=\"useAsc\">Popularity (ascending)</option>\n");