c385c1661b72541e1e8fb28187323f3b31c431e7
angie
  Fri May 29 18:24:49 2026 -0700
If new columns are present in ripples server output then use them to draw RIVET-like recombination diagram in pop-up.

diff --git src/hg/hgPhyloPlace/hgPhyloPlace.c src/hg/hgPhyloPlace/hgPhyloPlace.c
index c6051802695..d11553d2ce9 100644
--- src/hg/hgPhyloPlace/hgPhyloPlace.c
+++ src/hg/hgPhyloPlace/hgPhyloPlace.c
@@ -197,30 +197,36 @@
 "    color: white;\n"
 "    font-weight: bold;\n"
 "    font-size: 22px;\n"
 "}\n"
 "h2 { font-size: 18px; }\n"
 "h3 { font-size: 16px; }\n"
 "table.invisalign {\n"
 "    border: 0px;\n"
 "}\n"
 "table.invisalign td {\n "
 "    padding: 5px;\n"
 "}\n"
 "button.fullwidth {\n "
 "    width: 100%;\n"
 "}\n"
+"div.ui-dialog div.ui-dialog-buttonpane {\n"
+"    background: #FFFFFF;\n"
+"}\n"
+"div.ui-dialog {\n"
+"    background: #FFFFFF;\n"
+"}\n"
 "</style>\n"
      );
 
 
 
 // Container for bootstrap grid layout
 puts(
 "<div class='container-fluid'>\n");
 }
 
 static void newPageEndStuff()
 {
 puts(
 "</div>");
 jsIncludeFile("utils.js", NULL);
@@ -444,43 +450,55 @@
      "More tutorials from CDC COVID-19 Genomic Epidemiology Toolkit</a></h3>\n"
      "</p>"
      );
 puts("</div>");
 puts("</div>");
 puts("</form>");
 }
 
 static void mainPage(char *org)
 {
 // Start web page with new-style header
 webStartGbNoBanner(cart, org, "UShER: Upload");
 jsInit();
 jsIncludeFile("jquery.js", NULL);
 jsIncludeFile("ajax.js", NULL);
+boolean debugRecombs = FALSE;
+if (debugRecombs)
+    {
+    jsIncludeFile("jquery-ui.js", NULL);
+    jsIncludeFile("hgPhyloPlace.js", NULL);
+    webIncludeResourceFile("jquery-ui.css");
+    }
+
 newPageStartStuff();
 
 // Hidden form for reloading page when hpp_org select is changed
 static char *saveVars[] = { orgVar };
 jsCreateHiddenForm(cart, cgiScriptName(), saveVars, ArraySize(saveVars));
 
 puts("<div class='row'>"
      "  <div class='row gbSectionBannerLarge'>\n"
      "    <div class='col-md-11'>UShER: Ultrafast Sample placement on Existing tRee</div>\n"
      "    <div class='col-md-1'></div>\n"
      "  </div>\n"
      "</div>\n"
      "<div class='row'>\n");
+
+if (debugRecombs)
+    debugRecombinantDisplay(cart);
+
 if (hgPhyloPlaceEnabled())
     {
     inputForm(org);
     }
 else
     {
     puts("  <div class='gbControl col-md-12'>");
     puts("  Sorry, this server is not configured to perform phylogenetic placement.");
     puts("  </div>");
     }
 puts("</div>\n");
 
 newPageEndStuff();
 }
 
@@ -490,30 +508,33 @@
 {
 // If org is a real database or hub then set db to org.
 if (hDbExists(org))
     db = org;
 else
     {
     // Not a db -- see if it's a hub that is already connected:
     struct trackHubGenome *hubGenome = trackHubGetGenomeUndecorated(org);
     if (hubGenome != NULL)
         db = org;
     // Otherwise we're counting on the config to specify a .2bit file and we won't make CTs.
     }
 webStartGbNoBanner(cart, db, "UShER: Results");
 jsIncludeFile("jquery.js", NULL);
 jsIncludeFile("ajax.js", NULL);
+jsIncludeFile("jquery-ui.js", NULL);
+jsIncludeFile("hgPhyloPlace.js", NULL);
+webIncludeResourceFile("jquery-ui.css");
 newPageStartStuff();
 
 if (issueBotWarning)
     {
     char *ip = getenv("REMOTE_ADDR");
     botDelayMessage(ip, botDelayMillis);
     }
 
 // Allow 10 minutes for big sets of sequences
 lazarusLives(15 * 60);
 
 puts("<div class='row'>"
      "  <div class='row gbSectionBannerLarge'>\n"
      "    <div class='col-md-11'>UShER: Ultrafast Sample placement on Existing tRee</div>\n"
      "    <div class='col-md-1'></div>\n"