0cb4c703bd9ff662207617fa0980092ac670aece braney Tue Sep 4 16:52:03 2018 -0700 add wildcard filtering and fix-up single selection in filterValue settings refs #20227 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 8f6d815..7f29b6f 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -3953,64 +3953,71 @@ "\n",filterTypeTitle,FILTERBY_HELP_LINK); filterBy_t *filterBy = NULL; if (cartOptionalString(cart, "ajax") == NULL) { webIncludeResourceFile("ui.dropdownchecklist.css"); jsIncludeFile("ui.dropdownchecklist.js",NULL); jsIncludeFile("ddcl.js",NULL); } int ix=0; for(filterBy = filterBySet;filterBy != NULL; filterBy = filterBy->next, ix++) { char settingString[4096]; safef(settingString, sizeof settingString, "%s%s", filterBy->column, FILTER_TYPE_NAME); - char *setting = cartOrTdbString(cart, tdb, settingString, NULL); - boolean isMultiple = (setting != NULL) && (sameString(setting, FILTERBY_MULTIPLE) ||sameString(setting, FILTERBY_MULTIPLE_LIST_OR) ||sameString(setting, FILTERBY_MULTIPLE_LIST_AND)); + char *setting = cartOrTdbString(cart, tdb, settingString, FILTERBY_MULTIPLE_LIST_AND); + boolean isMultiple = sameString(setting, FILTERBY_MULTIPLE) ||sameString(setting, FILTERBY_MULTIPLE_LIST_OR) ||sameString(setting, FILTERBY_MULTIPLE_LIST_AND); puts("
"); char selectStatement[4096]; if (isMultiple) safef(selectStatement, sizeof selectStatement, " (select multiple items - %s)", FILTERBY_HELP_LINK); else selectStatement[0] = 0; if(count == 1) printf("%s by %s%s",filterTypeTitle,filterBy->title,selectStatement); else printf("%s",filterBy->title); printf("
\n"); if (isMultiple) { char cartSettingString[4096]; safef(cartSettingString, sizeof cartSettingString, "%s.%s", tdb->track, settingString); printf("Match if "); cgiMakeRadioButton(cartSettingString, FILTERBY_MULTIPLE_LIST_AND, sameString(setting, FILTERBY_MULTIPLE_LIST_AND)); printf(" all "); cgiMakeRadioButton(cartSettingString, FILTERBY_MULTIPLE_LIST_OR, sameString(setting, FILTERBY_MULTIPLE_LIST_OR)); printf(" one or more match "); } // TODO: columnCount (Number of filterBoxes per row) should be configurable through tdb setting - #define FILTER_BY_FORMAT "
\n", selectIdPrefix,ix,filterBy->htmlName); printf("%s\n", (filterByAllChosen(filterBy)?" SELECTED":""), allLabel); + ix = 1; + } + else + { + printf( " ", cgiVar); + printf("", sameString(setting, FILTERTEXT_WILDCARD) ? "SELECTED" : "", FILTERTEXT_WILDCARD ); + printf("", sameString(setting, FILTERTEXT_REGEXP) ? "SELECTED" : "", FILTERTEXT_REGEXP ); + printf(""); + printf("

"); } } } 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)