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("
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("
"); // 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