0b58f51e038bbae5f53aecbed905b7e959b08d84
kent
  Thu Jan 28 18:05:34 2021 -0800
Starting to add a new UI involving facets for the wide bar charts.  It is not under hg.conf control, but currently only triggers for a track named 'singleCellMerged'

diff --git src/hg/lib/barChartUi.c src/hg/lib/barChartUi.c
index 6e9e885..2317e12 100644
--- src/hg/lib/barChartUi.c
+++ src/hg/lib/barChartUi.c
@@ -1,32 +1,34 @@
 /* Bar chart track controls */
 
 /* Copyright (C) 2015 The Regents of the University of California 
  * See README in this or parent directory for licensing information. */
 
 #include "cheapcgi.h"
 #include "cart.h"
 #include "net.h"
 #include "errCatch.h"
+#include "web.h"
 #include "hui.h"
 #include "trackDb.h"
 #include "jsHelper.h"
 #include "hCommon.h"
 #include "rainbow.h"
 #include "htmlColor.h"
 #include "barChartCategory.h"
 #include "barChartUi.h"
+#include "tablesTables.h"
 
 /* Restrict features on right-click (popup) version */
 static boolean isPopup = FALSE;
 
 /* Convenience functions for category filter controls */
 
 
 char *makeCategoryLabel(struct barChartCategory *categ)
 /* Display category color and label */
 {
 char buf[256];
 safef(buf, sizeof(buf), "<td class='bcColorPatch' bgcolor=#%06x></td>"
                         "<td>&nbsp;%s</td>", 
                                 categ->color, categ->label);
 return(cloneString(buf));
@@ -350,31 +352,31 @@
 for (categ = categs; categ != NULL; categ = categ->next)
     if (categ->id == id)
         return categ;
 return NULL;
 }
 
 char *barChartUiGetCategoryLabelById(int id, char *database, struct trackDb *tdb)
 /* Get label for a category id */
 {
 struct barChartCategory *categ = barChartUiGetCategoryById(id, database, tdb);
 if (categ == NULL)
     return "Unknown";
 return categ->label;
 }
 
-void barChartCfgUi(char *database, struct cart *cart, struct trackDb *tdb, char *track, 
+void barChartCfgUiSelectEachBar(char *database, struct cart *cart, struct trackDb *tdb, char *track, 
                         char *title, boolean boxed)
 /* Bar chart track type */
 {
 if (cartVarExists(cart, "ajax"))
     isPopup = TRUE;
 boxed = cfgBeginBoxAndTitle(tdb, boxed, title);
 if (startsWith("big", tdb->type))
     labelCfgUi(database, cart, tdb, track);
 printf("\n<table id=barChartControls style='font-size:%d%%' %s>\n<tr><td>", 
         isPopup ? 75 : 100, boxed ?" width='100%'":"");
 
 char cartVar[1024];
 
 /* Data transform. When selected, the next control (view limits max) is disabled */
 
@@ -403,15 +405,36 @@
 else
     {
     jsMakeCheckboxGroupSetClearButton(cartVar, TRUE);
     puts("&nbsp;");
     jsMakeCheckboxGroupSetClearButton(cartVar, FALSE);
     }
 printf("</div>");
 struct slName *selectedValues = NULL;
 if (cartListVarExistsAnyLevel(cart, tdb, FALSE, BAR_CHART_CATEGORY_SELECT))
     selectedValues = cartOptionalSlNameListClosestToHome(cart, tdb, FALSE, BAR_CHART_CATEGORY_SELECT);
 makeCategoryCheckboxes(cartVar, categs, selectedValues);
 
 puts("\n</table>\n");
 cfgEndBox(boxed);
 }
+
+void barChartFacetedUi(char *database, struct cart *cart, struct trackDb *tdb, char *track, 
+                        char *title, boolean boxed)
+/* Bar chart track type that has an associated facets tables */
+{
+printf("<iframe id=\"barChartFacetedUi\" src=\"../cgi-bin/hgFacetedBars?%s\" ",
+    cartSidUrlString(cart));
+printf(" height=\"600\" width=\"1200\" ");  // I hope these get set from javascript soon
+printf(">");
+}
+
+void barChartCfgUi(char *database, struct cart *cart, struct trackDb *tdb, char *track, 
+                        char *title, boolean boxed)
+/* Put up facets in certain situations. */
+{
+if (sameString(track, "singleCellMerged"))
+    barChartFacetedUi(database, cart, tdb, track, title, boxed);
+else
+    barChartCfgUiSelectEachBar(database, cart, tdb, track, title, boxed);
+}
+