ff297774c7e9cb7056b780ea5554dc1ad2e22c10
braney
  Wed Aug 1 12:57:43 2018 -0700
add regular expression filtering on bigBeds.

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 1e1c0ff..cc8b7ae 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -5778,43 +5778,69 @@
             one = TRUE;
             break;
             }
         }
     slNameFreeList(&filterSettings);
     if (one)
         return TRUE;
     }
 if (!blocked)  // scoreFilter is implicit unless NO_SCORE_FILTER
     return TRUE;
 
 return FALSE;
 }
 
 
+void textFiltersShowAll(char *db, struct cart *cart, struct trackDb *tdb)
+/* Show all the text filters for this track. */
+{
+struct slName *filter, *filterSettings = trackDbSettingsWildMatch(tdb, "*FilterText");
+if (filterSettings)
+    {
+    while ((filter = slPopHead(&filterSettings)) != NULL)
+        {
+        char *setting = trackDbSetting(tdb, filter->name);
+        char *value = cartUsualStringClosestToHome(cart, tdb, FALSE, filter->name, setting);
+        char *field = cloneString(filter->name);
+        int ix = strlen(field) - strlen("FilterText");
+        assert(ix > 0);
+        field[ix] = '\0';
+
+        printf("<P><B>Filter items by regular expression in '%s' field: ", field);
+
+        char cgiVar[128];
+        safef(cgiVar,sizeof(cgiVar),"%s.%s",tdb->track,filter->name);
+        cgiMakeTextVar(cgiVar, value, 45);
+        }
+    }
+}
+
 void scoreCfgUi(char *db, struct cart *cart, struct trackDb *tdb, char *name, char *title,
                 int maxScore, boolean boxed)
 // Put up UI for filtering bed track based on a score
 {
 char option[256];
 boolean parentLevel = isNameAtParentLevel(tdb,name);
 boolean skipScoreFilter = FALSE;
 
 // Numeric filters are first
 boolean isBoxOpened = FALSE;
 if (numericFiltersShowAll(db, cart, tdb, &isBoxOpened, boxed, parentLevel, name, title) > 0)
     skipScoreFilter = TRUE;
 
+textFiltersShowAll(db, cart, tdb);
+
 // Add any multi-selects next
 filterBy_t *filterBySet = filterBySetGet(tdb,cart,name);
 if (filterBySet != NULL)
     {
     if (!tdbIsComposite(tdb) && cartOptionalString(cart, "ajax") == NULL)
         jsIncludeFile("hui.js",NULL);
 
     if (!isBoxOpened)   // Note filterBy boxes are not double "boxed",
         printf("<BR>"); // if there are no other filters
     filterBySetCfgUi(cart,tdb,filterBySet,TRUE);
     filterBySetFree(&filterBySet);
     skipScoreFilter = TRUE;
     }
 
 // For no good reason scoreFilter is incompatible with filterBy and or numericFilters