dacec81196967c10d494c7b77a49cc41a5aa63ce kent Thu Jan 28 22:10:56 2021 -0800 Making a couple of more variables use the varPrefix rather than be hard coded. diff --git src/hg/hgFacetedBars/hgFacetedBars.c src/hg/hgFacetedBars/hgFacetedBars.c index 0cfc09f..d01c3e7 100644 --- src/hg/hgFacetedBars/hgFacetedBars.c +++ src/hg/hgFacetedBars/hgFacetedBars.c @@ -9,84 +9,154 @@ #include "web.h" #include "cheapcgi.h" #include "cart.h" #include "hui.h" #include "udc.h" #include "knetUdc.h" #include "genbank.h" #include "tablesTables.h" /* Global Variables */ struct cart *cart; /* CGI and other variables */ struct hash *oldVars = NULL; char *database = NULL; char *genome = NULL; -void doBody() +struct facetedTable +/* Help manage a faceted table */ { -struct sqlConnection *conn = sqlConnect(database); -struct hash *emptyHash = hashNew(0); + struct facetedTable *next; + char *name; /* Name of file or database table */ + char *varPrefix; /* Prefix used on variables */ + }; -/* Write out html to pull in the other files we use. */ +struct facetedTable *facetedTableNew(char *name, char *varPrefix) +{ +struct facetedTable *ft; +AllocVar(ft); +ft->name = cloneString(name); +ft->varPrefix = cloneString(varPrefix); +return ft; +} + +void facetedTableFree(struct facetedTable **pFt) +/* Free up resources associated with faceted table */ +{ +struct facetedTable *ft = *pFt; +if (ft != NULL) + { + freeMem(ft->name); + freeMem(ft->varPrefix); + freez(pFt); + } +} + + +void facetedTableWebInit(struct facetedTable *ft) +/* Print out scripts and css that we need. We should be in a page body or title. */ +{ webIncludeResourceFile("facets.css"); printf("\t\t"); printf("\t\t\n" "\n" "\t\t\n" "\t\t\n" "\n" "\t\t\n" "\t\t\n" ); +} -/* Working within a form we save context */ -printf("
\n"); -cartSaveSession(cart); +char *facetedTableSelOp(struct facetedTable *ft, struct cart *cart) +/* Look up selOp in cart */ +{ +char var[256]; +safef(var, sizeof(var), "%s_facet_op", ft->varPrefix); +return cartOptionalString(cart, var); +} +char *facetedTableSelField(struct facetedTable *ft, struct cart *cart) +/* Look up sel field in cart */ +{ +char var[256]; +safef(var, sizeof(var), "%s_facet_fieldName", ft->varPrefix); +return cartOptionalString(cart, var); +} + +char *facetedTableSelVal(struct facetedTable *ft, struct cart *cart) +/* Look up sel val in cart */ +{ +char var[256]; +safef(var, sizeof(var), "%s_facet_fieldVal", ft->varPrefix); +return cartOptionalString(cart, var); +} + + +void facetedTableRemoveOpVars(struct facetedTable *ft, struct cart *cart) +/* Remove sel op/field/name vars from cart */ +{ +char var[256]; +safef(var, sizeof(var), "%s_facet_op", ft->varPrefix); +cartRemove(cart, var); +safef(var, sizeof(var), "%s_facet_fieldVal", ft->varPrefix); +cartRemove(cart, var); +safef(var, sizeof(var), "%s_facet_fieldName", ft->varPrefix); +cartRemove(cart, var); +} + +void doBody() +{ /* Fake up a 'track' for development */ char *trackName = "cellFacetsJk1"; +struct sqlConnection *conn = sqlConnect(database); +struct hash *emptyHash = hashNew(0); +struct facetedTable *ft = facetedTableNew("the original", trackName); + +/* Write out html to pull in the other files we use. */ +facetedTableWebInit(ft); + +/* Working within a form we save context */ +printf("\n"); +cartSaveSession(cart); + /* Set up url that has enough context to get back to us. This is very much a work in * progress. */ char returnUrl[PATH_LEN*2]; safef(returnUrl, sizeof(returnUrl), "../cgi-bin/hgFacetedBars?%s", cartSidUrlString(cart) ); /* If we got called by a click on a facet deal with that */ -char opVar[256]; -safef(opVar, sizeof(opVar), "%s_facet_op", trackName); -char *selOp = cartOptionalString(cart, opVar); +char *selOp = facetedTableSelOp(ft, cart); if (selOp) { - char *selFieldName = cartOptionalString(cart, "browseFiles_facet_fieldName"); - char *selFieldVal = cartOptionalString(cart, "browseFiles_facet_fieldVal"); + char *selFieldName = facetedTableSelField(ft, cart); + char *selFieldVal = facetedTableSelVal(ft, cart); if (selFieldName && selFieldVal) { char *selectedFacetValues=cartUsualString(cart, "cdwSelectedFieldValues", ""); struct facetField *selList = deLinearizeFacetValString(selectedFacetValues); selectedListFacetValUpdate(&selList, selFieldName, selFieldVal, selOp); char *newSelectedFacetValues = linearizeFacetVals(selList); cartSetString(cart, "cdwSelectedFieldValues", newSelectedFacetValues); - cartRemove(cart, opVar); - cartRemove(cart, "browseFiles_facet_fieldName"); - cartRemove(cart, "browseFiles_facet_fieldVal"); + facetedTableRemoveOpVars(ft, cart); } } /* Put up the big faceted search table */ webFilteredSqlTable(cart, conn, "cell_count,organ,cell_type", trackName, "", returnUrl, trackName, 32, emptyHash, NULL, FALSE, NULL, 100, 10, emptyHash, "organ,cell_class,stage,cell_type", NULL); /* Clean up and go home. */ printf("
\n"); hashFree(&emptyHash); sqlDisconnect(&conn);