563146be9664746e041d2629fbae46f86283ac6a kate Mon Jan 25 15:37:03 2016 -0800 Persist ordering in tissue table (using sortOrder cart var) diff --git src/hg/lib/gtexUi.c src/hg/lib/gtexUi.c index d385542..e4ae2cd 100644 --- src/hg/lib/gtexUi.c +++ src/hg/lib/gtexUi.c @@ -119,94 +119,98 @@ if (hashNumEntries(checkHash) == 0) tsel->checked = TRUE; else tsel->checked = (hashLookup(checkHash, tis->name) != NULL); slAddHead(&allTissues, tsel); } slReverse(&allTissues); makeGroupCheckboxes(name, NULL, allTissues); puts(""); char buf[512]; safef(buf, sizeof(buf), "%s%s", cgiMultListShadowPrefix(), name); cgiMakeHiddenVar(buf, "0"); } static void makeTableTissueCheckboxes(char *name, struct gtexTissue *tissues, - struct slName *checked, boolean isPopup) + struct slName *checked, struct cart *cart) { char *onClick = ""; -// Sortable table can't be activated when in activated from right-click (popup mode) -if (!isPopup) +// Sortable table can't be displayed when UI is activated from right-click (popup mode) +if (!cartVarExists(cart, "ajax")) { jsIncludeFile("hui.js", NULL); onClick = "'tableSortAtButtonPress(this);"; } struct hash *checkHash = hashNew(0); struct slName *sel; for (sel = checked; sel != NULL; sel = sel->next) hashAdd(checkHash, sel->name, sel->name); //puts(""); -puts("\n
"); +puts("\n
"); /* table header */ +char orderVar[256]; +safef(orderVar, sizeof(orderVar), "%s.sortOrder", name); +char *sortOrder = cartCgiUsualString(cart, orderVar, "tissue=+ samples=+ organ=+ system=+"); puts("\n"); -puts("\n"); +puts("\n"); printf("\n\n", - "gtexGene.sortOrder", "tissue=+ samples=+ organ=+ system=+"); + orderVar, sortOrder); puts(""); printf("", onClick); printf("", onClick); printf("", onClick); printf("", onClick); puts("\n"); puts(""); /* table body */ -puts(""); +printf(""); struct hash *tscHash = gtexGetTissueSampleCount(); struct gtexTissue *tis; boolean isChecked = FALSE; for (tis = tissues; tis != NULL; tis = tis->next) { puts("\n"); // checkbox if (hashNumEntries(checkHash) == 0) isChecked = TRUE; else isChecked = (hashLookup(checkHash, tis->name) != NULL); printf("", name, tis->name, isChecked ? "checked" : ""); // color patch printf("\n%s", makeTissueColorPatch(tis)); // tissue name printf("\n", tis->description); // sample count int samples = hashIntValDefault(tscHash, tis->name, 0); printf("\n", samples, samples); // organ printf("\n", tis->organ); // system printf("\n", getSystem(tis)); + puts("\n"); } puts(""); puts("
      Tissue Samples Organ System
 %s %d %s %s
"); char buf[512]; safef(buf, sizeof(buf), "%s%s", cgiMultListShadowPrefix(), name); cgiMakeHiddenVar(buf, "0"); } static void makeGroupedTissueCheckboxes(char *name, struct gtexTissue *tissues, struct slName *checked) { struct hash *checkHash = hashNew(0); struct slName *sel; for (sel = checked; sel != NULL; sel = sel->next) hashAdd(checkHash, sel->name, sel->name); @@ -238,96 +242,93 @@ } slReverse(&brainTissues); slReverse(&digestiveTissues); slReverse(&reproductiveTissues); slReverse(&otherTissues); makeGroupCheckboxes(name, "Brain", brainTissues); makeGroupCheckboxes(name, "Gastrointestinal", digestiveTissues); makeGroupCheckboxes(name, "Reproductive", reproductiveTissues); makeGroupCheckboxes(name, "Other", otherTissues); puts(""); char buf[512]; safef(buf, sizeof(buf), "%s%s", cgiMultListShadowPrefix(), name); cgiMakeHiddenVar(buf, "0"); } -void gtexGeneUi(struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed) +void gtexGeneUi(struct cart *cart, struct trackDb *tdb, char *track, char *title, boolean boxed) /* GTEx (Genotype Tissue Expression) per gene data */ { -boolean isPopup = FALSE; -if (cartVarExists(cart, "ajax")) - isPopup = TRUE; boxed = cfgBeginBoxAndTitle(tdb, boxed, title); printf("",boxed?" width='100%'":""); char cartVar[1024]; char *selected = NULL; /* Sample selection */ printf("Samples: "); -safef(cartVar, sizeof(cartVar), "%s.%s", name, GTEX_SAMPLES); +safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_SAMPLES); selected = cartCgiUsualString(cart, cartVar, GTEX_SAMPLES_DEFAULT); boolean isAllSamples = sameString(selected, GTEX_SAMPLES_ALL); cgiMakeRadioButton(cartVar, GTEX_SAMPLES_ALL, isAllSamples); printf("All\n"); cgiMakeRadioButton(cartVar, GTEX_SAMPLES_COMPARE_SEX, !isAllSamples); printf("Compare by gender\n"); printf("

"); /* Comparison type */ printf("

Comparison display:\n"); -safef(cartVar, sizeof(cartVar), "%s.%s", name, GTEX_COMPARISON_DISPLAY); +safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_COMPARISON_DISPLAY); selected = cartCgiUsualString(cart, cartVar, GTEX_COMPARISON_DEFAULT); boolean isMirror = sameString(selected, GTEX_COMPARISON_MIRROR); cgiMakeRadioButton(cartVar, GTEX_COMPARISON_DIFF, !isMirror); printf("Difference graph\n"); cgiMakeRadioButton(cartVar, GTEX_COMPARISON_MIRROR, isMirror); printf("Two graphs\n"); printf("

"); /* Data transform */ printf("

Log10 transform:\n"); -safef(cartVar, sizeof(cartVar), "%s.%s", name, GTEX_LOG_TRANSFORM); +safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_LOG_TRANSFORM); boolean isLogTransform = cartCgiUsualBoolean(cart, cartVar, GTEX_LOG_TRANSFORM_DEFAULT); cgiMakeCheckBox(cartVar, isLogTransform); /* Viewing limits max */ printf("  View limits maximum:\n"); -safef(cartVar, sizeof(cartVar), "%s.%s", name, GTEX_MAX_LIMIT); +safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_MAX_LIMIT); // TODO: set max and initial limits from gtexInfo table int viewMax = cartCgiUsualInt(cart, cartVar, GTEX_MAX_LIMIT_DEFAULT); cgiMakeIntVar(cartVar, viewMax, 4); printf(" RPKM (range 10-180000)
\n"); printf("

"); /* Color scheme */ // Not sure if we still want this option printf("

Tissue colors:\n"); -safef(cartVar, sizeof(cartVar), "%s.%s", name, GTEX_COLORS); +safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_COLORS); selected = cartCgiUsualString(cart, cartVar, GTEX_COLORS_DEFAULT); boolean isGtexColors = sameString(selected, GTEX_COLORS_GTEX); cgiMakeRadioButton(cartVar, GTEX_COLORS_GTEX, isGtexColors); printf("GTEx\n"); cgiMakeRadioButton(cartVar, GTEX_COLORS_RAINBOW, !isGtexColors); printf("Rainbow\n"); printf("

"); /* Tissue filter */ printf("

Tissue selection:\n"); -safef(cartVar, sizeof(cartVar), "%s.%s", name, GTEX_TISSUE_SELECT); +safef(cartVar, sizeof(cartVar), "%s.%s", track, GTEX_TISSUE_SELECT); jsMakeCheckboxGroupSetClearButton(cartVar, TRUE); puts(" "); jsMakeCheckboxGroupSetClearButton(cartVar, FALSE); struct gtexTissue *tissues = gtexGetTissues(); struct slName *selectedValues = NULL; if (cartListVarExistsAnyLevel(cart, tdb, FALSE, GTEX_TISSUE_SELECT)) selectedValues = cartOptionalSlNameListClosestToHome(cart, tdb, FALSE, GTEX_TISSUE_SELECT); char *selectType = cgiUsualString("tis", "table"); if (sameString(selectType, "group")) makeGroupedTissueCheckboxes(cartVar, tissues, selectedValues); else if (sameString(selectType, "table")) - makeTableTissueCheckboxes(cartVar, tissues, selectedValues, isPopup); + makeTableTissueCheckboxes(cartVar, tissues, selectedValues, cart); else makeAllTissueCheckboxes(cartVar, tissues, selectedValues); cfgEndBox(boxed); }