3c59123bd4cf548ede9222155214a8bbe478fbbd
kate
  Wed Jan 21 17:28:24 2015 -0800
Add link to table browser view of table in 'more info' section of clutser details (as we have no metadata link). refs #14353
diff --git src/hg/hgc/peakClusters.c src/hg/hgc/peakClusters.c
index 316375b..ece91c9 100644
--- src/hg/hgc/peakClusters.c
+++ src/hg/hgc/peakClusters.c
@@ -103,32 +103,38 @@
             link = metaVocabLink(fieldHash, fieldVal, fieldVal);
 
         }
     webPrintLinkCell(link != NULL ? link : fieldVal);
     }
 }
 
 static void printMetadataForTable(char *table)
 /* If table exists, _and_ tdb associated with it exists, print out
  * a metadata link that expands on click.  Otherwise print "unavailable" */
 {
 webPrintLinkCellStart();
 struct trackDb *tdb = hashFindVal(trackHash, table);
 if (tdb == NULL)
     printf("%s info n/a", table);
-else
-    compositeMetadataToggle(database, tdb, "metadata", TRUE, FALSE);
+else if (!compositeMetadataToggle(database, tdb, "metadata", TRUE, FALSE))
+    {
+    /* no metadata, but there is a track table to point TB at */
+    struct trackDb *parent = trackDbTopLevelSelfOrParent(tdb);
+    printf("<A target='_blank' title='browse table' "
+                "href='%s?db=%s&hgta_table=%s&hgta_group=%s&hgta_track=%s'>%s</A>",
+                    hgTablesName(), database, table, parent->grp, parent->track, table);
+    }
 webPrintLinkCellEnd();
 }
 
 static void queryInputTrackTable(struct dyString *query, char *inputTrackTable,
                                 struct slName *fieldList)
 /* Construct query in dyString to return contents of inputTrackTable ordered appropriately */
 {
 struct dyString *fields = dyStringNew(0);
 struct slName *field;
 sqlDyStringPrintf(query, "select tableName ");
 for (field = fieldList; field != NULL; field = field->next)
     sqlDyStringPrintfFrag(fields, ",%s", field->name);
 sqlDyStringPrintf(query, "%-s from %s", fields->string, inputTrackTable);
 if (fieldList != NULL)
     // skip leading comma
@@ -162,31 +168,30 @@
     {
     hash = metaHash;
     }
 if (vocabFile != NULL)
     *vocabFile = file;
 if (hash != NULL)
     *vocabHash = hash;
 }
 
 static void printPeakClusterInfo(struct trackDb *tdb, struct cart *cart,
                                 struct sqlConnection *conn, char *inputTrackTable, 
                                 struct slName *fieldList, struct bed *cluster)
 /* Print an HTML table showing sources with hits in the cluster, along with signal.
    If cluster is NULL, show all sources assayed */
 {
-
 /* Make the SQL query to get the table and all other fields we want to show
  * from inputTrackTable. */
 struct dyString *query = dyStringNew(0);
 queryInputTrackTable(query, inputTrackTable, fieldList);
 
 char *vocabFile = NULL;
 struct hash *vocabHash = NULL;
 getVocab(tdb, cart, &vocabFile, &vocabHash);
 
 int displayNo = 0;
 int fieldCount = slCount(fieldList);
 struct sqlResult *sr = sqlGetResult(conn, query->string);
 char **row;
 while ((row = sqlNextRow(sr)) != NULL)
     {
@@ -294,31 +299,30 @@
 void doPeakClusterListItemsAssayed()
 /* Put up a page that shows all experiments associated with a cluster track. */
 {
 struct trackDb *clusterTdb = tdbForTableArg();
 cartWebStart(cart, database, "List of items assayed in %s", clusterTdb->shortLabel);
 struct sqlConnection *conn = hAllocConn(database);
 
 char *inputTableFieldDisplay = trackDbSetting(clusterTdb, "inputTableFieldDisplay");
 webPrintLinkTableStart();
 if (inputTableFieldDisplay)
     {
     struct slName *fieldList = stringToSlNames(inputTableFieldDisplay);
     printClusterTableHeader(fieldList, FALSE, FALSE, FALSE);
     char *inputTrackTable = trackDbRequiredSetting(clusterTdb, "inputTrackTable");
     printPeakClusterInfo(clusterTdb, cart, conn, inputTrackTable, fieldList, NULL);
-    //http://genome-test.cse.ucsc.edu/cgi-bin/hgTables?db=hg38&hgta_table=uwEnc2DnasePeaksWgEncodeEH000507
     }
 else
     errAbort("Missing required trackDb setting %s for track %s", "inputTableFieldDisplay", 
                 clusterTdb->track);
 webPrintLinkTableEnd();
 hFreeConn(&conn);
 }
 
 void doPeakClusters(struct trackDb *tdb, char *item)
 /* Display detailed info about a cluster of DNase peaks from other tracks. */
 {
 int start = cartInt(cart, "o");
 char *table = tdb->table;
 int rowOffset = hOffsetPastBin(database, seqName, table);
 char query[256];