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