a9b3f2ba629176ff781c64587544b78ddfa1557b kent Mon Dec 13 18:30:59 2021 -0800 Making merge/unmerge buttons jump page on return to where they are rather than to top of page. Saves scrolling when merging/unmerging a lot of things. diff --git src/hg/lib/tablesTables.c src/hg/lib/tablesTables.c index 755e1ff..244ff46 100644 --- src/hg/lib/tablesTables.c +++ src/hg/lib/tablesTables.c @@ -406,30 +406,40 @@ // last page printf("   "); safef(id, sizeof id, "%s_last", varPrefix); printf("", id); jsOnEventByIdF("click", id, "$('[name=%s_page]').val('%d');\n" "event.target.closest('form').submit();\n" , varPrefix, totalPages); } } } } +static void createSelfId(char *varPrefix, char *fieldName, + char *val, char *selfId, int selfIdSize) +{ +if (val == NULL) + safef(selfId, selfIdSize, "%s_self_a_%s", varPrefix, fieldName); +else + safef(selfId, selfIdSize, "%s_self_a_%s_%s", varPrefix, fieldName, val); +subChar(selfId, ' ', '_'); +} + void webFilteredFieldedTable(struct cart *cart, struct fieldedTable *table, char *visibleFieldList, char *returnUrl, char *varPrefix, int maxLenField, struct hash *tagOutputWrappers, void *wrapperContext, boolean withFilters, char *pluralInstructions, int pageSize, int facetUsualSize, struct fieldedTableSegment *largerContext, struct hash *suggestHash, struct facetField **ffArray, char *visibleFacetList, void (*addFunc)(int), boolean facetMergeOk ) /* Show a fielded table that can be sorted by clicking on column labels and optionally * that includes a row of filter controls above the labels . * The maxLenField is maximum character length of field before truncation with ... * Pass in 0 for no max. */ { if (strchr(returnUrl, '?') == NULL) errAbort("Expecting returnUrl to include ? in showFieldedTable\nIt's %s", returnUrl); @@ -495,32 +505,31 @@ "&%s_facet_fieldName=%s|url|" "&%s_facet_fieldVal=%s|url|" "&%s_page=1'" ">", returnUrl, varPrefix, op, varPrefix, field->fieldName, varPrefix, val->val, varPrefix ); htmlDyStringPrintf(facetBar, "%s (%d)", naForEmpty(val->val), val->selectCount); htmlDyStringPrintf(facetBar, "\n"); } } slFreeList(&valListCopy); htmlDyStringPrintf(facetBar, "\n"); - } - } + } } else { anyMerged = TRUE; htmlDyStringPrintf(facetBar, "" "\n"); htmlDyStringPrintf(facetBar, "
\n"); htmlDyStringPrintf(facetBar, "
%s
\n", vis->name); htmlDyStringPrintf(facetBar, " ", @@ -580,59 +589,60 @@ } printf("
\n"); // parent container if (visibleFacetList) { // left column printf("
\n"); struct slName *visList = slNameListFromComma(visibleFacetList); struct slName *vis; for (vis = visList; vis != NULL; vis = vis->next) { char *fieldName = vis->name; char selfId[256]; - safef(selfId, sizeof(selfId), "%s_self_a_%s", varPrefix, fieldName); - subChar(selfId, ' ', '_'); + createSelfId(varPrefix, fieldName, NULL, selfId, sizeof(selfId)); /* Work on facet field label line */ htmlPrintf("
\n", selfId); htmlPrintf("
%s",vis->name); int f = fieldedTableFindFieldIx(table, fieldName); char *op = "unmerge"; struct facetField *field = NULL; if (f >= 0) { field = ffArray[f]; if (!field->isMerged) op = "merge"; } /* Write merge/unmerge link and number of categories */ if (facetMergeOk) { + char selfId[256]; + createSelfId(varPrefix, fieldName, NULL, selfId, sizeof(selfId)); htmlPrintf(""); htmlPrintf("", returnUrl, varPrefix, op, varPrefix, fieldName, - varPrefix, "", varPrefix); + varPrefix, "", varPrefix, selfId); htmlPrintf("%s", op); if (field != NULL && sameString(op, "merge")) { int selectedFieldCount = facetFieldCountSelected(field); htmlPrintf(" %d", selectedFieldCount); } htmlPrintf(""); } /* CLose up facet field label line */ htmlPrintf("
\n"); if (field != NULL) { @@ -664,33 +674,32 @@ { boolean specificallySelected = (val->selected && !field->allSelected); if ((val->selectCount > 0 && (field->showAllValues || valuesShown < facetUsualSize) && !field->isMerged) || specificallySelected) { ++valuesShown; ++extraAnchorPos; char *op = "add"; if (specificallySelected) op = "remove"; printf("
= extraAnchorPeriod) { - safef(selfId, sizeof(selfId), "%s_self_a_%s_%s", varPrefix, vis->name, - val->val); - subChar(selfId, ' ', '_'); + char selfId[256]; + createSelfId(varPrefix, vis->name, val->val, selfId, sizeof(selfId)); printf(" id=\"%s\"", selfId); extraAnchorPos= 0; } printf(">\n"); htmlPrintf(" ", specificallySelected ? "true" : "false", specificallySelected ? "checked" : ""); htmlPrintf("", returnUrl, varPrefix, op, varPrefix, field->fieldName, varPrefix, val->val, varPrefix, selfId @@ -711,32 +720,32 @@ htmlPrintf("
See %d More
\n", returnUrl, varPrefix, op, varPrefix, field->fieldName, varPrefix, "", varPrefix, selfId, valuesNotShown ); } // show "See Fewer" link when facet has lots of values if (field->showAllValues && valuesShown >= facetUsualSize) { - safef(selfId, sizeof(selfId), "%s_self_a_%s", varPrefix, vis->name); - subChar(selfId, ' ', '_'); + char selfId[256]; + createSelfId(varPrefix, vis->name, NULL, selfId, sizeof(selfId)); char *op = "showSomeValues"; htmlPrintf("
%s
\n", returnUrl, varPrefix, op, varPrefix, field->fieldName, varPrefix, "", varPrefix, selfId, "See Fewer" ); } } htmlPrintf("
\n"); } printf("
\n");