db7c8abb6d7674bb26f579eabb58bc080ce76fdd
max
  Tue May 12 07:04:05 2020 -0700
adding a protease track to uniprot, refs #25192

diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index 738c147..d59e030 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -3076,126 +3076,30 @@
     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("&nbsp;&nbsp;<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>&nbsp;</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"
@@ -3231,32 +3135,30 @@
             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
@@ -3275,70 +3177,75 @@
 	}
     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") && !tdb->parent)
+    if (trackDbSetting(tdb, "wgEncode"))
         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)
+    if (tdb->parent)
+        {
+        char *encodedMapName = cgiEncode(tdb->parent->track);
+        printf("&nbsp;&nbsp;&nbsp;<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
         {
-        // show group info
         struct grp *grp, *grps = hLoadGrps(database);
         for (grp = grps; grp != NULL; grp = grp->next)
             {
             if (sameString(grp->name,tdb->grp))
                 {
                 printf("&nbsp;&nbsp;<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))
     {
@@ -3431,31 +3338,31 @@
     // NAVLINKS - For pages w/ matrix, add Description, Subtracks and Downloads links
     if (trackDbSetting(tdb, "dimensions")
     ||  (trackDbSetting(tdb, "wgEncode") && tdbIsComposite(tdb)))
         {
         printf("\n&nbsp;&nbsp;<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("&nbsp;&nbsp;");
             makeDownloadsLink(database, tdb);
             }
         char *downArrow = "&dArr;";
         enum browserType browser = cgiBrowser();
         if (browser == btIE || browser == btFF)
             downArrow = "&darr;";
-        printf("&nbsp;&nbsp;<A HREF='#DISPLAY_SUBTRACKS' TITLE='Jump to subtrack list section of "
+        printf("&nbsp;&nbsp;<A HREF='#DISPLAY_SUBTRACKS' TITLE='Jump to subtracks section of "
                "page'>Subtracks%s</A>", downArrow);
         printf("&nbsp;&nbsp;<A HREF='#TRACK_HTML' TITLE='Jump to description section of page'>"
                "Description%s</A>", downArrow);
         if (trackDbSetting(tdb, "wgEncode") && isEncode2(database, tdb->track))
             {
             printf("&nbsp;&nbsp;<A HREF='#TRACK_CREDITS' TITLE='Jump to ENCODE lab contacts for this data'>"
                "Contact%s</A>", downArrow);
             }
         printf("&nbsp;</span>");
         }
     }
 if (!tdbIsSuperTrack(tdb) && !tdbIsComposite(tdb))
     puts("<BR>");
 
 if (tdbIsDownloadsOnly(tdb))             // Composites without tracks but with files to download
@@ -3612,59 +3519,44 @@
 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
     {
-    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();
+    cartWebStart(cart, database, "%s %s", tdb->shortLabel, title);
     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);