5bfb32fdfc639f9bffb5435044cef164bdde0b28 kent Sun Dec 12 08:02:13 2021 -0800 Implementing barChartMerge trackDb option for faceted bar charts. diff --git src/hg/lib/barChartUi.c src/hg/lib/barChartUi.c index 83e5257..46e8094 100644 --- src/hg/lib/barChartUi.c +++ src/hg/lib/barChartUi.c @@ -438,48 +438,57 @@ /* Write html to make white background */ hInsideStyleToWhite(); /* Set up url that has enough context to get back to us. */ struct dyString *returnUrl = dyStringNew(0); dyStringPrintf(returnUrl, "../cgi-bin/hgTrackUi?g=%s", track); dyStringPrintf(returnUrl, "&%s", cartSidUrlString(cart)); /* Load up table from tsv file */ char *requiredStatsFields[] = {"count",}; struct fieldedTable *table = fieldedTableFromTabFile(statsFile, statsFile, requiredStatsFields, ArraySize(requiredStatsFields)); /* Update facet selections from users input if any and get selected part of table */ struct facetedTable *facTab = facetedTableFromTable(table, tdb->track, facets); +facTab->mergeFacetsOk = trackDbSettingOn(tdb, "barChartMerge"); facetedTableUpdateOnClick(facTab, cart); -struct fieldedTable *selected = facetedTableSelect(facTab, cart); +struct facetField **selectedFf = NULL; +struct fieldedTable *selected = facetedTableSelect(facTab, cart, &selectedFf); /* Add wrapper function(s) */ struct hash *wrapperHash = hashNew(0); hashAdd(wrapperHash, "color", wrapColor); /* Pick which fields to display. We'll take the first field whatever it is * named, color if possible, and also count, and any faceted fields. */ struct dyString *displayList = dyStringNew(0); -int colorIx = fieldedTableFindFieldIx(table, "color"); +int colorIx = fieldedTableFindFieldIx(selected, "color"); if (colorIx >= 0) dyStringPrintf(displayList, "color,"); -dyStringAppend(displayList, table->fields[0]); -dyStringPrintf(displayList, ",count,%s", facets); +dyStringAppend(displayList, selected->fields[0]); +dyStringPrintf(displayList, ",count"); +struct slName *facetNameList = slNameListFromComma(facets); +struct slName *facetName; +for (facetName = facetNameList; facetName != NULL; facetName = facetName->next) + { + if (fieldedTableFindFieldIx(selected, facetName->name)) + dyStringPrintf(displayList, ",%s", facetName->name); + } /* Put up facets and table */ -facetedTableWriteHtml(facTab, cart, selected, displayList->string, +facetedTableWriteHtml(facTab, cart, selected, selectedFf, displayList->string, returnUrl->string, 40, wrapperHash, NULL, 7); /* Clean up and go home. */ facetedTableFree(&facTab); } void barChartCfgUi(char *database, struct cart *cart, struct trackDb *tdb, char *track, char *title, boolean boxed) /* Put up facets in certain situations. */ { if (cartVarExists(cart, "ajax")) isPopup = TRUE; boxed = cfgBeginBoxAndTitle(tdb, boxed, title); if (startsWith("big", tdb->type)) labelCfgUi(database, cart, tdb, track);