f6433b90aaa5892fd7ca02ca459c9beb31275238
kate
  Tue Aug 1 12:40:15 2017 -0700
Add link to supertrack if any. refs #19350

diff --git src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c
index 4eda7a6..3ed2e70 100644
--- src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c
+++ src/hg/hgGtexTrackSettings/hgGtexTrackSettings.c
@@ -7,30 +7,31 @@
 #include "trackDb.h"
 #include "cart.h"
 #include "portable.h"
 #include "cheapcgi.h"
 #include "web.h"
 #include "hCommon.h"
 #include "hui.h"
 #include "jsHelper.h"
 #include "gtexUi.h"
 #include "gtexInfo.h"
 #include "gtexTissue.h"
 
 /* Global Variables */
 struct cart *cart = NULL;             /* CGI and other variables */
 struct hash *oldVars = NULL;          /* Old contents of cart before it was updated by CGI */
+char *database = NULL;
 
 static void printGoButton()
 /* HTML for GO button and 'play' icon */
 {
 puts(
 "           <div class='gbButtonGoContainer text-right' title='Go to the Genome Browser'>\n"
 "               <div class='gbButtonGo'>GO</div>\n"
 "               <i class='gbIconGo fa fa-play fa-2x'></i>\n"
 "           </div>\n"
 );
 }
 
 static void printBodyMap()
 /* Include BodyMap SVG in HTML */
 {
@@ -53,31 +54,50 @@
 );
 printf(
 "           <span class='gbTrackName'>\n"
 "               %s Track\n"
 "               <span class='gbAssembly'> %s </span>\n"
 "           </span>"
 "           <span class='gbTrackTitle'> %s </span>\n"
 , tdb->shortLabel, assembly, tdb->longLabel);
 puts(
 "<!-- Info icon built from stacked fa icons -->\n"
 "           <a href='#INFO_SECTION' title='Jump to the track description'>\n"
 "               <span class='gbIconSmall fa-stack'>\n"
 "                   <i class='gbBlueDarkColor fa fa-circle fa-stack-2x'></i>\n"
 "                   <i class='gbWhiteColor fa fa-info fa-stack-1x'></i>\n"
 "               </span></a>\n"
+);
+if (tdb->parent)
+    {
+    // link to supertrack
+    char *encodedMapName = cgiEncode(tdb->parent->track);
+    char *chromosome = cartUsualString(cart, "c", hDefaultChrom(database));
+    puts("&nbsp;");
+    printf(
+    "       <a href='%s?%s=%s&c=%s&g=%s' title='Go to container track (%s)'>\n"
+    "           <i class='gbIconLevelUp fa fa-level-up'></i>\n"
+    "       </a>\n",
+                hgTrackUiName(), cartSessionVarName(), cartSessionId(cart),
+                chromosome, encodedMapName, tdb->parent->shortLabel
+    );
+    freeMem(encodedMapName);
+    }
+puts(
 "       </div>\n"
+);
+puts(
 "       <div class='col-md-2 text-right'>\n"
 );
 printGoButton();
 puts(
 "       </div>\n"
 "   </div>\n"
 );
 }
 
 static void printVisSelect(struct trackDb *tdb)
 /* Track visibility dropdown */
 {
 enum trackVisibility vis = tdb->visibility;
 vis = hTvFromString(cartUsualString(cart, tdb->track, hStringFromTv(vis)));
 boolean canPack = TRUE;
@@ -371,40 +391,50 @@
 "   </div>\n");
 }
 
 static struct trackDb *getTrackDb(char *db, char *track)
 /* Check if this is an assembly with GTEx track and get trackDb */
 {
 struct sqlConnection *conn = sqlConnect(db);
 if (conn == NULL)
     errAbort("Can't connect to database %s\n", db);
 char where[256];
 safef(where, sizeof(where), "tableName='%s'", track);
 // WARNING: this will break in sandboxes unless trackDb entry is pushed to hgwdev.
 // The fix of using hTrackDbList() would slow for all users, so leaving as is.
 struct trackDb *tdb = trackDbLoadWhere(conn, "trackDb", where);
 trackDbAddTableField(tdb);
+char *parent = trackDbLocalSetting(tdb, "parent");
+struct trackDb *parentTdb;
+if (parent)
+    {
+    safef(where, sizeof(where), "tableName='%s'", parent);
+    parentTdb = trackDbLoadWhere(conn, "trackDb", where);
+    if (parentTdb)
+        tdb->parent = parentTdb;
+    }
 sqlDisconnect(&conn);
 return tdb;
 }
 
 static void doMiddle(struct cart *theCart)
 /* Send HTML with javascript to display the user interface. */
 {
 cart = theCart;
 char *db = NULL, *genome = NULL, *clade = NULL;
 getDbGenomeClade(cart, &db, &genome, &clade, oldVars);
+database = db;
 
 // Start web page with new-style header
 webStartGbNoBanner(cart, db, "Genome Browser GTEx Track Settings");
 puts("<link rel='stylesheet' href='../style/gb.css'>");         // NOTE: This will likely go to web.c
 puts("<link rel='stylesheet' href='../style/hgGtexTrackSettings.css'>");
 
 char *track = cartUsualString(cart, "g", "gtexGene");
 struct trackDb *tdb = getTrackDb(db, track);
 if (!tdb)
     errAbort("No GTEx track %s found in database %s\n", track, db);
 
 // Container for bootstrap grid layout
 puts(
 "<div class='container-fluid'>\n");