1eaedcf685289f4cddd2f7c1206e8fb2d90ce0bf braney Mon May 6 17:22:43 2019 -0700 allow users to turn on or off advanced controls in filters diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 71f92cd..1ad43a8 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -3942,30 +3942,38 @@ 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 "<A HREF=\"../goldenPath/help/multiView.html\" TARGET=ucscHelp>help</A>" int count = slCount(filterBySet); if (count == 1) puts("<TABLE cellpadding=3><TR valign='top'>"); else printf("<B>%s items by:</B> (select multiple categories and items - %s)" "<TABLE cellpadding=3><TR valign='top'>\n",filterTypeTitle,FILTERBY_HELP_LINK); +printf("<B> Advanced options</B>"); +char varName[1024]; +safef(varName, sizeof(varName), "%s.doAdvanced", tdb->track); +cgiMakeCheckBox(varName, FALSE); +printf("<BR>"); +jsInlineF("$(function () { advancedSearchOnChange('%s'); });\n", varName); + + 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, FILTERBY_MULTIPLE_LIST_AND); boolean isMultiple = sameString(setting, FILTERBY_MULTIPLE) ||sameString(setting, FILTERBY_MULTIPLE_LIST_OR) ||sameString(setting, FILTERBY_MULTIPLE_LIST_AND); @@ -3974,35 +3982,35 @@ char selectStatement[4096]; if (isMultiple) safef(selectStatement, sizeof selectStatement, " (select multiple items - %s)", FILTERBY_HELP_LINK); else selectStatement[0] = 0; if(count == 1) printf("<B>%s by %s</B>%s",filterTypeTitle,filterBy->title,selectStatement); else printf("<B>%s</B>",filterBy->title); printf("<BR>\n"); if (isMultiple && tdbIsBigBed(tdb)) { char cartSettingString[4096]; safef(cartSettingString, sizeof cartSettingString, "%s.%s", prefix, settingString); - printf("<b>Match if "); + printf("<div class='advanced' style='display:none'><b>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</b> "); + printf(" one or more match</b></div> "); } // TODO: columnCount (Number of filterBoxes per row) should be configurable through tdb setting // value is always "All", even if label is different, to simplify javascript code int valIx = 0; if (isMultiple) { printf( "<SELECT id='%s%d' name='%s' multiple style='display: none; font-size:.9em;' class='filterBy'><BR>\n", selectIdPrefix,ix,filterBy->htmlName); printf("<OPTION%s value=\"All\">%s</OPTION>\n", (filterByAllChosen(filterBy)?" SELECTED":""), allLabel); valIx = 1; } else { printf( "<SELECT id='%s%d' name='%s' style='font-size:.9em;'<BR>\n", selectIdPrefix,ix,filterBy->htmlName); valIx = 0;