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;