f8b81fa07495f9e71fabbed2f539adee95dd2403
chmalee
  Tue Nov 7 15:47:59 2023 -0800
Put some basic code for checking associated chain vis into the chainHprc details tables. Needs to be fixed up more, refs #32562

diff --git src/hg/hgc/bigBedClick.c src/hg/hgc/bigBedClick.c
index dd26321..85f6654 100644
--- src/hg/hgc/bigBedClick.c
+++ src/hg/hgc/bigBedClick.c
@@ -477,30 +477,57 @@
 
             if (printCount == 0)
                 {
                 int i;
                 char label[20];
                 safef(label, sizeof(label), "nonBedFieldsLabel");
                 printf("<B>%s&nbsp;</B>",
                        trackDbSettingOrDefault(tdb, label, "Non-BED fields:"));
                 for (i = restBedFields;  i < restCount;  i++)
                     printf("%s%s", (i > 0 ? "\t" : ""), restFields[i]);
                 printf("<BR>\n");
                 }
             }
         if (sameString(tdb->type, "bigGenePred"))
             bigGenePredLinks(tdb->track, item);
+        if (startsWith("hprcDeletions", tdb->track) || startsWith("hprcInserts", tdb->track) || startsWith("hprcArr", tdb->track))
+            {
+            // the source field, which is the first item after the itemRgb will
+            // have all the other chains
+            // TODO: make this controlled by a trackDb setting
+            char *oChainList[2048];
+            int i, numChains = chopCommas(cloneString(restFields[6]), oChainList);
+            char *oChain = NULL;
+            struct dyString *ds = dyStringNew(0);
+            dyStringPrintf(ds, "var chainVis = {");
+            for (i = 0; i < numChains; i++)
+                {
+                oChain = oChainList[i];
+                char *cartVar = catTwoStrings("chainHprc", oChain);
+                char *chainVis = cartOptionalString(cart, cartVar);
+                if (chainVis == NULL)
+                    {
+                    cartVar = catTwoStrings(cartVar, "_sel");
+                    chainVis = cartOptionalString(cart, cartVar);
+                    // TODO: this is not getting the vis right, because _sel is not the
+                    // same as a visibility
+                    }
+                dyStringPrintf(ds, "\"%s\": \"%s\", ", oChain, chainVis != NULL ? hStringFromTv(hTvFromString(chainVis)) : "Hide");
+                }
+            dyStringPrintf(ds, "};\n");
+            jsInline(dyStringCannibalize(&ds));
+            }
         }
     if (isCustomTrack(tdb->track))
 	{
 	time_t timep = bbiUpdateTime(bbi);
 	printBbiUpdateTime(&timep);
 	}
     char *motifPwmTable = trackDbSetting(tdb, "motifPwmTable");
     if (motifPwmTable)
         {
         struct dnaSeq *seq = hDnaFromSeq(database, bed->chrom, bed->chromStart, bed->chromEnd, dnaLower);
         if (bed->strand[0] == '-')
             reverseComplement(seq->dna, seq->size);
         struct dnaMotif *motif = loadDnaMotif(bed->name, motifPwmTable);
         motifHitSection(seq, motif);
         }