c8cca307cadefdd6245ab8d1784478c95a717c88
kate
  Tue Sep 11 18:30:02 2018 -0700
First steps toward multi-region link on details page. refs #21917

diff --git src/hg/hgc/interactClick.c src/hg/hgc/interactClick.c
index 01dd2ac..4ea46ec 100644
--- src/hg/hgc/interactClick.c
+++ src/hg/hgc/interactClick.c
@@ -1,24 +1,25 @@
 /* Details page for interact type tracks */
 
 /* Copyright (C) 2018 The Regents of the University of California 
  * See README in this or parent directory for licensing information. */
 
 #include "common.h"
 #include "obscure.h"
 #include "hdb.h"
 #include "hgc.h"
+#include "trashDir.h"
 
 #include "interact.h"
 #include "interactUi.h"
 
 static struct interact *getInteractsFromTable(struct trackDb *tdb, char *chrom, int start, int end,
                                                 char *foot)
 /* Retrieve interact items at this position from track table */
 {
 struct sqlConnection *conn = NULL;
 struct customTrack *ct = lookupCt(tdb->track);
 char *table;
 if (ct != NULL)
     {
     conn = hAllocConn(CUSTOM_TRASH);
     table = ct->dbTableName;
@@ -151,30 +152,50 @@
 sprintLongWithCommas(endBuf, region2End);
 sprintLongWithCommas(sizeBuf, region2End - region2Start);
 printf("<b>%s region:</b> %s&nbsp;&nbsp;"
                 "<a href='hgTracks?position=%s:%d-%d' target='_blank'>%s:%s-%s</a> %s",
                 region2Label, region2Name, region2Chrom, region2Start+1, region2End,
                 region2Chrom, startBuf, endBuf, inter->targetStrand[0] == '.' ? "" : inter->targetStrand);
 printf("&nbsp;&nbsp;%s bp<br>\n", sizeBuf);
 int distance = interactRegionDistance(inter);
 if (distance > 0)
     {
     // same chrom
     sprintLongWithCommas(sizeBuf, distance);
     printf("<b>Distance between midpoints:</b> %s bp<br>\n", sizeBuf); 
     }
 
+// print link to multi-region view of ends
+
+// create bed file in trash directory with end coordinates
+struct tempName mrTn;
+trashDirFile(&mrTn, "hgt", "custRgn_interact", ".bed");
+FILE *f = fopen(mrTn.forCgi, "w");
+if (f == NULL)
+    errAbort("can't create temp file %s", mrTn.forCgi);
+fprintf(f, "%s\t%d\t%d\n"
+           "%s\t%d\t%d\n",
+                region1Chrom, region1Start, region1End, 
+                region2Chrom, region2Start, region2End);
+fclose(f);
+printf("<br><a target='_blank' href='hgTracks?"
+                "virtMode=1"
+                "&virtModeType=customUrl"
+                "&multiRegionsBedUrl=%s'"
+        ">Show both ends of interaction in multi-region browser view</a>",
+                mrTn.forCgi);
+
 #ifdef TODO /* TODO: get count and score stats of all interactions in window ?*/
 double *scores;
 AllocArray(scores, count);
 #endif
 }
 
 void doInteractItemDetails(struct trackDb *tdb, struct interact *inter, char *item, boolean isMultiple)
 /* Details of interaction item */
 {
 if (!isEmptyTextField(inter->name))
     printf("<b>Interaction name:</b> %s<br>\n", inter->name);
 
 
 printf("<b>Score:</b> %d<br>\n", inter->score);
 printf("<b>Value:</b> %0.3f<br>\n", inter->value);
@@ -200,18 +221,19 @@
 if (count > 1)
     {
     printf("<b>Interactions at this position:</b> %d<p>", count);
     doInteractRegionDetails(tdb, inters);
     printf("</p>");
     }
 genericHeader(tdb, item);
 for (inter = inters; inter; inter = inter->next)
     {
     if (count > 1)
         printf("<hr>\n");
     doInteractItemDetails(tdb, inter, item, count > 1);
     if (count > 1 && !isEmptyTextField(inter->name) && sameString(inter->name, item))
         printf("<hr>\n");
     }
+
 }