7f165a4c474605452621918390c40378a571eec5 kent Sun Jan 31 08:31:08 2021 -0800 Getting the facets properly (not in an iFrame) into hgTrackUi. diff --git src/hg/lib/barChartUi.c src/hg/lib/barChartUi.c index 2317e12..f01e7df 100644 --- src/hg/lib/barChartUi.c +++ src/hg/lib/barChartUi.c @@ -4,30 +4,31 @@ * 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 "facetedTable.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), "" " %s", categ->color, categ->label); @@ -179,43 +180,47 @@ cgiMakeDoubleVarWithExtra(cartVar, viewMax, 4, isLogTransform ? "disabled" : ""); char *unit = trackDbSettingClosestToHomeOrDefault(tdb, BAR_CHART_UNIT, ""); printf(" %s (range 0-%d)\n", buf, unit, round(barChartUiMaxMedianScore(tdb))); } // TODO: libify static boolean isUrl(char *url) { return startsWith("http://", url) || startsWith("https://", url) || startsWith("ftp://", url); } static void getCategsFromSettings(char *track, char *labelSetting, char *colorSetting, - struct slName **labels, struct slName **colors) + struct slName **retLabels, struct slName **colors) /* Get category labels and optionally colors, from track settings */ { -if (!labels || !colors) - return; if (isEmpty(labelSetting)) { errAbort("barChart track %s missing required setting: %s or %s\n", track, BAR_CHART_CATEGORY_LABELS, BAR_CHART_CATEGORY_URL); } char *words[BAR_CHART_MAX_CATEGORIES]; int labelCount = chopLine(cloneString(labelSetting), words); -*labels = slNameListFromStringArray(words, labelCount); +struct slName *labelList = *retLabels = slNameListFromStringArray(words, labelCount); + +/* Strip out underbars from trackDb early */ +struct slName *label; +for (label = labelList; label != NULL; label = label->next) + subChar(label->name, '_', ' '); + if (isNotEmpty(colorSetting)) { int colorCount = chopLine(cloneString(colorSetting), words); if (colorCount != labelCount) errAbort("barChart track %s settings mismatch: %s (%d) and %s (%d)\n", track, BAR_CHART_CATEGORY_LABELS, labelCount, BAR_CHART_CATEGORY_COLORS, colorCount); *colors = slNameListFromStringArray(words, labelCount); } } static void getCategsFromFile(char *track, char *categUrl, struct slName **labels, struct slName **colors) /* Get category labels and optionally colors, from category file. * This is tab-sep file, column 1 is category label, optional column 2 is a color spec */ { @@ -356,85 +361,133 @@ } 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 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\n
", isPopup ? 75 : 100, boxed ?" width='100%'":""); -char cartVar[1024]; - /* Data transform. When selected, the next control (view limits max) is disabled */ puts("
"); barChartUiLogTransform(cart, track, tdb); /* Viewing limits max. This control is disabled if log transform is selected */ // construct class so JS can toggle puts("  "); barChartUiViewLimits(cart, track, tdb); puts("
"); - /* Category filter */ printf("
"); char *categoryLabel = trackDbSettingClosestToHomeOrDefault(tdb, BAR_CHART_CATEGORY_LABEL, BAR_CHART_CATEGORY_LABEL_DEFAULT); char *db = cartString(cart, "db"); struct barChartCategory *categs = barChartUiGetCategories(db, tdb); printf("
%s:\n", categoryLabel); +char cartVar[1024]; safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_CATEGORY_SELECT); if (isPopup) { printf("", hTrackUiForTrack(track), track); } else { jsMakeCheckboxGroupSetClearButton(cartVar, TRUE); puts(" "); jsMakeCheckboxGroupSetClearButton(cartVar, FALSE); } printf("
"); 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
\n"); -cfgEndBox(boxed); +} + +void wrapColor(struct fieldedTable *table, struct fieldedRow *row, + char *field, char *val, char *shortVal, void *context) +/* Write out wrapper draws a SVG bar*/ +{ +printf("
   ", val); +// printf(""); } 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("