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(" "); + 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");