365fbd229ddd9ccd90b74788973cd8f011476954 kent Sun Dec 12 14:58:01 2021 -0800 Adding in unmerge buttons to the line with the Clear All button. diff --git src/hg/lib/tablesTables.c src/hg/lib/tablesTables.c index 7612139..755e1ff 100644 --- src/hg/lib/tablesTables.c +++ src/hg/lib/tablesTables.c @@ -439,43 +439,46 @@ visibleFacetList, varPrefix); if (visibleFacetList) { // Show top bar with quick-deselects for selected facet values // as well a clear restriction button that cleans out _filter cart var. struct dyString *facetBar = dyStringNew(1024); char filterVar[256]; safef(filterVar, sizeof(filterVar), "%s_filter", varPrefix); char *where = cartUsualString(cart, filterVar, ""); boolean gotSelected = FALSE; + boolean anyMerged = FALSE; struct slName *visList = slNameListFromComma(visibleFacetList); struct slName *vis; for (vis = visList; vis != NULL; vis = vis->next) { int fIx = fieldedTableFindFieldIx(table, vis->name); if (fIx >= 0) { struct facetField *field = ffArray[fIx]; if (!field->allSelected) { gotSelected = TRUE; - htmlDyStringPrintf(facetBar, "<span class='card facet-card' style='display: inline-block;'><span class='card-body'>\n"); + htmlDyStringPrintf(facetBar, + "<span class='card facet-card' style='display: inline-block;'>" + "<span class='card-body'>\n"); htmlDyStringPrintf(facetBar, "<dt style='display: inline-block;'>\n"); htmlDyStringPrintf(facetBar, "<h6 class='card-title'>%s</h6></dt>\n", field->fieldName); struct facetVal *val; // Sort values alphabetically // Make a copy to not disturb the original order struct facetVal *valListCopy = facetsClone(field->valList); slSort(&valListCopy, facetValCmp); for (val = valListCopy; val; val=val->next) { boolean specificallySelected = (val->selected && !field->allSelected); if (specificallySelected) @@ -494,75 +497,95 @@ "&%s_page=1'" ">", returnUrl, varPrefix, op, varPrefix, field->fieldName, varPrefix, val->val, varPrefix ); htmlDyStringPrintf(facetBar, "%s (%d)</a>", naForEmpty(val->val), val->selectCount); htmlDyStringPrintf(facetBar, "</dd>\n"); } } slFreeList(&valListCopy); htmlDyStringPrintf(facetBar, "</span></span>\n"); } } + else + { + anyMerged = TRUE; + htmlDyStringPrintf(facetBar, + "<span class='card facet-card' style='display: inline-block;'>" + "<span class='card-body'>\n"); + htmlDyStringPrintf(facetBar, "<dt style='display: inline-block;'>\n"); + htmlDyStringPrintf(facetBar, "<h6 class='card-title'>%s</h6></dt>\n", + vis->name); + htmlDyStringPrintf(facetBar, " <a class='btn btn-secondary' href='%s" + "&%s_facet_op=%s|none|" + "&%s_facet_fieldName=%s|url|" + "&%s_facet_fieldVal=%s|url|" + "&%s_page=1' " + ">", + returnUrl, varPrefix, "unmerge", varPrefix, vis->name, + varPrefix, "", varPrefix); + htmlDyStringPrintf(facetBar, " %s", "unmerge"); + htmlDyStringPrintf(facetBar, "</a>"); + htmlDyStringPrintf(facetBar, "</span></span>\n"); + } } - if (!isEmpty(where) || gotSelected) + if (!isEmpty(where) || gotSelected || anyMerged) { printf("<div>\n"); } if (!isEmpty(where)) { // left column printf("Restricting files to where %s. ", where); printf("  "); printf("<input class='btn btn-secondary' type='button' id='clearRestrictionButton' VALUE=\"Clear Restriction\">"); char jsText[1024]; safef(jsText, sizeof(jsText), "$('[name=%s_page]').val('1');\n" "$('[name=clearRestriction]').val('1');\n" "$('#submit').click();\n", varPrefix); jsOnEventById("click", "clearRestrictionButton", jsText); printf("<br>"); } - - if (gotSelected) + if (gotSelected || anyMerged) { // reset all facet value selections button char *op = "resetAll"; htmlPrintf("<a class='btn btn-secondary' href='%s" "&%s_facet_op=%s|none|" "&%s_facet_fieldName=%s|url|" "&%s_facet_fieldVal=%s|url|" "&%s_page=1' " ">%s</a>\n", returnUrl, varPrefix, op, varPrefix, "", varPrefix, "", varPrefix, "Clear All" ); printf("<dl style='display: inline-block;'>\n"); printf("%s\n", facetBar->string); printf("</dl>\n"); } - if (!isEmpty(where) || gotSelected) + if (!isEmpty(where) || gotSelected || anyMerged) printf("</div><br>\n"); dyStringFree(&facetBar); } printf("<div class='row'>\n"); // parent container if (visibleFacetList) { // left column printf("<div class='col-xs-6 col-sm-4 col-md-4 col-lg-3 col-xl-3'>\n"); struct slName *visList = slNameListFromComma(visibleFacetList); struct slName *vis; for (vis = visList; vis != NULL; vis = vis->next)