db7c8abb6d7674bb26f579eabb58bc080ce76fdd max Tue May 12 07:04:05 2020 -0700 adding a protease track to uniprot, refs #25192 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index c4482a2..86ee78b 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -4025,56 +4025,67 @@ { if (*styler == '#') // Legacy: just the color that follows printf(" style='color: %s;'",styler); else printf(" style='%s'",styler); } } printf(">%s\n",label); } static boolean filterByColumnIsList(struct cart *cart, struct trackDb *tdb, char *setting) /* Is this filter setting expecting a list of items (e.g. has checkboxes) */ { return (sameString(setting, FILTERBY_SINGLE_LIST) || sameString(setting, FILTERBY_MULTIPLE_LIST_OR) || + sameString(setting, FILTERBY_MULTIPLE_LIST_ONLY_OR) || + sameString(setting, FILTERBY_MULTIPLE_LIST_ONLY_AND) || sameString(setting, FILTERBY_MULTIPLE_LIST_AND)); } static boolean filterByColumnIsMultiple(struct cart *cart, struct trackDb *tdb, char *setting) /* Is this filter setting for a comma separated column. */ { return (sameString(setting, FILTERBY_MULTIPLE) || sameString(setting, FILTERBY_MULTIPLE_LIST_OR) || + sameString(setting, FILTERBY_MULTIPLE_LIST_ONLY_OR) || + sameString(setting, FILTERBY_MULTIPLE_LIST_ONLY_AND) || sameString(setting, FILTERBY_MULTIPLE_LIST_AND)); } +static boolean filterByColumnAllowsMatch(struct cart *cart, struct trackDb *tdb, char *setting) +/* Does this filter allow the "Only Match if ..." choice */ +{ +return !(sameString(setting, FILTERBY_MULTIPLE_LIST_ONLY_OR) || + sameString(setting, FILTERBY_MULTIPLE_LIST_ONLY_AND)); +} + void filterBySetCfgUiGuts(struct cart *cart, struct trackDb *tdb, filterBy_t *filterBySet, boolean onOneLine, char *filterTypeTitle, char *selectIdPrefix, char *allLabel, char *prefix) // Does the UI for a list of filterBy structure for either filterBy or highlightBy controls { if (filterBySet == NULL) return; #define FILTERBY_HELP_LINK "help" int count = slCount(filterBySet); if (count == 1) - puts("
"); char selectStatement[4096]; char *setting = getFilterType(cart, tdb, filterBy->column, FILTERBY_SINGLE_LIST); if (filterByColumnIsList(cart, tdb, setting)) safef(selectStatement, sizeof selectStatement, " (select multiple items - %s)", FILTERBY_HELP_LINK); else selectStatement[0] = 0; + + char *filterTitle = filterBy->title; + if (strchr(filterTitle, '|')!=NULL) { + // replace | character with the 0 byte + filterTitle = cloneString(filterTitle); + char *pipePt = strchr(filterTitle, '|'); + *pipePt = '\0'; + } + if(count == 1) - printf("%s by %s%s",filterTypeTitle,filterBy->title,selectStatement); + printf("%s by %s%s",filterTypeTitle,filterTitle,selectStatement); else - printf("%s",filterBy->title); + printf("%s",filterTitle); puts(" | "); } puts("||||
");
char *setting = getFilterType(cart, tdb, filterBy->column, FILTERBY_SINGLE_LIST);
- if (filterByColumnIsMultiple(cart, tdb, setting) && filterByColumnIsList(cart, tdb, setting) && tdbIsBigBed(tdb))
+ if (filterByColumnIsMultiple(cart, tdb, setting) && filterByColumnIsList(cart, tdb, setting) && tdbIsBigBed(tdb) &&
+ filterByColumnAllowsMatch(cart, tdb, setting))
{
char cartSettingString[4096];
safef(cartSettingString, sizeof cartSettingString, "%s.%s.%s", prefix,FILTER_TYPE_NAME_LOW, filterBy->column);
printf(" Match if ");
// ADVANCED BUTTON printf(" ");
}
puts(" | ");
}
puts("||||
", COLOR_BG_ALTDEFAULT);
if (title)
printf(" %s ", title ); -else - printf(" "); + printf("%s ", title ); +// a is not necessary here / not clear why it was there. It lead to a huge space in the wrench box return boxed; } void cfgEndBox(boolean boxed) // Handle end of box and title for individual track type settings { if (boxed) puts(" |
%s: | ",label); + printf(" |
Numeric Filter: %s | ",label);
char varName[256];
char altLabel[256];
char *filterName = getScoreNameAdd(tdb, scoreName, _BY_RANGE);
boolean filterByRange = trackDbSettingClosestToHomeOn(tdb, filterName);
double minLimit=NO_VALUE,maxLimit=NO_VALUE;
double minVal=minLimit,maxVal=maxLimit;
colonPairToDoubles(setting,&minVal,&maxVal);
getScoreFloatRangeFromCart(cart,tdb,parentLevel,scoreName,&minLimit,&maxLimit,
&minVal, &maxVal);
filterName = getScoreNameAdd(tdb, scoreName, filterByRange ? _MIN:"");
safef(varName, sizeof(varName), "%s.%s", name, filterName);
safef(altLabel, sizeof(altLabel), "%s%s", (filterByRange ? "Minimum " : ""),
htmlEncode(htmlTextStripTags(label)));
cgiMakeDoubleVarWithLimits(varName,minVal, altLabel, 0,minLimit, maxLimit);
if (filterByRange)
@@ -6356,31 +6376,31 @@
safef(cgiVar,sizeof(cgiVar),"%s.%s.%s",tdb->track,FILTER_TYPE_NAME_LOW, filter->fieldName);
printf(" using ");
printf("");
printf("");
}
}
return count;
}
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
+// Put up UI for filtering bed track based on a score or any other fields defined by the filter* trackDb statements
{
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;
if (textFiltersShowAll(db, cart, tdb))
skipScoreFilter = TRUE;
if (cartOptionalString(cart, "ajax") == NULL)
{
@@ -8478,42 +8498,43 @@
compositeUiByFilter(db, cart, parentTdb, formName);
return TRUE;
}
static boolean compositeUiAllButtons(char *db, struct cart *cart, struct trackDb *parentTdb,
char *formName)
// UI for composite tracks: all/none buttons only (as opposed to matrix or lots of buttons
{
if (trackDbCountDescendantLeaves(parentTdb) <= 1)
return FALSE;
if (dimensionsExist(parentTdb))
return FALSE;
-#define PM_BUTTON_GLOBAL " "); +puts(" Use checkboxes below to show or hide subtracks. Use drop-downs to change their visibilities. ");
+puts("All subtracks: ");
+//#define PM_BUTTON_GLOBAL " |