0ea39935da576d4466d1bfdcd68f84f4a7ec80e6 braney Thu Nov 14 14:25:23 2019 -0800 add filterValuesDefault specification diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 35570d2..0a3bc83 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -3644,30 +3644,49 @@ } char *extractFieldNameOld(char *trackDbVariable, char *filterType) /* Extract field name from a filter trackDb variable. Variables can either be * Filter* or .Filter* */ { char *field = cloneString(trackDbVariable); int ix = strlen(field) - strlen(filterType); field[ix] = '\0'; if (field[ix - 1] == '.') field[ix - 1] = '\0'; return field; } +static char *getFilterValueDefaultsSetting(struct cart *cart, struct trackDb *tdb, char *field) +// grab the default setting for a filterValues statement +{ +char defaultsSetting[4096]; +safef(defaultsSetting, sizeof defaultsSetting, "%s.%s", FILTER_VALUES_DEFAULT_NAME_LOW, field); +char *defaults = cartOrTdbString(cart, tdb, defaultsSetting, NULL); +if (defaults == NULL) + { + safef(defaultsSetting, sizeof defaultsSetting, "%s.%s", field, FILTER_VALUES_DEFAULT_NAME_CAP); + defaults = cartOrTdbString(cart, tdb, defaultsSetting, NULL); + } +if (defaults == NULL) + { + safef(defaultsSetting, sizeof defaultsSetting, "%s%s", field, FILTER_VALUES_DEFAULT_NAME_CAP); + defaults = cartOrTdbString(cart, tdb, defaultsSetting, NULL); + } +return defaults; +} + static char *getLabelSetting(struct cart *cart, struct trackDb *tdb, char *field) { char labelSetting[4096]; safef(labelSetting, sizeof labelSetting, "%s.%s", FILTER_LABEL_NAME_LOW, field); char *trackDbLabel = cartOrTdbString(cart, tdb, labelSetting, NULL); if (trackDbLabel == NULL) { safef(labelSetting, sizeof labelSetting, "%s.%s", field, FILTER_LABEL_NAME_CAP); trackDbLabel = cartOrTdbString(cart, tdb, labelSetting, NULL); } if (trackDbLabel == NULL) { safef(labelSetting, sizeof labelSetting, "%s%s", field, FILTER_LABEL_NAME_CAP); trackDbLabel = cartOrTdbString(cart, tdb, labelSetting, NULL); } @@ -3698,30 +3717,36 @@ filterBy->useIndex = FALSE; filterBy->slValues = slNameListFromCommaEscaped(value); chopUpValues(filterBy); if (cart != NULL) { char suffix[256]; safef(suffix, sizeof(suffix), "%s.%s", "filterBy", filterBy->column); boolean parentLevel = isNameAtParentLevel(tdb,tdb->track); if (cartLookUpVariableClosestToHome(cart,tdb,parentLevel,suffix,&(filterBy->htmlName))) { filterBy->slChoices = cartOptionalSlNameList(cart,filterBy->htmlName); freeMem(filterBy->htmlName); } } +if (filterBy->slChoices == NULL) // no settings in cart, initialize from trackDb + { + char *setting = getFilterValueDefaultsSetting(cart, tdb, field); + filterBy->slChoices = slNameListFromCommaEscaped(setting); + } + struct dyString *dy = newDyString(128); dyStringPrintf(dy, "%s.%s.%s", name, "filterBy", filterBy->column); filterBy->htmlName = dy->string; return filterBy; } filterBy_t *filterByValues(struct trackDb *tdb, struct cart *cart, struct trackDbFilter *trackDbFilters, char *name) /* Build a filterBy_t list from tdb variables of the form *FilterValues */ { struct asObject *as = asForTdb(NULL, tdb); if (as == NULL) errAbort("Unable to get autoSql for %s", name); filterBy_t *filterByList = NULL, *filter; struct trackDbFilter *fieldFilter;