fa0ff693583dbd90241f3bd3b2dce6eafd974d6a
chmalee
  Mon May 4 14:17:20 2026 -0700
Add a basic description page for myVariants tracks, refs #38808

diff --git src/hg/lib/customFactory.c src/hg/lib/customFactory.c
index 3be82da25ab..d8582385429 100644
--- src/hg/lib/customFactory.c
+++ src/hg/lib/customFactory.c
@@ -3442,30 +3442,37 @@
     struct lineFile *lf = cpp->fileStack;
     lineFileExpectAtLeast(lf, 3, wordCount);
     if (fieldCount == 0)
         fieldCount = wordCount;
     else if (fieldCount != wordCount)
         {
 	errAbort("error: some lines in myVariants type custom track have %d fields, others have %d",
 		fieldCount, wordCount);
 	}
     struct myVariants *item = myVariantsFromRow(row, wordCount);
     customFactoryCheckChromNameDb(ctDb, item->chrom, lf);
     slAddHead(&list, item);
     }
 track->dbTrackType = cloneString("myVariants");
 track->tdb->type = cloneString("myVariants");
+if (isEmpty(track->tdb->html))
+    {
+    char descPath[PATH_LEN];
+    safef(descPath, sizeof descPath, "%s/inc/myVariantsDesc.html", hDocumentRoot());
+    if (fileExists(descPath))
+        readInGulp(descPath, &track->tdb->html, NULL);
+    }
 /* tdb->shortLabel holds the name= value from the track line at this point.
  * Use it for track/table identity, then override the display labels
  * from the shortLabel/longLabel settings if present. */
 track->tdb->table = track->tdb->shortLabel;
 track->tdb->track = track->tdb->shortLabel;
 char *sl = trackDbSetting(track->tdb, "shortLabel");
 if (isNotEmpty(sl))
     track->tdb->shortLabel = cloneString(sl);
 char *ll = trackDbSetting(track->tdb, "longLabel");
 if (isNotEmpty(ll))
     track->tdb->longLabel = cloneString(ll);
 return track;
 }
 
 static struct customFactory myVariantsFactory =