f225bd9ef750fb706f2f14bd87e3512b43e23dc1 max Wed May 13 13:50:34 2020 -0700 Revert "adding a protease track to uniprot, refs #25192". I have no idea what happened here, looks like I typed git commit -a instead of git commit -m This reverts commit db7c8abb6d7674bb26f579eabb58bc080ce76fdd. diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c index d59e030..738c147 100644 --- src/hg/hgTrackUi/hgTrackUi.c +++ src/hg/hgTrackUi/hgTrackUi.c @@ -3076,30 +3076,126 @@ struct dyString *dy = dyStringNew(1024); jsonDyStringPrint(dy, jsonGlobalsHash, "common", 0); jsInline(dy->string); dyStringFree(&dy); } } void jsonObjectAddGlobal(char *name, struct jsonElement *ele) /* Add json object to global hash */ { if (jsonGlobalsHash == NULL) jsonGlobalsHash = newJsonObject(newHash(5)); jsonObjectAdd(jsonGlobalsHash, name, ele); } +void showSupertrackInfo(struct trackDb *tdb) +{ +// A bit of context when we're in hierarchy: parent description and sibling track list + +if (!tdb->parent) + return; + +// show super-track info +struct trackDb *tdbParent = tdb->parent; +if (trackDbSetting(tdbParent, "wgEncode")) + printf("<A HREF='/ENCODE/index.html'><IMG style='vertical-align:middle;' " + "width=100 src='/images/ENCODE_scaleup_logo.png'><A>"); +printf("<b>Track collection: <a href='%s?%s=%s&c=%s&g=%s'>%s </b></a>", + hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), + chromosome, cgiEncode(tdbParent->track), tdbParent->longLabel); + +// show group info +struct grp *grp, *grps = hLoadGrps(database); +for (grp = grps; grp != NULL; grp = grp->next) + { + if (sameString(grp->name, tdb->grp)) + { + printf(" <B style='font-size:100%%;'>" + "(<A HREF=\"%s?%s=%s&c=%s&hgTracksConfigPage=configure" + "&hgtgroup_%s_close=0#%sGroup\" title='%s tracks in track configuration " + "page'><IMG height=12 src='../images/ab_up.gif'>All %s%s</A>)</B>", + hgTracksName(), cartSessionVarName(), cartSessionId(cart), chromosome, + tdb->grp, tdb->grp, grp->label, grp->label, + endsWith(grp->label," Tracks")?"":" tracks"); + break; + } + } +grpFreeList(&grps); + +// collapsed panel for Description + +printf("<p>"); +printf("<p><table>"); // required by jsCollapsible +jsBeginCollapsibleSectionFontSize(cart, tdb->track, "superDescription", "Description", FALSE, + "medium"); +char *html = replaceChars(tdbParent->html, "<H", "<h"); +html = replaceChars(html, "</H", "</h"); + +// remove Description header +html = replaceChars(html, "<h2>Description</h2>", ""); +html = replaceChars(html, "<h3>Description</h3>", ""); +html = replaceChars(html, "<h1>Description</h1>", ""); + +// remove everything after Description text +char *end = stringIn("<h2>", html); +if (!end) + end = stringIn("<h1>", html); +if (!end) + end = stringIn("<h3>", html); +if (end) + *end = '\0'; +printf("%s", html); +printf("<p><i>To view the full description, click " + "<a target='_blank' href='%s?%s=%s&c=%s&g=%s#TRACK_HTML'>here.</i></a>\n", + hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), + chromosome, cgiEncode(tdbParent->track)); +jsEndCollapsibleSection(); +printf("</table>"); // required by jsCollapsible + +// collapsed panel for list of other tracks in the supertrack + +char listTitle[1000]; +safef(listTitle, sizeof listTitle, "All tracks in this collection (%d)", + slCount(tdbParent->children)); +printf("<table>"); // required by jsCollapsible +jsBeginCollapsibleSectionFontSize(cart, tdb->track, "superMembers", listTitle, FALSE, "medium"); +printf("<table cellpadding='2' style='margin-left: 50px';>"); +struct slRef *childRef; +tdbRefSortPrioritiesFromCart(cart, &tdbParent->children); +for (childRef = tdbParent->children; childRef != NULL; childRef = childRef->next) + { + struct trackDb *sibTdb = childRef->val; + if (sameString(sibTdb->track, tdb->track)) + { + printf("<tr><td><b>%s</b></td>\n", sibTdb->shortLabel); + printf("<td>%s</td></tr>\n", sibTdb->longLabel); + continue; + } + printf("<tr>"); + printf("<td><a href='%s?%s=%s&c=%s&g=%s'>%s</a> </td>", + tdbIsDownloadsOnly(sibTdb) ? hgFileUiName(): hTrackUiForTrack(sibTdb->track), + cartSessionVarName(), cartSessionId(cart), chromosome, cgiEncode(sibTdb->track), + sibTdb->shortLabel); + printf("<td>%s</td></tr>\n", sibTdb->longLabel); + } +printf("</table>"); +jsEndCollapsibleSection(); +printf("</table>"); // required by jsCollapsible +printf("</p>"); +} + void trackUi(struct trackDb *tdb, struct trackDb *tdbList, struct customTrack *ct, boolean ajax) /* Put up track-specific user interface. */ { if (!ajax) { jsIncludeFile("jquery.js", NULL); webIncludeResourceFile("jquery-ui.css"); jsIncludeFile("jquery-ui.js", NULL); jsIncludeFile("utils.js",NULL); webIncludeResourceFile("spectrum.min.css"); jsIncludeFile("spectrum.min.js",NULL); jsonObjectAddGlobal("track", newJsonString(tdb->track)); jsonObjectAddGlobal("db", newJsonString(database)); } #define RESET_TO_DEFAULTS "defaults" @@ -3135,30 +3231,32 @@ printf("<h2>No description found for: %s.</h2>",tdbParent?tdbParent->track:tdb->track); } cartRemove(cart,"descriptionOnly"); // This is a once only request and should be deleted return; } if (tdbIsContainer(tdb)) { safef(setting,sizeof(setting),"%s.%s",tdb->track,RESET_TO_DEFAULTS); // NOTE: if you want track vis to not be reset, move to after vis dropdown if (1 == cartUsualInt(cart, setting, 0)) cartRemoveAllForTdbAndChildren(cart,tdb); else if (!ajax) // Overkill on !ajax, because ajax shouldn't be called for a composite cartTdbTreeReshapeIfNeeded(cart,tdb); } +/* track configuration form */ + printf("<FORM ACTION=\"%s\" NAME=\""MAIN_FORM"\" METHOD=%s>\n\n", hgTracksName(), cartUsualString(cart, "formMethod", "POST")); cartSaveSession(cart); if (sameWord(tdb->track,"ensGene")) { char longLabel[256]; struct trackVersion *trackVersion = getTrackVersion(database, tdb->track); if ((trackVersion != NULL) && !isEmpty(trackVersion->version)) { if (!isEmpty(trackVersion->dateReference) && differentWord("current", trackVersion->dateReference)) safef(longLabel, sizeof(longLabel), "Ensembl Gene Predictions - archive %s - %s", trackVersion->version, trackVersion->dateReference); else safef(longLabel, sizeof(longLabel), "Ensembl Gene Predictions - %s", trackVersion->version); } else @@ -3177,75 +3275,70 @@ } else { struct trackVersion *trackVersion = getTrackVersion(database, "ncbiRefSeq"); if ((trackVersion != NULL) && !isEmpty(trackVersion->version)) { safef(longLabel, sizeof(longLabel), "%s - Annotation Release %s", tdb->longLabel, trackVersion->version); } else safef(longLabel, sizeof(longLabel), "%s", tdb->longLabel); } printf("<B style='font-size:200%%;'>%s%s</B>\n", longLabel, tdbIsSuper(tdb) ? " Tracks" : ""); } else { - if (trackDbSetting(tdb, "wgEncode")) + if (trackDbSetting(tdb, "wgEncode") && !tdb->parent) printf("<A HREF='/ENCODE/index.html'><IMG style='vertical-align:middle;' " "width=100 src='/images/ENCODE_scaleup_logo.png'><A>"); // set large title font size, but less so for long labels to minimize wrap printf("<B style='font-size:%d%%;'>%s%s</B>\n", strlen(tdb->longLabel) > 30 ? 133 : 200, - tdb->longLabel, tdbIsSuper(tdb) ? " Tracks" : ""); + tdb->longLabel, tdbIsSuper(tdb) ? " tracks" : ""); } + + /* Print link for parent track */ if (!ajax) { - if (tdb->parent) - { - char *encodedMapName = cgiEncode(tdb->parent->track); - printf(" <B style='font-size:100%%;'>" - "Member of track group: " - "<A HREF=\"%s?%s=%s&c=%s&g=%s\" title='Link to parent track'>" - "<IMG height=12 src='../images/ab_up.gif'>%s</A></B>)", - hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), - chromosome, encodedMapName, tdb->parent->shortLabel); - freeMem(encodedMapName); - } - /*else + if (!tdb->parent) { + // show group info struct grp *grp, *grps = hLoadGrps(database); for (grp = grps; grp != NULL; grp = grp->next) { if (sameString(grp->name,tdb->grp)) { printf(" <B style='font-size:100%%;'>" "(<A HREF=\"%s?%s=%s&c=%s&hgTracksConfigPage=configure" "&hgtgroup_%s_close=0#%sGroup\" title='%s tracks in track configuration " "page'><IMG height=12 src='../images/ab_up.gif'>All %s%s</A>)</B>", hgTracksName(), cartSessionVarName(), cartSessionId(cart),chromosome, tdb->grp,tdb->grp,grp->label,grp->label, endsWith(grp->label," Tracks")?"":" tracks"); break; } } grpFreeList(&grps); } - */ + } puts("<BR><BR>"); +if (tdb->parent) + showSupertrackInfo(tdb); + if (ct && sameString(tdb->type, "maf")) tdb->canPack = TRUE; else if (sameString(tdb->track, WIKI_TRACK_TABLE)) // special case wikiTrack (there's no trackDb entry); fixes redmine 2395 tdb->canPack = TRUE; else if (sameString(tdb->type, "halSnake")) tdb->canPack = TRUE; else if (!startsWith("bigWig", tdb->type) && startsWith("big", tdb->type)) tdb->canPack = TRUE; else if (sameString(tdb->type, "bigNarrowPeak")) tdb->canPack = TRUE; // Don't bother with vis controls for downloadsOnly if (!tdbIsDownloadsOnly(tdb)) { @@ -3338,31 +3431,31 @@ // NAVLINKS - For pages w/ matrix, add Description, Subtracks and Downloads links if (trackDbSetting(tdb, "dimensions") || (trackDbSetting(tdb, "wgEncode") && tdbIsComposite(tdb))) { printf("\n <span id='navDown' style='float:right; display:none;'>"); if (trackDbSetting(tdb, "wgEncode") && isEncode2(database, tdb->track)) { printf("<A TARGET=_BLANK HREF='../ENCODE/index.html' TITLE='ENCODE Portal'>ENCODE at UCSC</A>"); printf(" "); makeDownloadsLink(database, tdb); } char *downArrow = "⇓"; enum browserType browser = cgiBrowser(); if (browser == btIE || browser == btFF) downArrow = "↓"; - printf(" <A HREF='#DISPLAY_SUBTRACKS' TITLE='Jump to subtracks section of " + printf(" <A HREF='#DISPLAY_SUBTRACKS' TITLE='Jump to subtrack list section of " "page'>Subtracks%s</A>", downArrow); printf(" <A HREF='#TRACK_HTML' TITLE='Jump to description section of page'>" "Description%s</A>", downArrow); if (trackDbSetting(tdb, "wgEncode") && isEncode2(database, tdb->track)) { printf(" <A HREF='#TRACK_CREDITS' TITLE='Jump to ENCODE lab contacts for this data'>" "Contact%s</A>", downArrow); } printf(" </span>"); } } if (!tdbIsSuperTrack(tdb) && !tdbIsComposite(tdb)) puts("<BR>"); if (tdbIsDownloadsOnly(tdb)) // Composites without tracks but with files to download @@ -3519,44 +3612,59 @@ else if (isHubTrack(track)) { tdb = hubConnectAddHubForTrackAndFindTdb(database, track, &tdbList, trackHash); } else if (sameString(track, "hgPcrResult")) tdb = pcrResultFakeTdb(); else { tdb = tdbForTrack(database, track,&tdbList); } if (tdb == NULL) { errAbort("Can't find %s in track database %s chromosome %s", track, database, chromosome); } -char *title = (tdbIsSuper(tdb) ? "Super-track Settings" : - tdbIsDownloadsOnly(tdb) ? DOWNLOADS_ONLY_TITLE : "Track Settings"); if(cartOptionalString(cart, "ajax")) { // html is going to be used w/n a dialog in hgTracks.js so serve up stripped down html // still need CSP2 header for security printf("%s", getCspMetaHeader()); trackUi(tdb, tdbList, ct, TRUE); cartRemove(cart,"ajax"); jsInlineFinish(); } else { - cartWebStart(cart, database, "%s %s", tdb->shortLabel, title); + char title[1000]; + if (tdb->parent) + { + safef(title, sizeof title, + // TODO: replace in-line styling with class + "<span style='background-color: #c3d4f4; " + "padding-left: 10px; padding-right: 10px;" + "margin-right: 10px; margin-left: -8px;'>" + "%s</span> %s", + tdb->parent->shortLabel, tdb->shortLabel); + } + else + safef(title, sizeof title, "%s", tdb->shortLabel); + char *titleEnd = (tdbIsSuper(tdb) ? "Tracks" : + tdbIsDownloadsOnly(tdb) ? DOWNLOADS_ONLY_TITLE : "Track Settings"); + htmlNoEscape(); // allow HTML tags to format title blue bar (using short label) + cartWebStart(cart, database, "%s %s", title, titleEnd); + htmlDoEscape(); trackUi(tdb, tdbList, ct, FALSE); printf("<BR>\n"); jsonPrintGlobals(); webEnd(); } } char *excludeVars[] = { "submit", "Submit", "g", NULL, "ajax", NULL,}; int main(int argc, char *argv[]) /* Process command line. */ { long enteredMainTime = clock1000(); cgiSpoof(&argc, argv); cartEmptyShell(doMiddle, hUserCookie(), excludeVars, NULL);